AWSにForgejo構築
Forgejoとは
ChatGPTによる解説
Forgejoは、軽量でセキュリティを強化したオープンソースのGitリポジトリ管理ツールで、特に低スペックな環境(例:Raspberry Pi)でも動作します。Giteaをベースにしており、以下の特徴があります:
- 軽量でリソース消費が少ない
- プライバシーとセキュリティを強化
- 簡単にインストール・セットアップでき、無料で使用可能
- Gitリポジトリ管理、コードレビュー、CI/CDが可能
- 個人や小規模チームに最適です。
構築方法
AWSのアカウントの作成済みであるという前提で始めます。
私は学校の方で招待してもらったAcademy Learner Lab環境で試しました。そのため、アカウント作成後の無料枠内でできると思います。
VPC、セキュリティグループの作成
マネジメントコーンソールの左上の検索にVPCと入力し、VPCダッシュボードを開きます。VPCを作成をクリックし、VPCなどを選択、だいたいデフォルトのままで大丈夫ですが、name tagをMy-VPC-01にして、 アベイラビリティゾーン (AZ) の数は1に、VPCエンドポイントは無しにしました。
VPCの設定詳細を表示
- 作成するリソース: VPCなど
- 名前タグの自動生成: チェックを入れてMy-VPC-01と入力
- IPv4 CIDR ブロック: デフォルト(10.0.0.0/16)
- IPv6 CIDR ブロック: デフォルト(IPv6 CIDR ブロックなし)
- テナンシー: デフォルト
- アベイラビリティゾーン (AZ) の数: 1
- パブリックサブネットの数: 1
- プライベートサブネットの数: 1
- サブネット CIDR ブロックをカスタマイズ: デフォルトのまま
- NAT ゲートウェイ: なし
- VPC エンドポイント: なし
- DNS オプション: 二つとのチェックを入れる(デフォルト)
下にスクロールするとあるVPCの作成をクリックしてVPCを作成します。
次にEC2用のセキュリティグループを作成します。
VPCダッシュボードの左側のセキュリティの項目にセキュリティグループがあるのでクリックします。右上にセキュリティグループを作成があるのでそれをクリックします。
- セキュリティグループ名: MyGitServerGroup(わかりやすければなんでも)
- 説明: Security group for git server(こちらもなんでも)
- VPC: 先ほど作成したVPCを選択
- インバウンドルール
タイプ プロトコル ポート範囲 ソース 説明 HTTP TCP 80 0.0.0.0/0 Webアクセス HTTPS TCP 443 0.0.0.0/0 セキュアなWebアクセス カスタム TCP 3000 0.0.0.0/0 Forgejo用ポート(検証用) SSH TCP 22 0.0.0.0/0 SSH接続 - アウトバウンドルール(デフォルトのまま)
タイプ プロトコル ポート範囲 ソース すべてのトラフィック すべて すべて 0.0.0.0/0
右下のセキュリティグループを作成をクリックします。
EC2の作成
左上の検索欄にec2と入力し、EC2ダッシュボードを開きます。
インスタンスを起動をクリックします。
- 名前とタグ: My Git server(なんでも)
- AMI: Ubuntu Server 24.04 LTS (HVM), SSD Volume Type
- アーキテクチャ: 64ビット(x86)
- インスタンスタイプ: t2.micro
- キーペア: 新規作成
- ネットワーク設定
- VPC: 先ほど作ったVPC
- サブネット: パブリックサブネットを選択(プライベートサブネットにしないように注意)
- パブリックIPの自動割り当て: 有効化
- ファイアウォール(セキュリティグループ): 既存のセキュリティグループ(先ほど作成したもの)を選択
- ストレージ: 20GiB gp3
インスタンスを起動をクリックするとEC2インスタンスが起動します。
EC2ダッシュボードに戻り、左のインスタンスをクリックすると先ほど作成したインスタンス画表示されます。
左のチェックボックスをクリック後、下にパブリックIPv4アドレス画表示されるので先ほどEC2作成時に作ったkeyを使ってSSHで接続します。(ユーザ名はubuntuです。)
Forgejoの構築
ダウンロード
公式ドキュメント (opens in a new tab)を参考に進めます。
※次のコマンドはこの記事執筆時の安定バージョンをダウンロードするものです。公式ドキュメントから現在のバージョンを確認してください。
ダウンロード
wget https://codeberg.org/forgejo/forgejo/releases/download/v11.0.0/forgejo-11.0.0-linux-amd64
chmod +x forgejo-11.0.0-linux-amd64
検証
gpg --keyserver keys.openpgp.org --recv EB114F5E6C0DC2BCDD183550A4B61A2DC5923710
wget https://codeberg.org/forgejo/forgejo/releases/download/v11.0.0/forgejo-11.0.0-linux-amd64.asc
gpg --verify forgejo-11.0.0-linux-amd64.asc forgejo-11.0.0-linux-amd64
インストール
公式ドキュメント (opens in a new tab)を参考に進めます。
-
ダウンロードしたバイナリを /usr/local/binにコピーして実行可能に
sudo cp forgejo-11.0.0-linux-amd64 /usr/local/bin/forgejo
forgejo-11.0.0-linux-amd64は先ほどダウンロードしてできたファイルです。バージョンなどが違う場合は書き換えてください。
-
Forgejoで使用するgitユーザの作成
sudo adduser --system --shell /bin/bash --gecos 'Git Version Control' \ --group --disabled-password --home /home/git git
-
Forgejoが使用するディレクトリを作成
sudo mkdir /var/lib/forgejo sudo chown git:git /var/lib/forgejo && sudo chmod 750 /var/lib/forgejo
sudo mkdir /etc/forgejo sudo chown root:git /etc/forgejo && sudo chmod 770 /etc/forgejo
-
Forgejo 用の systemd サービスをインストール
sudo wget -O /etc/systemd/system/forgejo.service https://codeberg.org/forgejo/forgejo/raw/branch/forgejo/contrib/systemd/forgejo.service
-
Forgejoサービスを有効にして起動
sudo systemctl enable forgejo.service sudo systemctl start forgejo.service
-
webブラウザで初期設定 http://EC2のパブリックIPv4アドレス:3000にアクセスして初期設定を行います。 (opens in a new tab)
データベースはSQLite3を選択します。
管理者アカウントをここで作成しておきます。
そのほかの設定は後で編集可能なのでとりあえず進めていきます。
設定完了後、Install Forgejoをクリックします。少しするとダッシュボードにアクセスできます。
ダッシュボードにアクセスできたら、/etc/forgejo/とapp.iniをgitユーザーに対して読み取り専用に変更します。(初期設定後書き込みをしないため)
sudo chmod 750 /etc/forgejo && sudo chmod 640 /etc/forgejo/app.ini
-
詳細な設定 最後に、詳細な設定が必要なのですが、場合によってことなるので公式ドキュメント (opens in a new tab)を参考に設定をしてください。
DNSの設定
ドメインを取得していない場合は、ドメイン管理サービスでドメインを取得してください。
利用しているドメイン管理サービスのDNS管理で新しくAレコードを追加します。
タイプ | 名前 | 値(IPv4アドレス) | TTL |
---|---|---|---|
A | 設定したドメイン名 | EC2のパブリックIPv4アドレス | 自動 |
メモ: cloudflareで設定する時、プロキシをONにするとSSHが使えなくなる。
リバースプロキシ(Nginx)の構築・設定
-
nginxのインストール
sudo apt update sudo apt install nginx -y
-
設定ファイルを作成
sudo nano /etc/nginx/sites-available/forgejo
内容
server { listen 80; server_name 設定したドメイン; location / { proxy_pass http://localhost:3000; # Forgejoのポート 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/forgejo /etc/nginx/sites-enabled/
-
構文チェック
sudo nginx -t
-
再起動
sudo systemctl reload nginx
Let’s EncryptでHTTPS化
-
インストール
sudo apt install certbot python3-certbot-nginx -y
-
HTTPS証明書の取得(90日間の有効期限がある) 実行するとメールアドレスを求められるので入力
sudo certbot --nginx -d 設定したドメイン
-
ROOT_URLの変更 設定したドメインでhttpsでアクセスし、設定した管理者ユーザでログインするとこのようなメッセージが表示されます。
This Forgejo instance is configured to be served on "http://IPv4:3000/". You are currently viewing Forgejo through a different URL, which may cause parts of the application to break. The canonical URL is controlled by Forgejo admins via the ROOT_URL setting in the app.ini.
これはforgejoの設定のURLがIPアドレスのままになっているためです。
/etc/forgejo/app.iniを編集します
sudo nano /etc/forgejo/app.ini
[server]にある
SSH_DOMAIN = ドメイン名 DOMAIN = ドメイン名 ROOT_URL = https://ドメイン名/
再起動します。
sudo systemctl restart forgejo
以上で構築完了になります。
次はCI/CDができるようにForgejo runnerの設定もできたらと思っています。
間違っている箇所、不明点がありましたらX (opens in a new tab)のDMにお願いします。