0. 環境
AMI:Amazon Linux 2 AMI 2.0.20191217.0 x86_64 HVM gp2 (ami-011facbea5ec0363b)
リージョン:Tokyo(ap-northeast-1)
EC2を立てるところまでは省略します。ただスペックに関しては
We also strongly recommend at least 4GB of free RAM to run GitLab.
https://about.gitlab.com/install/#centos-7
とあるように、RAMが4GB以上必要なので、AWS EC2上にGitLabを構築する場合、t2.medium
以上のマシンスペックが必要になります。(t2.micro
でインストールすると、インストール直後にめちゃめちゃ重くなりシステム全体がハングアップします)
1. 依存ライブラリをインストール
こちらの内容に沿って進めていきます。
sudo yum install -y curl policycoreutils-python openssh-server
sudo systemctl enable sshd
sudo systemctl start sshd
上記ページに書いてありますが、以下のコマンドは不要です。
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo systemctl reload firewalld
AWSの場合、firewallの概念はセキュリティグループとしてマネージドでカバーしているためです。実行してもamazon linuxにはfirewall-cmdが存在しないので、コマンドが見つからないと怒られます。
次にpostfixをインストールします。
sudo yum install postfix
sudo systemctl enable postfix
sudo systemctl start postfix
2. GitLabの導入
2.1. GitLabをインストール
次にGitLabのインストールをします。ここでは、EXTERNAL_URL
にはEC2のPublic DNS(ipv4)を設定しました。Public DNSは、AWSコンソール画面->EC2->左側サイドパネルのインスタンス->作成したEC2を選択->下側パネルの説明タブの中に書いてあります。具体的にはec2-xxx-xxx-xxx-xxx.ap-northeast-1.compute.amazonaws.com
のようなドメイン名となっています。これ以降は、EC2のPublic DNSをec2-xxx-xxx-xxx-xxx.ap-northeast-1.compute.amazonaws.com
と表すこととします。
curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ee/script.rpm.sh | sudo bash
sudo EXTERNAL_URL="https://gitlab.example.com" yum install -y gitlab-ee
数分経つとインストールが完了します。
Public DNSが出てこない場合
VPCを自作した場合、Public DNSが初めは表示されてない可能性があります。その場合はAWSでPublic DNS(パブリックDNS)が割り当てられない時の解決法を参考に、設定を変更するとPublic DNSが表示されるようになります。
2.2. オレオレ証明書によるSSL設定
こちらに沿って進めます。
vim /etc/gitlab/gitlab.rb
インストール直後はexternal_url
にhttpが設定されているのでこれをhttpsに変更します。
< external_url "http://[EC2のPublic DNS名]"
---
> external_url "https://[EC2のPublic DNS名]"
次にオレオレ証明書を作ります。httpsの設定とオレオレ証明書(自己署名証明書)の作成を参考にさせていただきました。
cd /etc/gitlab/ssl
openssl genrsa -aes128 1024 | sudo tee -a ec2-xxx-xxx-xxx-xxx.ap-northeast-1.compute.amazonaws.com`.key
Enter pass phrase: -> 好きなパスワードを入力
Verifying - Enter pass phrase: -> パスワード再入力
/etc/gitlab/ssl
のオーナーはrootなので、ファイル書き込みにroot権限を持たせるためにsudo tee
を用いています。リダイレクト>
だと権限エラーになります。
openssl req -new -key ec2-xxx-xxx-xxx-xxx.ap-northeast-1.compute.amazonaws.com.key | sudo tee -a ec2-xxx-xxx-xxx-xxx.ap-northeast-1.compute.amazonaws.com.csr
Enter pass phrase for ec2-xxx-xxx-xxx-xxx.ap-northeast-1.compute.amazonaws.com.key: -> 先ほどのパスワードを入力
sudo openssl x509 -in ec2-xxx-xxx-xxx-xxx.ap-northeast-1.compute.amazonaws.com.csr -days 36500 -req -signkey ec2-xxx-xxx-xxx-xxx.ap-northeast-1.compute.amazonaws.com.key | sudo tee -a ec2-xxx-xxx-xxx-xxx.ap-northeast-1.compute.amazonaws.com.crt
sudo mv ec2-xxx-xxx-xxx-xxx.ap-northeast-1.compute.amazonaws.com.key ec2-xxx-xxx-xxx-xxx.ap-northeast-1.compute.amazonaws.com.key.old
Country Name (2 letter code) []:JP
State or Province Name (full name) [Some-State]: -> スキップ
Locality Name (eg, city) []: -> スキップ
Organization Name (eg, company) [Internet Widgits Pty Ltd]: -> スキップ
Organizational Unit Name (eg, section) []: -> スキップ
Common Name (eg, YOUR name) []: ec2-xxx-xxx-xxx-xxx.ap-northeast-1.compute.amazonaws.com
Email Address []: -> スキップ
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []: -> スキップ
An optional company name []: -> スキップ
sudo openssl rsa -in ec2-xxx-xxx-xxx-xxx.ap-northeast-1.compute.amazonaws.com.key.old -out ec2-xxx-xxx-xxx-xxx.ap-northeast-1.compute.amazonaws.com.key
Enter pass phrase for ec2-xxx-xxx-xxx-xxx.ap-northeast-1.compute.amazonaws.com.key: -> 先ほどのパスワードを入力
ここまで実行すると、/etc/gitlab/ssl
配下はこのようなファイル構成になるはず。
tree
.
├── ec2-xxx-xxx-xxx-xxx.ap-northeast-1.compute.amazonaws.com.crt
├── ec2-xxx-xxx-xxx-xxx.ap-northeast-1.compute.amazonaws.com.csr
├── ec2-xxx-xxx-xxx-xxx.ap-northeast-1.compute.amazonaws.com.key
├── ec2-xxx-xxx-xxx-xxx.ap-northeast-1.compute.amazonaws.com.key.old
この状態でreconfigureします。
sudo gitlab-ctl reconfigure
https://ec2-xxx-xxx-xxx-xxx.ap-northeast-1.compute.amazonaws.com
にアクセスすることができたら無事にインストール完了です。問題があったらtailしてエラー原因を確認するといいでしょう。
sudo gitlab-ctl tail
また、今回はオレオレ証明書を使っている影響で、ローカルからClone/Pushなどの操作を加えたときにエラーとなります。これを解消するには、次のコマンドでSSL Verifyを無効にします。(参考:https://qiita.com/karno/items/5ad5006a4912617d2610)
git config --global http.sslVerify false