はじめに

こんにちは!エンタープライズクラウド事業部の永井です。

当記事では、AWSで完結するプライベートなGit環境(EC2 on Gitea)の構築手順について記載します。
前回の記事で作成したリソースを利用します。まずはこちらをご参照ください。

概要

全体の構成図は下記の通りです。
当記事では、赤破線で囲われているリソースを構築します。
※出来るだけ要点をかいつまんで記載します。

ざっくりまとめ

  • プライベートサブネット上へGitea用EC2を作成
    • IDE稼働環境(EC2)との通信用にSecurity Groupも穴あけ
  • マネージメントコンソールからEC2へSession Managerでログインし、Giteaを導入
  • ローカル端末からSession Managerを利用したポートフォワーディングを実行し、GiteaのWebUIへブラウザからアクセス
    • ローカル端末へAWS CLIとSSMプラグイン導入が必要

EC2作成

 下記リソースを作成します

  • IAMロール(Session Manager接続用)
  • セキュリティグループ(EC2/VPCエンドポイント用)
  • VPCエンドポイント(Session Manager接続用)
  • EC2(Gitea稼働用)
  1. IAMロール作成
  2. セキュリティグループ作成
    • セキュリティグループ1(EC2用)
      • VPC:SageMakerUnifiedStudioVPC
      • アウトバウンドルール:デフォルト(すべて)
      •  インバウンドルール1
        • タイプ:HTTPS
        • プロトコル:TCP
        • ポート範囲:443
        • ソース:利用するVPCのCIDR
      • インバウンドルール2
        • タイプ:カスタムTCP
        • プロトコル:TCP
        • ポート範囲:3000(Gitea用※デフォルトポート番号)
        • ソース:利用するVPCのCIDR
    • セキュリティグループ2(VPCエンドポイント用)
      • VPC:SageMakerUnifiedStudioVPC
      • アウトバウンドルール:デフォルト(すべて)
      •  インバウンドルール
        • タイプ:HTTPS
        • プロトコル:TCP
        • ポート範囲:443
        • ソース:利用するVPCのCIDR
  3. VPCエンドポイント作成
    • VCPエンドポイント1
      • タイプ:AWSのサービス
      • サービス:com.amazonaws.<region>.ssm
      • VPC:SageMakerUnifiedStudioVPC
      • サブネット:SageMakerUnifiedStudioPrivateSubnet1
      • セキュリティグループ:セキュリティグループ2
    • VCPエンドポイント2
      • タイプ:AWSのサービス
      • サービス:com.amazonaws.<region>.ssmmessages
      • VPC:SageMakerUnifiedStudioVPC
      • サブネット:SageMakerUnifiedStudioPrivateSubnet1
      • セキュリティグループ:セキュリティグループ2
  4. EC2作成
    • AMI:Amazon Linux 2023 kernel-6.1 AMI(al2023-ami-2023.9.20251020.0-kernel-6.1-x86_64)
      ※SSMエージェント導入済み
    • インスタンスタイプ:t3.small
    • キーペア名:なし
    • セキュリティグループ:既存のセキュリティグループを選択する(セキュリティグループ1)
    • VPC:SageMakerUnifiedStudioVPC
    • サブネット:SageMakerUnifiedStudioPrivateSubnet1
    • ストレージ:20GiB
    • IAMインスタンスプロフィール:IAMロール1

Gitea導入

マネージメントコンソールから、EC2へSession Manager経由で接続してGiteaを導入します。

  1. EC2接続
    • 作成したEC2インスタンスを選択して「接続」を選択
    • 「セッションマネージャー」タブより「接続」を選択
    • EC2のコンソールへログイン
  2. Gitea導入
    • 下記コマンドを実行してGiteaダウンロード&権限設定
      # gitとwgetをインストール(Amazon Linux 2023ではdnfを使用)
      $ cd ~
      $ sudo dnf update -y
      $ sudo dnf install git wget -y
      
      # -r: システムアカウント, -m: ホームディレクトリ作成, -d: ホームディレクトリパス指定
      $ sudo useradd -r -m -d /var/lib/gitea -s /bin/bash gitea
      # ダウンロード
      $ sudo wget -O gitea https://dl.gitea.com/gitea/main-nightly/gitea-main-nightly-linux-amd64
      
      # 実行可能な場所に移動し、実行権限を付与
      $ sudo mv gitea /usr/local/bin/gitea
      $ sudo chmod +x /usr/local/bin/gitea
      $ sudo chmod 757 /usr/local/bin
      
      # -p: 存在しない親ディレクトリも作成
      # {custom, log}: custom と log ディレクトリを /var/lib/gitea の下に作成
      $ sudo mkdir -p /var/lib/gitea/{custom,log}
      
      # 設定ファイル格納ディレクトリは慣例的に /etc に作成
      $ sudo mkdir -p /etc/gitea
      
      # Giteaのデータ/ログディレクトリの所有者を gitea ユーザーに変更
      $ sudo chown -R gitea:gitea /var/lib/gitea
      $ sudo chown -R gitea:gitea /etc/gitea
      
      # /var/lib/gitea に適切なパーミッションを設定
      $ sudo chmod -R 750 /var/lib/gitea
    • 自動起動設定(systemd)~Giteaサービス起動
      # systemdファイル作成
      $ sudo vi /etc/systemd/system/gitea.service
      
      # 以下を記載
      -----------------------------------------------------
      [Unit]
      Description=Gitea (Git with a cup of tea)
      After=network.target
      Requires=network.target[Service]
      
      # Giteaが実行されるユーザーとグループ
      Type=simple
      User=gitea
      Group=gitea
      
      # 実行環境の指定
      WorkingDirectory=/var/lib/gitea
      
      # 実行コマンドと引数
      # Webインストール画面で /etc/gitea/app.ini が作成されます
      ExecStart=/usr/local/bin/gitea web --config /etc/gitea/app.ini
      
      # サービスの再起動設定
      Restart=always
      RestartSec=3
      
      # 標準出力とエラー出力の設定
      StandardOutput=journal
      StandardError=journal
      
      # 環境変数の設定 (SQLiteを使用する場合に重要)
      Environment=USER=gitea HOME=/var/lib/gitea[Install]
      WantedBy=multi-user.target
      -----------------------------------------------------
      # viは[:wq]で保存して閉じる
      
      # systemdに新しいサービスファイルを認識させる
      $ sudo systemctl daemon-reload
      # サービスを有効化し、再起動後も自動起動するように設定
      $ sudo systemctl enable gitea.service
      
      # サービスを起動
      $ sudo systemctl start gitea.service
      # サービス稼働確認
      $ sudo systemctl status gitea.service
      
      

