# Google Cloud VM に Gitea をセットアップした方法 このリポジトリは、以下の URL で小さなセルフホスト Gitea インスタンスを構築した手順をまとめたものです。 ```text 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 できます。 ```text 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 ポートを許可します。 ```text 22 VM 管理用 SSH 80 Let's Encrypt 検証とリダイレクト用 HTTP 443 Gitea Web UI 用 HTTPS 2222 Gitea 経由の Git SSH ``` Google Cloud では以下から設定します。 ```text VPC network -> Firewall -> Create firewall rule ``` ## 3. DNS を VM に向ける Gitea 用サブドメインの `A` レコードを作成します。 ```text A git.low-level-guy.com ``` HTTPS 証明書を取得する前に、DNS の反映を待ちます。 ## 4. Docker をインストールする VM に SSH で入り、Docker の Ubuntu リポジトリから Docker をインストールします。 ```bash 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 ``` インストールを確認します。 ```bash sudo docker --version sudo docker compose version ``` 自分のユーザーは `docker` グループに追加していないため、このガイドでは Docker コマンドに `sudo` を付けています。 ## 5. Nginx をインストールする ```bash sudo apt install -y nginx sudo systemctl enable nginx sudo systemctl start nginx ``` ## 6. Certbot をインストールする ```bash sudo apt install -y certbot python3-certbot-nginx ``` ## 7. Gitea 用ディレクトリを作成する Compose プロジェクト用の作業ディレクトリを作成します。 ```bash mkdir -p ~/gitea cd ~/gitea ``` ## 8. Compose ファイルを追加する このリポジトリの [`compose.yaml`](./compose.yaml) を使います。 VM の `~/gitea` にコピーします。 ```bash cd ~/gitea nano compose.yaml ``` このリポジトリの `compose.yaml` の内容を貼り付けます。 リポジトリ内のパスワード値はプレースホルダーです。実際のサーバーで使う前に変更してください。 ```yaml POSTGRES_PASSWORD: gitea GITEA__database__PASSWD=gitea ``` Gitea が PostgreSQL に接続するため、両方の値は一致している必要があります。 ## 9. Gitea と PostgreSQL を起動する `~/gitea` からコンテナを起動します。 ```bash sudo docker compose up -d ``` 両方のコンテナが動いていることを確認します。 ```bash sudo docker ps ``` 以下のコンテナが表示されるはずです。 - `gitea` - `gitea-postgres` ## 10. Nginx を設定する Nginx のサイト設定を作成します。 ```bash sudo nano /etc/nginx/sites-available/gitea ``` 以下の設定を使います。 ```nginx 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; } } ``` サイトを有効化します。 ```bash sudo ln -s /etc/nginx/sites-available/gitea /etc/nginx/sites-enabled/gitea ``` デフォルトサイトがまだ有効なら削除します。 ```bash sudo rm /etc/nginx/sites-enabled/default ``` Nginx の設定をテストしてリロードします。 ```bash sudo nginx -t sudo systemctl reload nginx ``` ## 11. HTTPS を有効化する 実際のドメインに対して Let's Encrypt 証明書を取得します。 ```bash sudo certbot --nginx -d git.low-level-guy.com ``` Certbot に聞かれたら、HTTP トラフィックを HTTPS にリダイレクトする選択肢を選びます。 完了後、サイトは以下でアクセスできるはずです。 ```text https://git.low-level-guy.com ``` ## 12. Gitea セットアップウィザードを完了する ブラウザでサイトを開きます。 ```text https://git.low-level-guy.com ``` データベースには PostgreSQL を使います。 ```text Database type: PostgreSQL Host: postgres:5432 Database name: gitea Username: gitea Password: ``` サーバー設定には公開ドメインを使います。 ```text 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 エンドポイントをテストします。 ```bash ssh -p 2222 git@git.low-level-guy.com ``` SSH キーを Gitea アカウントに追加した後は、VM の通常の SSH サービスではなく Gitea に対して認証されるはずです。 SSH の clone URL は以下のようになります。 ```bash git clone ssh://git@git.low-level-guy.com:2222/username/repository.git ``` HTTPS の clone URL は以下のようになります。 ```bash git clone https://git.low-level-guy.com/username/repository.git ```