Ubuntu 22.04.3 LTSにGitサーバーの構築

作成日:2024/01/08
最終更新日:2024/01/08

Ubuntu 22.04.3 LTSにGitサーバーの構築

作成日:2024/01/08
最終更新日:2024/01/08

概要

Gitのホスティングサイトとして、 GitHub[1] や Bitbucket[2] が有名です。ローカルでの開発時に閉じた環境でこれらのサイトとおなじようにGUIベースでGitのリポジトリをホスティングしたい場合があり、OSSとして GitLab[3] や GitBucket[4] 、 Gogs[5] などがあります。今回は、構築時にあまりリソースを必要としない Gogs を Ubuntu 22.04.03 LTS 上に構築します。

下準備

Gogs のインストールは公式サイトの Installation[6] を参考にするのが良さそうです。構築するために、MySQLやPostgreSQL、SQLite3などのDBが必要です。MySQLを導入したDBサーバーは既に構築済なのでそちらを利用することにします。

Gitのインストール

まず、サーバーにGitをインストールします。

コマンド1. Gitのインストール
sudo apt update
sudo apt install git

Goのインストール

今回は、 Install from source[7] に沿って、ソースコードから構築します。 GogsはGoで書かれているので、Goをインストールします。 Gitをインストールする際に apt update は既に実施しているため省略します。

コマンド2. Goのインストール
sudo apt install golang

ユーザーの追加

Gogsを動作させるためのユーザーとして git を追加します。

コマンド3. Gogsを動作させるユーザーを追加する
sudo adduser --disabled-login --gecos 'Gogs' git

Gogsで使用するディレクトリの作成

Gogsで使用するディレクトリを作成し、パーミッションを変更しておきます。

コマンド4. Gogsで使用するディレクトリの作成
sudo mkdir /var/gogs
sudo chown git:git /var/gogs
sudo mkdir /var/log/gogs
sudo chown git:git /var/log/gogs

MySQLのクライアントのインストール

MySQLのクライアントをインストールします。

コマンド5. MySQLのクライアントのインストール
sudo apt install mysql-client

MySQLサーバーの設定

MySQLサーバーにログインし、以下のSQL文を発行しておきます。

ソース1. MySQLサーバーで発行するSQL文
CREATE DATABASE gogs CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
CREATE USER 'gogs'@'%' IDENTIFIED BY 'パスワード';
GRANT ALL ON gogs.* to 'gogs'@'%' WITH GRANT OPTION;

Gogsの構築

Gogsのclone

Gogsをリポジトリからcloneします。

コマンド6. Gogsのclone
git clone https://github.com/gogs/gogs.git gogs

Gogsのbuild

Gogsをbuildします。

コマンド7. Gogsのbuild
cd gogs
git checkout v0.13.0
go build -o gogs

Gogsの動作確認

Gogsを動作確認します。

コマンド8. Gogsの動作確認
./gogs web

ブラウザで、Gogsをインストールしたサーバーへアクセスします。デフォルトではポート番号が3000番になるので、 URLは http://サーバーのIPアドレス:3000 になります。

ページが表示されたら、コンソールから CTRL + C を入力し、 Gogsを終了します。

Gogsの設置

Gogsを移動します。 また、設定に必要となるディレクトリを作成しておきます。

コマンド9. gogsの移動
sudo mv ~/gogs /usr/local/gogs
mkdir /usr/local/gogs/custom
sudo chown git:git /usr/local/gogs/custom

Gogsの起動スクリプトの編集

Gogsの起動スクリプトを環境に合わせて修正します。 Ubuntu 22.04.3 LTSの場合はsystemdのものをベースにします。

コマンド10. 起動スクリプトの編集
vi /usr/local/gogs/scripts/systemd/gogs.service

差分としては、以下になります。

ソース2. 起動スクリプトの差分
--- gogs.service.org    2024-01-07 15:28:47.776078301 +0000
+++ gogs.service        2024-01-07 16:07:21.034870359 +0000
@@ -2,7 +2,6 @@
 Description=Gogs
 After=syslog.target
 After=network.target
-After=mariadb.service mysql.service mysqld.service postgresql.service memcached.service redis.service

 [Service]
 # Modify these two values and uncomment them if you have
@@ -14,14 +13,14 @@
 Type=simple
 User=git
 Group=git
-WorkingDirectory=/home/git/gogs
-ExecStart=/home/git/gogs/gogs web
+WorkingDirectory=/usr/local/gogs
+ExecStart=/usr/local/gogs/gogs web
 Restart=always
 Environment=USER=git HOME=/home/git

 # Some distributions may not support these hardening directives. If you cannot start the service due
 # to an unknown option, comment out the ones not supported by your version of systemd.
-ProtectSystem=full
+ProtectSystem=false
 PrivateDevices=yes
 PrivateTmp=yes
 NoNewPrivileges=true

起動スクリプトを設置し、起動時に実行されるようにします。

コマンド11. 起動スクリプトの設置と有効化
sudo cp /usr/local/gogs/scripts/systemd/gogs.service /etc/systemd/system/
sudo systemctl start gogs
sudo systemctl enable gogs

Gogsの初期設定

ブラウザで、Gogsをインストールしたサーバーへアクセスします。デフォルトではポート番号が3000番になるので、 URLは http://サーバーのIPアドレス:3000 になります。アクセスすると設定画面が表示されるので、今回は以下のように設定しました。

データベース設定
図1. データベース設定
Gogsの全般設定
図2. Gogsの全般設定

必要に応じてオプションの設定も実施します。設定の入力を完了したら、「Gogsをインストール」ボタンをクリックします。

Gogsをインストール
図3. Gogsをインストール

これで、インストールは完了です。アカウントの作成やリポジトリの作成については割愛します。

まとめ

Gogsサーバーを構築する場合は以下を実施します。

  • Goのインストール
  • 適切なバージョンのソースコードを用意
  • 公式ドキュメントを適宜読み替え

参考文献

  1. GitHub, Inc., GitHub, GitHub, 2024
  2. Atlassian, Bitbucket, Bitbucket, 2024
  3. GitLab B.V., GitLab, GitLab, 2024
  4. GitBucket, GitBucket, GitBucket, 2024
  5. Gogs, Gogs, Gogs, 2024
  6. Gogs, Installation, Gogs, 2024
  7. Gogs, Install from source, Gogs, 2024