自分のGit:ForgejoまたはGitea
Webインターフェース、SSHアクセス、ビルド実行を備えた個人用リポジトリサーバーの構築方法と、コードを失わないためにコピーすべきものを説明します。
更新日 2026年8月23日
コードを他人のプラットフォームに渡したくない場合や、プライベートリポジトリとビルド時間に制限をかけたくない場合は、独自のGitが必要です。ForgejoとGiteaは密接に関連した2つのプロジェクトです(ForgejoはGiteaから派生しました)。どちらも単一のコンテナでインストールでき、控えめなマシンで動作します。
何を選び、どれだけのリソースが必要か
日常的な作業にほとんど違いはありません。インターフェース、イシュー、プルリクエスト、ミラー、ビルド用のActionsなどです。Forgejoはコミュニティによって開発され、Giteaは企業によって開発されています。プロジェクトの独立性が重要ならForgejoを選んでください。
2〜3人ならVDS-1で十分です。ビルド用のランナーを追加したらすぐにVDS-3以上にしてください。ビルドはCPUとディスクを消費し、ディスク速度はティアによって制限されます。
Composeでのインストール
services:
forgejo:
image: codeberg.org/forgejo/forgejo:11
container_name: forgejo
restart: unless-stopped
environment:
- USER_UID=1000
- USER_GID=1000
volumes:
- ./data:/data
- /etc/timezone:/etc/timezone:ro
ports:
- "3000:3000"
- "2222:22"
docker compose up -d
docker compose logs -f forgejo
http://<machine-address>:3000 を開き、初期設定を進めます。最初に作成されたユーザーが管理者になります。
ポート3000を外部に公開しておく必要はありません。閉じて、証明書付きのWebサーバーをサービスの前に置いてください。そうすればHTTPSを利用でき、設定パネルを外部に見せることもありません。設定が完了するまで、アドレスを開いた人が誰でも最初に管理者を作成できてしまいます。
SSHアクセス
コンテナ内のポート22は2222に転送されます。22はシステムのSSHに使われているためです。リポジトリの設定では、アドレスは次のようになります。
git clone ssh://git@example.com:2222/user/repo.git
ポートなしの通常の git@example.com:user/repo.git を使いたい場合は、2222をコンテナに残し、ホスト側でシステムSSHを介した転送を設定するか、管理用SSHを別のポートに移してください(アクセスの保護を参照)。
ビルド
Actionsは別のランナーによって実行されます。それは forgejo-runner コンテナで、管理者設定のトークンで登録します。Dockerソケットへのアクセスは意図的にのみ与えてください。マシン上のrootと同等です。ビルドでは、ランナーをメモリとCPUで制限することをおすすめします。リソース制限を参照してください。
何をバックアップするか
すべての状態は ./data ボリュームに保存されます。リポジトリ、データベース、添付ファイル、設定です。バックアップは次のように行います。
docker compose stop forgejo
restic -r <repository> backup ./data
docker compose start forgejo
SQLiteを使用している場合はサービスを停止してください。そうしないとデータベースのスナップショットが不整合になる可能性があります。PostgreSQLなら、停止せずに pg_dump で十分です。詳細は何を正確にバックアップするかとResticを参照してください。
よくある間違い
- リポジトリのサイズを忘れる。 ゲームサーバーのビルドやメディアはディスク容量をすぐに消費します。エントリーティアの40 GBは気づかないうちに使い切ります。
- メールを設定していない。 これがないと、招待やパスワードリセットが機能しません。外部SMTPを接続する方が、独自のメールサーバーを設定するよりも簡単です。
- バックアップなしで更新する。 メジャーバージョンを変更するとデータベーススキーマが変わります。まずバックアップ、次に
docker compose pullです。コンテナの更新を参照してください。