趣味でやってるクローズドな開発用にGitea立ててみました
要件
- Gitリモートリポジトリのオープンなやつクローズドなやつ両方持ちたい
- イシューとかWikiとかはクローズドで書きたい
- インフラの面倒なことはなるべく手抜きで
うまくいった構成
Giteaをこんな感じで構成してみました
- HTTP/HTTPSは、ALB経由でサービスする
- ALBをロードバランサーとしてはぜんぜん使ってないのですが(ターゲットグループにEC2 1台ずつしかいない)
- リバースプロキシ的に使えて便利なのです
- あと、証明書も良きに計らってくれるのがとても便利
- gitプロトコルは、SSH on SSMで利用する
- プル・プッシュするひとごとにIAMユーザーが必要ですが
- SSHすら開けなくてよいのでとてもセキュア
Route53
giteaのトラフィックをALBへ流すレコードを追加する。
- レコード名 : gitea.my.domain
- レコードタイプ : A
- エイリアス : はい
- 値 : (ALBを指定する)
ALB
もともと、HTTPはHTTPSへリダイレクトする設定にしてます。
以下のルールを追加。
- IF
- ホストが gitea.my.domain
- THEN
- 転送先: gitea-tg
ターゲットグループ
- Name: gitea-tg
- Port: 3000
- 後述のEC2インスタンスをターゲットに入れておく
EC2
- AWS EC2 t3.micro
- ubuntu/images/hvm-ssd/ubuntu-jammy-22.04-amd64-server-20220609
- セキュリティグループ
- インバウンドで、ALBのセキュリティグループに対して、3000を許可
- ロール
- SSMを許可するロールを設定
/etc/gitea/app.ini (抜粋)
[server]
SSH_DOMAIN = gitea.my.domain
DOMAIN = gitea.my.domain
HTTP_PORT = 3000
ROOT_URL = https://gitea.my.domain/
DISABLE_SSH = false
SSH_PORT = 22
LFS_START_SERVER = true
開発環境の設定
こんな感じで設定して、gitプロトコルでプル・プッシュができました。
aws cliのインストールも必要です。
~/.ssh/config
Host gitea.my.domain
IdentitiesOnly yes
User my_user
IdentityFile ~/.ssh/my_user_name
HostName (インスタンスid)
Port 22
ProxyCommand sh -c "aws ssm start-session --target %h --document-name AWS-StartSSHSession --parameters 'portNumber=%p'"
ハマったこと
Amazon Linux だとうまくいかなかった
Gitea起動するしWebは使えたのですが、gitでのプル・プッシュがうまく動きませんでした。
とってくるバイナリが違ったのかも。
NLB よくわからなかった
NLBを使えば、HTTP/HTTPS以外も通せるらしいのですが。
ちょっと見にいってみて「わからん?」と、勉強不足な感じ。
既存サービスでALBを使ってもいるので、今回の構成にしました。
Too many authentication failures
なんか色んなキーで繋ごうとトライして出るぽい?
IdentitiesOnly yes を指定したら解消しました。
SSHキーのタイプ指定が必要だった
手癖でなにもオプション付けずにssh-keygenしたら認証はねられました。
指定のタイプで改めてキー生成して登録したら通りました。
(Giteaの説明、Githubのガイドをご覧くださいになってて、いーのかしらって思ったケド)
所感
Giteaだけなら、Elastic IPとってRoute53から流すだけにするとお安いですが。
他のサービスもホストしたいのと、証明書の管理が忘れたころにやってきて面倒すぎるので、手間暇のコストと思ってALB使ってます。
参考にさせて頂いたサイト
ありがとうございました、大変助かりました!