Fedoraで構築する「軽量・高速・高コスパ」なGitea Gitサーバー:SELinuxでセキュリティを最大化

Fedora tutorial - IT technology blog
Fedora tutorial - IT technology blog

なぜGiteaとFedoraは「最高の組み合わせ」なのか?

GitHubやGitLabを使うのは確かに便利ですが、自分のソースコードを自前で管理することには独特の醍醐味があります。もし、安価なVPSや自宅の古いPCを運用しているなら、GitLabは起動だけで最低4GBのRAMを消費するため、少々荷が重いかもしれません。そこでGiteaの出番です。Giteaは非常に軽量で、個人利用なら100MB〜150MB程度のRAMで軽快に動作します。それでいて、Pull Request、Wiki、カンバンボードなど、必要な機能はすべて揃っています。

OSにFedora Serverを選んだ理由は、このディストリビューションが常に最新技術を取り入れているからです。安定しており、かつDebianや古いCentOSよりも新しいパッケージを利用できます。標準で有効になっているSELinuxと組み合わせることで、サーバーを非常に強固に保護することができます。

クイックスタート:5分で完了する高速インストール

Fedoraに慣れていて、すぐに結果を確認したい方向けの要約ルートです:

  1. MariaDBデータベースを構築する。
  2. gitユーザーを作成する(root権限でアプリを実行しないため)。
  3. Giteaの最新バイナリをダウンロードする。
  4. Firewalldでポート3000を開放する。
  5. Web UI経由で設定を完了する。
# MariaDBをインストールして即座に起動
sudo dnf install mariadb-server -y
sudo systemctl enable --now mariadb

# インストール画面にアクセスするためポート3000を開放
sudo firewall-cmd --permanent --add-port=3000/tcp
sudo firewall-cmd --reload

これで土台は完成です。次に、アクセス権限などの細かなトラブルを避けるために詳細を見ていきましょう。

ステップ1:データベースの設定

Giteaは複数のDBをサポートしていますが、FedoraではMariaDBが最も「堅実」な選択肢です。インストール後は、セキュリティ設定コマンドを実行するのを忘れないでください:

sudo mysql_secure_installation

次に、Gitea専用のデータベースを作成します。コミットメッセージ内の特殊文字や絵文字を正しく扱うために、utf8mb4を使用することに注意してください:

CREATE DATABASE giteadb CHARACTER SET 'utf8mb4' COLLATE 'utf8mb4_unicode_ci';
CREATE USER 'gitea'@'localhost' IDENTIFIED BY 'あなたのパスワード';
GRANT ALL PRIVILEGES ON giteadb.* TO 'gitea'@'localhost';
FLUSH PRIVILEGES;
EXIT;

ステップ2:システムユーザーの作成と権限設定

鉄則:Webサービスをroot権限で実行してはいけません。小さな脆弱性がサーバー全体の制御を失うことにつながります。専用のユーザーを作成しましょう:

sudo useradd -m -r -s /bin/bash git

# 標準的なディレクトリ構造を作成
sudo mkdir -p /var/lib/gitea/{custom,data,log}
sudo chown -R git:git /var/lib/gitea/
sudo chmod -R 750 /var/lib/gitea/
sudo mkdir /etc/gitea
sudo chown root:git /etc/gitea
sudo chmod 770 /etc/gitea

ここでは、/etc/giteagitグループの書き込み権限を与えています。インストール完了後、セキュリティを高めるためにこの権限を回収します。

ステップ3:Giteaバイナリのダウンロードとインストール

古いリポジトリからインストールするのではなく、公式サイトから直接最新のバイナリ(例:1.21.x)を取得することをお勧めします。

VERSION=1.21.4
wget -O /tmp/gitea https://dl.gitea.com/gitea/${VERSION}/gitea-${VERSION}-linux-amd64
sudo mv /tmp/gitea /usr/local/bin/gitea
sudo chmod +x /usr/local/bin/gitea

ステップ4:SELinuxを使いこなす(無効化はNG!)

ネット上の多くのチュートリアルでは setenforce 0 を推奨していますが、それは悪手です。SELinuxはFedoraを権限昇格攻撃から守る鎧です。無効にするのではなく、Giteaを信頼するように設定しましょう。

管理ツールをインストールし、Giteaのファイルにラベルを割り当てます:

sudo dnf install policycoreutils-python-utils -y

# バイナリとデータに適切なコンテキストを割り当て
sudo semanage fcontext -a -t bin_t "/usr/local/bin/gitea"
sudo semanage fcontext -a -t var_lib_t "/var/lib/gitea(/.*)?"
sudo semanage fcontext -a -t etc_t "/etc/gitea(/.*)?"
sudo restorecon -Rv /usr/local/bin/gitea /var/lib/gitea /etc/gitea

ステップ5:Systemdサービスの設定

再起動時にGiteaが自動起動するように、/etc/systemd/system/gitea.serviceにシンプルなサービスファイルを作成します:

[Unit]
Description=Gitea
After=network.target mariadb.service

[Service]
RestartSec=2s
Type=simple
User=git
Group=git
WorkingDirectory=/var/lib/gitea/
ExecStart=/usr/local/bin/gitea web --config /etc/gitea/app.ini
Restart=always
Environment=USER=git HOME=/home/git GITEA_WORK_DIR=/var/lib/gitea

[Install]
WantedBy=multi-user.target

おなじみのコマンドで有効化します:

sudo systemctl daemon-reload
sudo systemctl enable --now gitea

ステップ6:Web UIで設定を完了

http://あなたのIP:3000 にアクセスします。ステップ1で作成したデータベース情報を入力してください。注意点として、Server Domainの項目には、SSHやHTTPのクローンリンクが正しく生成されるよう、使用予定のIPまたはドメインを正確に入力してください。

重要: このページで必ず管理者(Admin)アカウントを作成してください。これをスキップすると、最初にユーザー登録をした人が自動的に管理者権限を持つことになります。

アドバンス:NginxとSSLの導入

より本格的に運用するなら、Nginxをリバースプロキシとして使い、Let’s EncryptでSSLを導入すべきです。これにより、Giteaは3000番ポートではなく、標準の443番ポートで動作するようになります。

server {
    listen 80;
    server_name git.あなたのドメイン.com;

    location / {
        proxy_pass http://localhost:3000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

実戦で役立つヒント

  • バックアップ: Giteaには gitea dump コマンドがあります。これを毎晩午前2時に実行する cron ジョブを作成しましょう。一つのzipファイルにコード、DB、設定がすべて含まれます。
  • アップデート: 新バージョンが出た際は、新しいバイナリを /usr/local/bin/gitea に上書きしてサービスを再起動するだけです。30秒もかかりません。
  • SSHエラー: SSHキーを追加したのにプッシュが拒否される場合、99%の確率でSELinuxが .ssh ディレクトリへの書き込みを許可していないことが原因です。restorecon -Rv /home/git/.ssh を試してみてください。

Giteaをセルフホストすることは、コスト削減だけでなく、Linuxシステムを深く理解するための素晴らしい方法です。もしインストール過程で困ったことがあれば、下のコメント欄でエラー内容を共有してください!

Share: