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
以下のコンテナが表示されるはずです。
giteagitea-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