Giteaアクセス

EC2上にホスティングしているGiteaへアクセスし、Giteaユーザとリポジトリを作成します。
上記作業は、ブラウザからWebUIページへアクセスして実施します。
WebUIページへアクセスするためには、事前作業としてローカル端末でポートフォワーディングの実行が必要となります。

  1. AWS CLIとSession Manager プラグインの導入
    • ポートフォワーディングはAWS CLIからSession Manager プラグインを利用して実行するため
      それぞれ下記公式ページなどを参照し、ローカル端末へのインストールを実施してください
  2. クレデンシャル情報(アクセスキー/シークレットキー)の設定
  3. ポートフォワーディングの実行
    • 下記フォーマットでポートフォワーディングコマンドを実行します
      # コマンド雛型
      aws ssm start-session --target "<EC2インスタンスID>" --document-name "AWS-StartPortForwardingSession" --parameters '{"portNumber":["<server port>"],"localPortNumber":["<local port>"]}'
      
    • ターミナル毎のサンプルは下記です
      # <server port>と<local port>は、Giteaのデフォルトポート3000を設定しています
      
      # Linux ターミナル/Windows powershell
      aws ssm start-session --target "<EC2インスタンスID>" --document-name "AWS-StartPortForwardingSession" --parameters '{"portNumber":["3000"],"localPortNumber":["3000"]}'
      
      # Windows cmd
      aws ssm start-session --target "<EC2インスタンスID>" --document-name "AWS-StartPortForwardingSession" --parameters "{\"portNumber\":[\"3000\"],\"localPortNumber\":[\"3000\"]}"
      

  4. GiteaのWebUIへアクセス(初回セットアップ)
    • ブラウザから、GiteaのWebUIへアクセスします
      • ブラウザへ下記URLを入力してアクセスします
        http://localhost:<local port>/
        
      • Giteaデフォルトポートの場合は下記URLへアクセスします
        http://localhost:3000/
        
    • 初期設定の下記項目を入力し「Giteaをインストール」を選択します
      • データベースのタイプ:SQLite3 ※任意で変更可能です
      • パス:/var/lib/gitea/data/gitea.db
      • リポジトリのルートパス:/var/lib/gitea/gitea-repositories
      • Git LFSルートパス:/var/lib/gitea/lfs
      • ログの保存先パス:/var/lib/gitea/log


    • Giteaインストール完了後、表示されたページから管理ユーザを作成します
    • 管理ユーザ作成後、Giteaのトップページが表示されます
  5. 個人用アカウント作成
    • 管理ユーザでログインしている場合はサインアウトします
    • ページ右上の「登録」を選択し、ユーザ情報を入力して「アカウントを登録」を選択します
  6. Gitリポジトリ作成
    • 個人用アカウントでログイン後のトップページから「+」を選択してGitリポジトリを作成します
  7. Gitリポジトリアクセス
    • 作成したリポジトリのクローンURLを利用可能です
      • 前回の記事で作成したAmazon SageMaker Studio Code Editor(VSCode)でクローンする際は、URLの”localhost”部をGiteaが稼働しているEC2のプライベートIPアドレスへ置換してください
        ※プライベートサブネットの中で通信が可能です
        • クローンコマンドのサンプルは下記です
          $ git clone http://<GiteaのEC2プライベートIPアドレス>:3000/<Giteaアカウント名>/<リポジトリ名>.git