Files
2026-06-07 17:07:31 +09:00

7.1 KiB

Google Cloud VM に Gitea をセットアップした方法

このリポジトリは、以下の URL で小さなセルフホスト Gitea インスタンスを構築した手順をまとめたものです。

https://git.low-level-guy.com

この構成では以下を使っています。

  • Google Compute Engine
  • Ubuntu Server 26.04 LTS
  • Docker Compose
  • Gitea
  • PostgreSQL
  • リバースプロキシとしての Nginx
  • Certbot による Let's Encrypt HTTPS 証明書
  • Gitea の SSH ポート 2222

これは、自分が実際に行った構成と同じ方法で Gitea をデプロイしたい人向けの実用的なガイドです。本格的な本番環境向けのハードニング手順ではありません。

構成概要

VM 上では Nginx をホスト側で直接動かします。Nginx が HTTPS を終端し、Web トラフィックをポート 3000 の Gitea コンテナへプロキシします。

Gitea と PostgreSQL は Docker で動かします。Gitea はホスト側のポート 2222 でも SSH を公開します。これにより、VM 管理用の通常の SSH ポート 22 と衝突せずに、Git リポジトリを SSH 経由で clone できます。

Internet
  |
  | HTTPS 443
  v
Nginx on VM
  |
  | HTTP 3000
  v
Gitea container
  |
  | PostgreSQL 5432
  v
Postgres container

1. VM を作成する

Google Compute Engine で VM を作成します。

自分が使ったインスタンスは以下です。

  • マシンタイプ: e2-small
  • ブートディスク: 10 GB
  • OS: Ubuntu Server 26.04 LTS
  • 外部 IP: DNS を向けられるように、静的 IP または十分に安定した IP

リポジトリ数、ユーザー数、パッケージ、または大きな Git 履歴が増える予定なら、より大きなディスクを使う方がよいです。

2. ファイアウォールを設定する

VM に到達できるよう、以下の TCP ポートを許可します。

22    VM 管理用 SSH
80    Let's Encrypt 検証とリダイレクト用 HTTP
443   Gitea Web UI 用 HTTPS
2222  Gitea 経由の Git SSH

Google Cloud では以下から設定します。

VPC network -> Firewall -> Create firewall rule

3. DNS を VM に向ける

Gitea 用サブドメインの A レコードを作成します。

A   git.low-level-guy.com   <VM_EXTERNAL_IP>

HTTPS 証明書を取得する前に、DNS の反映を待ちます。

4. Docker をインストールする

VM に SSH で入り、Docker の Ubuntu リポジトリから Docker をインストールします。

sudo apt update

sudo apt install -y \
    ca-certificates \
    curl \
    gnupg

curl -fsSL https://download.docker.com/linux/ubuntu/gpg \
| sudo gpg --dearmor -o /usr/share/keyrings/docker.gpg

echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker.gpg] \
https://download.docker.com/linux/ubuntu noble stable" \
| sudo tee /etc/apt/sources.list.d/docker.list

sudo apt update

sudo apt install -y \
    docker-ce \
    docker-ce-cli \
    containerd.io \
    docker-compose-plugin

インストールを確認します。

sudo docker --version
sudo docker compose version

自分のユーザーは docker グループに追加していないため、このガイドでは Docker コマンドに sudo を付けています。

5. Nginx をインストールする

sudo apt install -y nginx
sudo systemctl enable nginx
sudo systemctl start nginx

6. Certbot をインストールする

sudo apt install -y certbot python3-certbot-nginx

7. Gitea 用ディレクトリを作成する

Compose プロジェクト用の作業ディレクトリを作成します。

mkdir -p ~/gitea
cd ~/gitea

8. Compose ファイルを追加する

このリポジトリの compose.yaml を使います。

VM の ~/gitea にコピーします。

cd ~/gitea
nano compose.yaml

このリポジトリの compose.yaml の内容を貼り付けます。

リポジトリ内のパスワード値はプレースホルダーです。実際のサーバーで使う前に変更してください。

POSTGRES_PASSWORD: gitea
GITEA__database__PASSWD=gitea

Gitea が PostgreSQL に接続するため、両方の値は一致している必要があります。

9. Gitea と PostgreSQL を起動する

~/gitea からコンテナを起動します。

sudo docker compose up -d

両方のコンテナが動いていることを確認します。

sudo docker ps

以下のコンテナが表示されるはずです。

  • gitea
  • gitea-postgres

10. Nginx を設定する

Nginx のサイト設定を作成します。

sudo nano /etc/nginx/sites-available/gitea

以下の設定を使います。

server {
    listen 80;
    server_name git.low-level-guy.com;

    location / {
        proxy_pass http://127.0.0.1:3000;

        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

サイトを有効化します。

sudo ln -s /etc/nginx/sites-available/gitea /etc/nginx/sites-enabled/gitea

デフォルトサイトがまだ有効なら削除します。

sudo rm /etc/nginx/sites-enabled/default

Nginx の設定をテストしてリロードします。

sudo nginx -t
sudo systemctl reload nginx

11. HTTPS を有効化する

実際のドメインに対して Let's Encrypt 証明書を取得します。

sudo certbot --nginx -d git.low-level-guy.com

Certbot に聞かれたら、HTTP トラフィックを HTTPS にリダイレクトする選択肢を選びます。

完了後、サイトは以下でアクセスできるはずです。

https://git.low-level-guy.com

12. Gitea セットアップウィザードを完了する

ブラウザでサイトを開きます。

https://git.low-level-guy.com

データベースには PostgreSQL を使います。

Database type: PostgreSQL
Host: postgres:5432
Database name: gitea
Username: gitea
Password: <compose.yaml のパスワード>

サーバー設定には公開ドメインを使います。

Server domain: git.low-level-guy.com
Gitea base URL: https://git.low-level-guy.com/
SSH server domain: git.low-level-guy.com
SSH port: 2222

このステップで最初の管理者アカウントを作成します。

13. Git over SSH をテストする

セットアップウィザード完了後、Gitea の SSH エンドポイントをテストします。

ssh -p 2222 git@git.low-level-guy.com

SSH キーを Gitea アカウントに追加した後は、VM の通常の SSH サービスではなく Gitea に対して認証されるはずです。

SSH の clone URL は以下のようになります。

git clone ssh://git@git.low-level-guy.com:2222/username/repository.git

HTTPS の clone URL は以下のようになります。

git clone https://git.low-level-guy.com/username/repository.git