Cwらぼっちゃ - IT技術研究ノート -

IT技術に関する記事を掲載します。

GitLab on EC2

GitLab は ソフトウェア開発 における Git リポジトリ マネージャーです。
Git リポジトリマネージメント を主機能として、その他様々な機能があります。

フリーで利用できる代表的な機能として、以下のような機能があります。

  • 課題管理機能
  • 工数の予実管理機能
  • マージリクエス
  • 承認機能
  • チャットを使用したデプロイ機能

その他たくさんの機能が用意されていますので、詳細は 本家サイト を確認してください。

GitLab を利用するには GitLab WEB サイトにアカウント登録をして Git リポジトリ を利用する方法と、サーバーにインストールをして、インターネットに繋がっていないクローズド環境でも利用できる方法があります。

ここでは AWS EC2 にインストールしていきます。
※準備として AWSアカウント登録EC2 インスタンスの作成 を行ってください。

以下の手順で構築を進めます。

  1. 必要な依存ライブラリの確認
  2. Postfix のインストール確認
  3. GitLabのインストール
  4. 初期設定
  5. メール通知設定
  6. HTTPS のアクセス設定 ※簡易的に自己署名証明書オレオレ証明書)を利用します。

必要な依存ライブラリの確認

Tera Term や RLogin から 作成済みの EC2 インスタンスSSH でログインします。

必要なライブラリは以下の4つ。
Amazon Linux には標準で入っていると思いますが、念のため確認します。

  • curl
  • policycoreutils
  • openssh-server
  • openssh-clients
[ec2-user@ip-10-0-0-10 ~]$ sudo yum list installed | grep curl  
curl.x86_64                           7.61.1-9.amzn2.0.1             installed  
libcurl.x86_64                        7.61.1-9.amzn2.0.1             installed  
python-pycurl.x86_64                  7.19.0-19.amzn2.0.2            installed  
[ec2-user@ip-10-0-0-10 ~]$ sudo yum list installed | grep policycoreutils  
policycoreutils.x86_64                2.5-22.amzn2                   installed  
[ec2-user@ip-10-0-0-10 ~]$ sudo yum list installed | grep openssh  
openssh.x86_64                        7.4p1-16.amzn2.0.5             installed  
openssh-clients.x86_64                7.4p1-16.amzn2.0.5             installed  
openssh-server.x86_64                 7.4p1-16.amzn2.0.5             installed

インストールされていることが確認できます。

インストールされていない場合は以下のコマンドでインストールして、sshd サービスの自動起動設定と sshd サービスの起動を併せて行ってください。

[ec2-user@ip-10-0-0-10 ~]$ sudo yum install curl policycoreutils openssh-server openssh-clients  
[ec2-user@ip-10-0-0-10 ~]$ sudo systemctl enable sshd  
[ec2-user@ip-10-0-0-10 ~]$ sudo systemctl start sshd

Postfix のインストール確認

GitLab からメールを送信するための Postfix がインストールされているか確認します。
Amazon Linux には標準で入っていると思いますが、念のため確認します。
※なお、今回メールの送信は Gmail を利用しますので Postfix は不要なのですが、手順として記載しておきます。

[ec2-user@ip-10-0-0-10 ~]$ sudo yum list installed | grep postfix
postfix.x86_64                        2:2.10.1-6.amzn2.0.3           installed

インストールされていることが確認できます。

インストールされていない場合は以下のコマンドでインストールして、postfixサービスの自動起動設定と postfix サービスの起動を併せて行ってください。

[ec2-user@ip-10-0-0-10 ~]$ sudo yum install postfix  
[ec2-user@ip-10-0-0-10 ~]$ sudo systemctl enable postfix  
[ec2-user@ip-10-0-0-10 ~]$ sudo systemctl start postfix  

GitLabのインストール

curl コマンド と bash コマンドの組み合わせで Git リポジトリ を登録します。

[ec2-user@ip-10-0-0-10 ~]$ sudo curl -sS https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | sudo bash  
Detected operating system as amzn/2.  
Checking for curl...  
Detected curl...  
Downloading repository file: https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/config_file.repo?os=amzn&dist=2&source=script  
 ・  
 ・  
 ・  
The repository is setup! You can now install packages.  

Git リポジトリ の登録が完了したら、以下のコマンドで GitLabをインストールします。

[ec2-user@ip-10-0-0-10 ~]$ sudo yum install -y gitlab-ce  
Loaded plugins: extras_suggestions, langpacks, priorities, update-motd  
Resolving Dependencies  
 ・  
 ・  
 ・  
