EC2 AmazonLinux2 にGitLabをインストールする

デザイナーさんと共同でHTML/CSSを作ることになったので、資材管理のためにAWSのEC2にGitLabをインストールしました。手順を纏めておきます。

なお、GitLabだけ動かせばよかったので、Dockerなどは使わずにインスタンスに直接インストールしました。所要時間は20分程度です。

### 作業環境
macOS BigSur 11.0.1

### 参考
[セルフマネージドGitLabをインストール | GitLab公式サイト](https://www.gitlab.jp/install/#centos-7)
[GitLabをAWS上で動かす(3/3) | Qiita](https://qiita.com/C910/items/217e7df50a37e10b781b)
[AmazonEC2にGitLab CEの環境を構築する | かつおぶしのブログ](https://blog.k-bushi.com/post/tech/cloud/building-gitlab-on-ec2/)
[docker-composeを使ってgitlabを構築する | mebee](https://mebee.info/2020/04/18/post-9736/#outline__5)

### 手順
* インスタンスを作る
* インバウンドの設定で HTML を追加しておく
* インスタンスにsshで接続する
* GitLabや必要なパッケージをインストール
* 初期設定
* ブラウザからアクセスできるか確認する

### インスタンスを作る
t2.micro（メモリ2GB） にインストールを試みたところ、インストールの途中で固まりました（通信が切れたけどインストールはできていたことが後から分かった）。
そこで、メモリが4GBの t3.midium で作り直しました。

ちなみに、GitLabの公式ページではメモリ4GB以上の環境が推奨されています。目立つところに記載されていたので、恐らく同じようにコケる人が多いのではないでしょうか？

インスタンスの仕様は下記の通りです。

タイプ：t3.midium
ストレージ：50GB
OS：AmazonLinux2


### インバウンドの設定で HTML を追加しておく
ブラウザからアクセスするのにインバウンドルールにHTMLを追加する必要があります。設定を忘れてアクセスできなくて悩んだことがあるので先に設定しておきます。
（セキュリティの観点から、すぐにインストールの作業をしない時は作業をする直前に設定するようにします。）



### インスタンスにsshで接続する
インスタンスを作成する時に新しくキーバリューのキーを作成した時は、chmod でパーミッション（権限）を 400 を設定しないとエラーになります。（忘れてよくエラーを出します）

パーミッションの 400 は所有者のみに読み込みが許可される権限です。所有者以外は読み込みできませんし、所有者も含め変更削除は行えません。

```
# ファイルのパーミッションを400に設定
$ chmod 400 xxxxxxxx/xxxxxx/hoge-key.pem 
```

sshで接続します。ユーザー名はデフォルトの ec2-user を指定します（これも久しぶりだと忘れて悩むことがある）。

コマンドは `ssh -i <キーの絶対パス> ec2-user@<インスタンスのグローバルIP>`です。



```
# sshでインスタンスに接続
$ ssh -i ~/xxxxxx/xxxxx/hoge-key.pem ec2-user@xxx.xxx.xxx.xxx

# 途中でYesかNoか聞かれた場合は　y を入力してEnter

〜略〜
       __|  __|_  )
       _|  (     /   Amazon Linux 2 AMI
      ___|\___|___|

https://aws.amazon.com/amazon-linux-2/
```


### GitLabや必要なパッケージをインストール
CentOS7だとpostfixのインストールが必要らしいですが、下記の通り、AmazonLinux2の場合は最初からインストールされていました。

```
# postfixをインストール（AmazonLinux2の場合は不要だった）
$ sudo yum install postfix

読み込んだプラグイン:extras_suggestions, langpacks, priorities, update-motd
amzn2-core                                               | 3.7 kB     00:00     
パッケージ 2:postfix-2.10.1-6.amzn2.0.3.x86_64 はインストール済みか最新バージョンです
何もしません
```

念の為 postfix の有効化と起動のコマンドは実行しておきます。

```
# postfixの有効化
$ sudo systemctl enable postfix
# postfixを起動
$ sudo systemctl start postfix
```

次に、GitLabのパッケージをリポジトリに追加します。パッケージのURLは　[セルフマネージドGitLabをインストール - GitLab公式サイト](https://www.gitlab.jp/install/#centos-7)　にあるのが最新のはずなので、確認してください。

```
# GitLabのパッケージをリポジトリに追加
$ curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ee/script.rpm.sh | sudo bash
```

`The repository is setup! You can now install packages.`
と表示されたらOK


次に、GitLabのパッケージをインストールします。下のコマンドの
`EXTERNAL_URL="https://gitlab.example.com"`の部分はブラウザでアクセスする際のアドレスを指定します。アドレスは後で設定できるので指定しなくても問題ないです。

```
# GitLabのパッケージをインストール
$ sudo EXTERNAL_URL="https://gitlab.example.com" yum install -y gitlab-ee
```

EXTERNAL_URLを後で設定する場合は、`sudo yum install -y gitlab-ee`だけです。

下記のように、「完了しました！」と表示されたらインストールOKです。

```
〜〜〜略〜〜〜
インストール:
  gitlab-ee.x86_64 0:13.6.1-ee.0.el6                                            

依存性関連をインストールしました:
  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-21.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                                       

完了しました!
```



### 初期設定
gitlab.rb をvimで開いてブラウザからアクセスする際のURLを設定します。インストールの時に`EXTERNAL_URL=""`でURLを指定した場合も念のため確認しておいた方が良いと思います。

```
# gitlab.rbを開く
$ vi /etc/gitlab/gitlab.rb
```

`external_url `が設定されている場所が分かりにくいので、`/`とかを使って検索した方が楽です。

ブラウザからhttpでアクセスする場合、external_url は`http://<インスタンスのグローバルIP>`になります。IPの後ろに"/"で区切ってアドレスを追加することができるので、同じインスタンスに他のツールをインストールする場合は `http://<インスタンスのグローバルIP>/gitlab`とかにすると良いかもしれません。

```
# エディターでexternal_urlを設定
external_url 'http://xxx.xxx.xxx.xxx/gitlab'
```

設定を保存したら、GitLabを再起動します。

```
# gitを再起動
$ sudo gitlab-ctl reconfigure
```

`gitlab Reconfigured!`と表示されたらOKです。


### ブラウザからアクセスできるか確認する
ブラウザへ external_url　に設定したURLを入力してアクセスします。最初に開くとこんな感じの画面が表示されます。ここで管理者（root）のパスワードを設定します。

![gitlab-open-first.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/526594/1d713267-859c-b948-e13c-a53e3a2dcb30.png)


パスワードを設定したらサインインの画面が表示されます。
Username はデフォルトで`root`、Passwordは先ほど設定したパスワードです。

![gitlab-changed-pw.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/526594/9a9dadd3-8cc6-3e69-3cb7-fba96f9bfa43.png)


サインインできました。
![gitlab-top.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/526594/7c960d75-c505-1ec9-9ef4-9d7277189197.png)



### その他の設定
デフォルトは英語です。日本語する場合はユーザーの設定ページから変更できます（ユーザー毎に設定する仕様になっています）

こちらのサイトを参考にさせていただきました。
[docker-composeを使ってgitlabを構築する | mebee](https://mebee.info/2020/04/18/post-9736/#outline__5)



以上です。