EC2上にGitLabサーバーを構築する
記事内容
- EC2上にgitlabサーバーを立てる方法
- ユーザーの追加方法
- gitlabからのメールの送信
モチベーション
コード管理はgithubを使いたいが、環境によっては使用できないプロジェクトもあり、その際のアプローチの一つとしてOSSのgitlabのサーバーを
自前でたてる.
導入環境
AWS EC2をサーバーとしてして使用.
インスタンスタイプ: t4g.large
OS: Ubuntu20.04 (arm)
Gitlabインストール
基本gitlab公式サイトのインストール手順のページから、ubuntuを選択し表示されるコマンドを上から順番に実行.
sudo apt-get update
sudo apt-get install -y curl openssh-server ca-certificates
メールサーバとしてpostfixを使用する場合は以下を実行. (今回はAWS SESを使用するのでMustではない)
sudo apt-get install -y postfix
GitLabパッケージをリポジトリに追加
curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ee/script.deb.sh | sudo bash
gitlab install. EXTERNAL_URL="https://gitlab.example.com"
を使用しているEC2のipに変更する.
今回はhttp://使用してるEC2のIP
とした.
sudo EXTERNAL_URL="https://gitlab.example.com" apt-get install gitlab-ee
実行後、 ``にアクセスすればgitlab サーバーのweb uiにアクセスできる. このとき、EC2はhttpによるインバウンドが許可されている必要がある.
uiではユーザー名ろパスワードを要求されるので、
- ユーザー名:
root
- パスワード:
/etc/gitlab/initial_root_password
に記載されているパスワード
を入力. /etc/gitlab/initial_root_password
記載のパスワードは24時間で消えてしまうので注意.
入るとこんな感じ.
メールの設定
このままでは、gitlabからメールを送信することができない. メールはユーザーの追加やパスワード変更、開発時のメンバーへの通知に使用するため
ここで設定する.
今回は、公式ドキュメントの手順に沿って、SMTPサーバーを使用してメールを送信する設定を実施.
AWS EC2を使用している場合 AWS SESとSMTPを使用する必要があるため上記方法を採用.
以下の手順を記載する
- AWS SESの設定
- gitlab serverにSMTPを設定
AWS SESの設定
AWSから AWS Simple Mail Serviceを選択. idの作成から、下記画面に遷移するのでメールアドレスを登録. ここでメールアドレスは自身のメールアドレスを使用する必要あり(設定したアドレスにメールが来て承認しなければならないので)
メールアドレスを登録・承認したら検証済みIDからメールアドレスを選択し、左メニューのSMTP設定を選択.
そのから SMTP認証情報の作成を選択しIAMユーザーを作成. 作成するとユーザー名・パスワードが生成されるので、ブラウザで表示されるユーザ名とパスワードを保存 or csvがダウンロードできるので保存しておく。作成時にしか保存できないので注意.
テストメールの送信
上記手順が完了したら、再度検証済みIDからメールアドレスを選択し、テストメールを送信.
シナリオはカスタム
を選択し、カスタム受信者は選択しているメールアドレスと同じものを設定(自身にメールを送信する形になる)
あとはタイトルや本文を適当に設定して送信. 自身のアドレスにメールが送信されているか確認
(迷惑メールに分類されているかも)
無事メールが受信できていればSESの設定は完了
gitlabのSMTP設定
EC2のターミナルから/etc/gitlab/gitlab.rb
を編集する.
例えば
sudo vi /etc/gitlab/gitlab.rb
などでファイルを開き、
gitlab_rails['gitlab_email_from'] = 'SESで登録したメールアドレス'
gitlab_rails['gitlab_email_reply_to'] = 'SESで登録したメールアドレス'
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "SMTP エンドポイントを設定"
gitlab_rails['smtp_port'] = 587
gitlab_rails['smtp_user_name'] = "先ほど保存したSMTPのユーザー名"
gitlab_rails['smtp_password'] = "先ほど保存したSMTPのパスワード"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true
SMTPエンドポイントはSES上で検証済みIDからメールアドレスを選択し、SMTP 設定から表示される. (基本リージョンで決まる)
※ 設定を編集した項目はコメンントアウトを外さないと有効化されないので忘れずに対応
設定が完了したら、
sudo gitlab-ctl reconfigure
sudo gitlab-ctl restart
で設定を反映. restartするとUIが有効化されるまで数分かかるっぽいので待ってからUIに再度アクセス.
ユーザーの追加
rootでログインしたら、左上メニューバーからAdminを選択.
各項目を設定するが、ここでEmailは先ほどSESで設定したメールアドレスである必要あり.
Access Levelで権限を選択. Administatorはroootと同等. ユーザーの作成・削除などができる
登録したらメールが送信されるのでURLをクリックしてパスワードを再設定. これでユーザが追加された.
その他のユーザーの追加方法
コンソールからの追加 (手順)
ターミナルでsudo gitlab-rails console
を実行してrailsのコンソールを起動. 起動に結構時間がかかる.
以下でユーザーを登録.
u = User.new(username: 'test_user', email: 'test@example.com', name: 'Test User', password: 'password', password_confirmation: 'password')
u.skip_confirmation! # Use it only if you wish user to be automatically confirmed. If skipped, user receives confirmation e-mail
u.save!
sign-upから登録
ログイン画面からsign upを選択しユーザーを登録. Adminユーザーのみが登録を承認できるので、承認する.
その他
手順は思ったより面倒(特にメールアドレスまわり). docker使用してもメール周りの手順は簡略化されなそうなので、AWSの設定は頑張るしかなさそう.
gitlabも無料だがそれなりの機能は揃っているので、githubが使用できない環境では有効な選択しになりそう.
CI/CDとかも試してみたい