Dependency Installed:  
  audit-libs-python.x86_64 0:2.8.1-3.amzn2.1  checkpolicy.x86_64 0:2.5-6.amzn2         libcgroup.x86_64 0:0.41-15.amzn2  
  libselinux-python.x86_64 0:2.5-12.amzn2.0.2 libsemanage-python.x86_64 0:2.5-11.amzn2 policycoreutils-python.x86_64 0:2.5-22.amzn2  
  python-IPy.noarch 0:0.75-6.amzn2.0.1        setools-libs.x86_64 0:3.3.8-2.amzn2.0.2  
  
Complete!  

インストールが完了しました。

初期設定

インストールが完了すると、初期設定を行います。

/etc/gitlab/gitlab.rb を編集していきます。

[ec2-user@ip-10-0-0-10 ~]$ sudo vi /etc/gitlab/gitlab.rb

テキストエディタが開きますので以下の通り変更します。
※ここでは一旦アクセス先の URL および タイムゾーン のみ設定します。

設定項目 設定値
external_url http://[EC2 のドメイン]/
gitlab_rails['time_zone'] Asia/Tokyo

reconfigure を実行し、設定をもとに GitLab を構成する各種サーバーアプリの設定を変更します。

ここでは一旦設定は何も変更せずに reconfigure を実行します。
※最初はインスタンスタイプを無料枠で使用できる t2.micro でトライしましたが reconfigure にあえなく失敗しました。
 t2.small にインスタンスタイプを変更し、再実行しました。

[ec2-user@ip-10-0-0-10 ~]$ sudo gitlab-ctl reconfigure  
 ・  
 ・  
 ・  
Running handlers:  
Running handlers complete  
Chef Client finished, 152/910 resources updated in 50 seconds  
gitlab Reconfigured!  

reconfigure が完了したので、GitLab にアクセスします。

EC2 のドメインが ec2-XX-XX-XX-XX.ap-northeast-1.compute.amazonaws.com の場合、以下のようにブラウザへ URL を入力します。

http://ec2-XX-XX-XX-XX.ap-northeast-1.compute.amazonaws.com/

GitLab のパスワード変更画面が表示されました。

f:id:CwLab:20190610005632p:plain

デフォルト の root ユーザでログインしますので、 root ユーザのパスワードを変更します。
確認用(Confirm)も含め登録するパスワードを入力し、「Change your password」をクリックします。

f:id:CwLab:20190610010207p:plain

ユーザIDとパスワードの入力を求められますので、デフォルトのユーザID「root」と先ほど変更したパスワードを入力し、「Sign in」をクリックします。

f:id:CwLab:20190611005646p:plain

無事 GitLab にログインできました。

f:id:CwLab:20190611005956p:plain

※ちなみに /etc/gitlab/gitlab.rb に URL の設定をする前に reconfigure を実行し、GitLab にアクセスした場合は、以下のようにとてつもなくエラーになりましたので必ず URL の設定は行って下さい。

f:id:CwLab:20190610013815p:plain

メール通知設定

GitLab から各種メール通知を送信するためには、/etc/gitlab/gitlab.rb にメール通知設定を行う必要があります。

※メールアドレスはここでは Gmail を利用します。
 その他のメールを設定する場合は GitLab のドキュメントサイト を参照してください。
 Gmail で送信するには、設定するアカウントでブラウザからログインし、 「安全性の低いアプリのアクセス」 から、「安全性の低いアプリの許可」を有効に設定しておきます。
設定をしていないと GitLab からの通知メールの送信の際に Gmail の認証が通らずメールが送信できませんでした。

それでは以下のように gitlab.rb を編集してください。

設定項目 設定値
gitlab_rails['gitlab_email_enabled'] true
gitlab_rails['gitlab_email_from'] xxxxxxxx@gmail.com(送信元メールアドレス)
gitlab_rails['gitlab_email_display_name'] Cw Git Man(送信元表示名)
gitlab_rails['gitlab_email_reply_to'] xxxxxxxx@gmail.com(届いたメールの返信先メールアドレス)
gitlab_rails['gitlab_email_subject_suffix'] [CwGitmanInfo] (メールタイトルの末尾に付ける文字列)
gitlab_rails['smtp_enable'] true
gitlab_rails['smtp_address'] smtp.gmail.com
gitlab_rails['smtp_port'] 587
gitlab_rails['smtp_user_name'] xxxxxxxx@gmail.com(送信ユーザのメールアドレス)
gitlab_rails['smtp_password'] xxxxxxx(送信ユーザのパスワード)
gitlab_rails['smtp_domain'] smtp.gmail.com
gitlab_rails['smtp_authentication'] login
gitlab_rails['smtp_enable_starttls_auto'] true
gitlab_rails['smtp_tls'] false(デフォルト)
gitlab_rails['smtp_openssl_verify_mode'] none(デフォルト)]

