GiteaでGitサーバー & CI/CDを自前構築:軽量、高速、そして究極の「プライバシー」

Ubuntu tutorial - IT technology blog
Ubuntu tutorial - IT technology blog

なぜ低スペックVPSにGitea + Gitea Actionsが「最適」なのか?

GitLabを動かすためだけにRAMを増設してコストがかさんだり、クラウドにコードを置く際のプライバシーが心配になったことはありませんか?その答えがGiteaです。GitLabを安定して動作させるには通常4GB〜8GBのRAMが必要ですが、Giteaは待機時の消費メモリがわずか100MB〜150MB程度です。実際にHetznerের 1 vCPU – 1GB RAMのVPSでテストしたところ、5人のチームで頻繁にコードをプッシュしても非常にスムーズに動作しました。

大きな転換点は、バージョン1.19でGitea Actionsが登場したことです。これはGitHub Actionsの.yaml設定ファイルとほぼ100%の互換性があります。既存のワークフローをそのまま自前サーバーに持ち込むことができ、ライセンス料や「無料枠」の制限を気にすることなく利用可能です。

はじめに:PostgreSQLデータベースのセットアップ

Giteaは手軽なSQLiteもサポートしていますが、最初からPostgreSQLを使用することを強く推奨します。データのバックアップがより安全になり、プロジェクトが大規模になった際の並行処理能力も格段に向上します。

# システムのアップデート
sudo apt update && sudo apt upgrade -y

# PostgreSQLのインストール
sudo apt install postgresql postgresql-contrib -y

# Gitea用のデータベースとユーザーを作成
sudo -u postgres psql -c "CREATE DATABASE giteadb;"
sudo -u postgres psql -c "CREATE USER gitea WITH ENCRYPTED PASSWORD 'ChouTsuyoiPassword123';"
sudo -u postgres psql -c "GRANT ALL PRIVILEGES ON DATABASE giteadb TO gitea;"

サービスを実行するための専用システムユーザーを作成することも忘れないでください。これにより権限が隔離され、万が一アプリケーションに脆弱性が見つかった場合でもサーバーを保護できます。

sudo adduser --system --shell /bin/bash --gecos 'Git Version Control' --group --disabled-password git

バイナリファイルによるGiteaのインストール

リソースの節約 and ネットワークのデバッグのしやすさを考慮し、Dockerではなくバイナリファイルから直接インストールする方法を推奨します。この方法なら、実行中のプロセスを完全に制御できます。

# 最新版のGiteaをダウンロード
wget -O /tmp/gitea https://dl.gitea.com/gitea/1.21.4/gitea-1.21.4-linux-amd64

# 権限を付与して実行ディレクトリに移動
sudo chmod +x /tmp/gitea
sudo mv /tmp/gitea /usr/local/bin/gitea

# コードとログを保存するディレクトリ構造を作成
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 -p /etc/gitea
sudo chown root:git /etc/gitea
sudo chmod 770 /etc/gitea

次に、Systemdを使用してGiteaがUbuntuの起動時に自動開始されるように設定します。/etc/systemd/system/gitea.serviceにサービスファイルを作成し、サービスを有効化します。

sudo systemctl enable --now gitea

ブラウザを開き、http://サーバーIP:3000にアクセスしてください。インストール画面が表示されるので、前のステップで作成したPostgreSQLの情報を入力すれば完了です。

Act RunnerによるCI/CDの有効化

Gitea Actionsを実行するには、Act Runnerと呼ばれる独立したコンポーネントが必要です。これはGiteaからのビルド命令を待機する「ワーカー」のようなものだと考えてください。

まず、Web UIのSite Administration(サイト管理) -> Actions -> RunnersからRegistration Tokenを取得します。その後、ターミナルで以下の操作を行います。

# Act Runnerをダウンロード
wget -O act_runner https://dl.gitea.com/act_runner/main/act_runner-main-linux-amd64
sudo chmod +x act_runner

# ランナーをシステムに登録
./act_runner register --instance http://localhost:3000 --token <あなたのトークン> --no-interactive

登録が完了したら、CI/CDシステムが24時間365日常に稼働するように、バックグラウンドサービスとして設定しましょう。

検証:最初のパイプラインを実行する

テストとして、新しいリポジトリを作成し、.gitea/workflows/test.yamlファイルを追加します。このファイルは、新しいコードがプッシュされたときにサーバーにメッセージを表示するよう命令するものです。

name: Gitea Actions Demo
on: [push]
jobs:
  Check-System:
    runs-on: ubuntu-latest
    steps:
      - run: echo "CI/CDシステムが正常に動作しています!"
      - run: node -v

Actionsタブに緑のチェックマークが表示されれば成功です!大手サービスに引けを取らない立派な自動化システムを手に入れました。

サーバーをフリーズさせないための最適化のコツ

  • ランナーにはDockerを併用する: Gitea本体はバイナリで実行しますが、Act RunnerにはDockerを使用することをお勧めします。これによりクリーンなビルド環境が構築され、実行後の不要なファイルが残りません。
  • Swap(スワップ)の設定: 1GB RAMのVPSの場合、2GBのSwapを作成しましょう。npm installやDockerイメージのビルド時にはRAM使用率が急上昇し、Out-Of-Memory (OOM) エラーが発生しやすいためです。
  • リバースプロキシ: 3000ポートを直接使用せず、NginxをインストールしてLet’s EncryptでHTTPS化してください。インターネット上でソースコードを保護するために非常に重要です。

Giteaを自前で運用することで、データを完全にコントロールできるようになります。プライベートリポジトリの制限やサービスの価格改定に怯える必要もありません。受託開発プロジェクトや小規模なスタートアップにとって、コストとパフォーマンスのバランスが最も取れた選択肢と言えるでしょう。

Share: