ホーム › 記事一覧 › Gitea(Forgejo)を自宅サーバーに立てる:GitHubの個人リポジトリを手元に置く構成

Forgejo

Gitea(Forgejo)を自宅サーバーに立てる:GitHubの個人リポジトリを手元に置く構成

公開 2026-10-16読了 6 分

Photo: luis gomes / Pexels

この記事でわかること
GitHubの個人リポジトリを自宅にも置くため、Forgejo(Gitea系)をDocker Composeで立て、プルミラーで自動同期する手順です。SSHのポート、アクセストークン、バックアップと更新の注意点もまとめます。

先に結論です。GitHub の個人リポジトリを手元にも置きたいなら、Forgejo(Gitea から分かれたソフト)を Docker Compose で立て、GitHub のリポジトリを「プルミラー」として登録するのが手軽です。

  • データベースは SQLite で十分。ラズパイ5や N100 ミニPC で動かせる
  • GitHub はそのまま使い続け、自宅側が既定で 8 時間ごとに自動で追いかける
  • 外出先から使うときは Tailscale 経由にして、ルーターのポートは開けない

GitHub をやめる話ではありません。「アカウントに何かあっても、コードは家に残っている」状態を作るのが目的です。

Gitea と Forgejo のどちらを選ぶか

Forgejo は 2022 年に Gitea から分かれたフォークで、2024 年からは独自に開発を進める「ハードフォーク」になったとされています。画面や設定ファイル(app.ini)の作りはよく似ていて、この記事の手順は名前を読み替えればほぼそのまま Gitea にも使えます。

項目ForgejoGitea
開発の中心非営利団体 Codeberg e.V. の傘下のプロジェクトGitea Ltd. とコミュニティ
Docker イメージcodeberg.org/forgejo/forgejodocker.gitea.com/gitea
環境変数の接頭辞FORGEJO__GITEA__
長期サポート版あり(v15 は 2027 年 7 月 15 日まで)公式ドキュメントで確認

2026 年 10 月時点で Forgejo の最新は v17.0(10 月 15 日公開)ですが、これは約 3 か月でサポートが切れる版です。自宅で放っておく用途なら、私は長期サポート版の v15 を選びます。大きな更新が年 1 回程度で済むからです。

Docker Compose で Forgejo を立てる

動かす機械は、Docker が入った Linux なら何でもかまいません。Gitea のドキュメントでは、小規模なら CPU 2 コア・メモリ 1GB で足りるとされています。新しく用意するなら Raspberry Pi 5 8GB でも足りますし、ほかのコンテナも一緒に動かすなら Beelink Mini S12 Pro のような N100 のミニPC のほうが余裕があります。

作業用のフォルダに compose.yaml を作ります。

services:
  forgejo:
    image: codeberg.org/forgejo/forgejo:15
    container_name: forgejo
    environment:
      - USER_UID=1000
      - USER_GID=1000
      - FORGEJO__server__SSH_PORT=222
    restart: always
    volumes:
      - ./forgejo:/data
      - /etc/localtime:/etc/localtime:ro
    ports:
      - "3000:3000"
      - "222:22"

ポイントは 3 つです。

  • :15 のタグ:v15 系の最新版を追いかけます。勝手に v16 以降へ上がることはありません
  • 222:22:ホストの 22 番はサーバー自体の SSH で使っているので、Git 用の SSH は 222 番で受けます
  • SSH_PORT=222:画面に出るクローン用 URL を 222 番に合わせる設定です。これがないと、URL が 22 番のまま表示されます

docker compose up -d で起動し、ブラウザで http://サーバーのIPアドレス:3000 を開くと初期設定の画面が出ます(表記は版によって多少違います)。

  1. データベースは「SQLite3」を選ぶ。個人や家族で使う規模なら十分です
  2. ベース URL(ROOT_URL)は、実際にブラウザで開く URL にする。例:http://192.168.1.10:3000/
  3. 「サーバーと外部サービスの設定」で、セルフ登録を無効にする
  4. 「管理者アカウントの設定」で管理者を作ってからインストールする