設定を保存し、再度 reconfigure を実行します。

[ec2-user@ip-10-0-0-10 ~]$ sudo gitlab-ctl reconfigure  

reconfigure が完了するまで7分30秒ほどかかりました。
やはり GitLab はそこそこ重たいようで t2.small でも苦しいようです。

メール設定の反映が完了したらルートユーザのメールアドレスを変更し、メールが送信されるか確認します。

右上のメニューアイコンから「Profile」をクリックします。

f:id:CwLab:20190611014124p:plain

「鉛筆(Edit Profile)アイコン」をクリックします。

f:id:CwLab:20190611233318p:plain

「Email」に root アカウントのメールアドレスを入力し、「Update profile settings」をクリックします。

f:id:CwLab:20190611014407p:plain

設定したメールアドレスに GitLab からメールが送信されました。

f:id:CwLab:20190611234546p:plain

「Confirm your email address」をクリックし、変更を完了します。

HTTPS のアクセス設定

GitLab との通信を暗号化するために、オレオレ証明書を発行し HTTPS 通信の設定を行います。

自己署名証明書はおすすめするわけではありませんが、お試しで使用する環境で最低限通信を暗号化したい場合であれば自己署名で十分でしょう。
※大事なシステムを構築する際は必ず正規のルートから証明書を取りましょう。

まずは以下のコマンドでCA証明書を作成します。

sudo openssl genrsa -out ca.key 2048
sudo openssl req -new -x509 -days 3650 -key ca.key -out ca.crt -subj "/CN=My Private CA"

次に以下のコマンドで秘密鍵を作成します。

[ec2-user@ip-10-0-0-10 ~]$ sudo openssl genrsa -out cert.key 2048

次に秘密鍵を使って証明書署名要求(CSR)を作成します。

※本来は 認証局にお渡しするファイルです。

[ec2-user@ip-10-0-0-10 ~]$ sudo openssl req -new -key cert.key -out cert.csr -subj "/CN=xx-xx-xx-xx-xx.ap-northeast-1.compute.amazonaws.com"

CA署名付きのサーバー証明書を作成します。

[ec2-user@ip-10-0-0-10 ~]$ sudo openssl x509 -req -days 3650 -CA ca.crt -CAkey ca.key -CAcreateserial -in cert.csr -out cert.crt

作成した証明書および秘密鍵を所定の場所に配置します。

※ WEB サーバー(nginx )が読める場所であればどこでもいいのですが、一般的お作法に沿って配置します。

[ec2-user@ip-10-0-0-10 ~]$ sudo mv cert.crt /etc/pki/tls/private/
[ec2-user@ip-10-0-0-10 ~]$ sudo mv cert.key /etc/pki/tls/certs/

/etc/gitlab/gitlab.rb を以下のように編集します。

設定項目 設定値
external_url https://[EC2 のドメイン]/
nginx['ssl_certificate'] /etc/pki/tls/private/cert.crt
nginx['ssl_certificate_key'] /etc/pki/tls/certs/cert.key

reconfigure を実行し、設定を反映します。

[ec2-user@ip-10-0-0-10 ~]$ sudo gitlab-ctl reconfigure  

最後に AWS のコンソール から HTTP の許可を外し、HTTPS を許可します。

EC2 ダッシュボード から対象のインスタンスを選択(ここでは一つしかありませんが)し、セキュリティグループ名のリンクをクリックします。

f:id:CwLab:20190612004254p:plain

セキュリティグループ設定画面の下部「インバウンド」タブをクリックし、「編集」をクリックします。

f:id:CwLab:20190612004616p:plain

「HTTP」を「HTTPS」に変更し、「保存」をクリックします。

f:id:CwLab:20190612004925p:plain

GitLab にアクセスする URL を 「https」に変えてアクセスします。

とてつもなく警告されていますが、かまわず「詳細」→「危険性を承知で続行」をクリックします。

f:id:CwLab:20190612014043p:plain

警告は出ていますがまがいなりに HTTPS でアクセスできました。

f:id:CwLab:20190612010100p:plain