セルフ登録を無効にしておかないと、画面を開けた人なら誰でもアカウントを作れてしまいます。

GitHub のリポジトリをミラーとして取り込む

非公開のリポジトリを取り込むには、GitHub のアクセストークンが要ります。GitHub の Settings > Developer settings から Fine-grained のトークンを作り、対象のリポジトリを選んで、権限は「Contents」を読み取りにします。公開リポジトリだけなら、トークンは不要です。

Forgejo 側の手順は次のとおりです。

  1. 右上の「+」から「新しい移行」を選び、「GitHub」を選ぶ
  2. リポジトリの URL とアクセストークンを入れる
  3. ミラーにするためのチェック(「このリポジトリはミラーになります」のような項目)を入れて移行する

これで定期的に GitHub から取り込まれます。間隔は既定で 8 時間、最短 10 分とされていて、リポジトリの設定から変えられます。すぐ反映したいときは「今すぐ同期」を押します。

注意点が 3 つあります。

  • ミラーにできるのは作るときだけ:普通のリポジトリとして作ったものを、後からミラーには変えられないとされています
  • 追いかけるのは Git のデータ:ブランチやタグは同期されますが、イシューやプルリクエストを毎回取り込み直す仕組みではありません。イシューまで手元に移したいなら、ミラーにせず「移行」で一度だけ取り込みます
  • トークンには期限がある:期限が切れると同期が止まります。作った日に、期限の少し前をカレンダーに入れておくと安心です

逆に、Forgejo を本拠地にして GitHub へ送る「プッシュミラー」もあります。こちらは GitHub 側を強制的に上書きするとされているので、GitHub で直接コミットする運用とは両立しません。

手元からクローンするときは、Forgejo の設定画面で SSH の公開鍵を登録したうえで git clone ssh://[email protected]:222/ユーザー名/リポジトリ名.git のように 222 番を指定します。

外からの接続とバックアップ・更新

外出先から使うときは、ルーターのポートを開けずに Tailscale でつなぐのが安全です。Tailscale の名前(MagicDNS)で開くなら、初期設定で入れたベース URL もその名前に合わせます。ずれていると、画面の中のリンクやクローン用 URL が LAN 用のままになります。

SQLite の構成なら、リポジトリ・データベース・設定は ./forgejo フォルダにすべて入ります。バックアップは次の流れで足ります。

docker compose stop
# ./forgejo フォルダを NAS や外付けドライブへコピー(restic などでも可)
docker compose start

ミラーしたリポジトリは GitHub が元なので作り直せますが、Forgejo 上で直接作ったリポジトリはこのフォルダにしかありません。自宅の他のデータと同じく、家の外にもう 1 つ置くことをおすすめします。

更新は docker compose pull のあと docker compose up -d です。v15 の中の更新ならこれで済みます。次の長期サポート版(v19)は 2027 年 4 月の予定とされているので、そのときにバックアップを取り、リリースノートを読んでからタグを書き換えます。

まとめ

  • Forgejo と Gitea は手順がほぼ同じ。自宅で長く放っておくなら Forgejo の長期サポート版(v15)が楽
  • Docker Compose で 3000 番(画面)と 222 番(Git 用 SSH)を出し、データベースは SQLite で十分
  • 初期設定でセルフ登録を無効にし、管理者を作ってからインストールする
  • GitHub のリポジトリは「新しい移行」でプルミラーにする。同期は既定 8 時間ごとで、トークンの期限に注意
  • 外からは Tailscale 経由。バックアップは ./forgejo フォルダを止めてコピーする

運営者が作った Excel テンプレートを BOOTH で配布しています。IT 資産管理台帳(無料 Lite 版あり) / IT 資格の学習管理シート

部長(本業: IT インフラ) 家でも同じことをして遊んでいます。記事は実機で試してから書き、失敗もそのまま載せます。