AlmaLinux9.1にGitLabをインストールする

gitlab.comで運用していたリポジトリのグループメンバーが増える予定になったのでいっそのことself-hostedにするかと。

## 要件

- 運用中のHyper-vホストにVMとして乗せる
- 4コア 8GB 300GB ぐらいの規模感で
- メール通知は新たにgmailでアカウントを作ってそこから。
- CI/CDはそこまで使っていないので追々がんばる
- let's enclypt使ってhttpsに


## Almalinuxインストール

VM立ててisoからインストール。インストールタイプはサーバーを選択。
バックアップを考えて仮想ディスクを分割した。
- /dev/sda 50GB ルート
- /dev/sdb 300GB Gitlab用 /var/optにマウント

## GitLabインストール

[How To Install GitLab on Rocky Linux 9 / AlmaLinux 9 \| ComputingForGeeks](https://computingforgeeks.com/install-gitlab-on-rocky-almalinux-9/)

を参考に。
面倒なのでrootで作業。

### 更新して必須ライブラリのインストール

```bash
dnf update -y 
dnf -y install curl vim policycoreutils python3-policycoreutils git
```

### gitlabのリポジトリ追加

```
vim /etc/yum.repos.d/gitlab_gitlab-ce.repo
```
```conf:/etc/yum.repos.d/gitlab_gitlab-ce.repo
[gitlab_gitlab-ce]
name=gitlab_gitlab-ce
baseurl=https://packages.gitlab.com/gitlab/gitlab-ce/el/8/$basearch
repo_gpgcheck=1
gpgcheck=1
enabled=1
gpgkey=https://packages.gitlab.com/gitlab/gitlab-ce/gpgkey
       https://packages.gitlab.com/gitlab/gitlab-ce/gpgkey/gitlab-gitlab-ce-3D645A26AB9FBD22.pub.gpg
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt
metadata_expire=300

[gitlab_gitlab-ce-source]
name=gitlab_gitlab-ce-source
baseurl=https://packages.gitlab.com/gitlab/gitlab-ce/el/8/SRPMS
repo_gpgcheck=1
gpgcheck=1
enabled=1
gpgkey=https://packages.gitlab.com/gitlab/gitlab-ce/gpgkey
       https://packages.gitlab.com/gitlab/gitlab-ce/gpgkey/gitlab-gitlab-ce-3D645A26AB9FBD22.pub.gpg
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt
metadata_expire=300

```

```
[root@localhost ~]# dnf repolist
repo id                                  repo name
appstream                                AlmaLinux 9 - AppStream
baseos                                   AlmaLinux 9 - BaseOS
extras                                   AlmaLinux 9 - Extras
gitlab_gitlab-ce                         gitlab_gitlab-ce
gitlab_gitlab-ce-source                  gitlab_gitlab-ce-source
```
OK

### gitlab-ceのインストール

```shell
dnf install gitlab-ce -y
```

### メール通知用のgmailアドレスを作成

MFAを有効にしてアプリパスワードを取得しておく。
- [アプリ パスワードでログインする \- Google アカウント ヘルプ](https://support.google.com/accounts/answer/185833?hl=ja)

### gitlabの設定

もとからある設定ファイルは冗長なのでバックアップして新規作成する。
```sh
mv /etc/gitlab/gitlab.rb /etc/gitlab/gitlab.rb.orig
vi /etc/gitlab/gitlab.rb
```

```rb
external_url 'http://gitlab.new.server.fqdn'
nginx['enable'] = true
nginx['redirect_http_to_https'] = true
nginx['redirect_http_to_https_port'] = 80
letsencrypt['enable'] = true
letsencrypt['contact_emails'] = ['<letsEncryptへの登録アドレス>']
letsencrypt['auto_renew'] = true

gitlab_rails['gitlab_email_enabled'] = true
gitlab_rails['gitlab_email_from'] = '<通知用アドレス>'
gitlab_rails['gitlab_email_display_name'] = '<通知メールの表示名>'
gitlab_rails['gitlab_email_reply_to'] = '<通知用アドレス>'
gitlab_rails['gitlab_email_subject_suffix'] = ''
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.gmail.com"
gitlab_rails['smtp_port'] = 587
gitlab_rails['smtp_user_name'] = "<通知用アドレス>"
gitlab_rails['smtp_password'] = "<アプリパスワード>"
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['time_zone'] = 'Asia/Tokyo'
prometheus['enable'] = false
puma['enable'] = true
puma['ha'] = false
puma['worker_timeout'] = 60
puma['worker_processes'] = 2
puma['min_threads'] = 2
puma['max_threads'] = 2
```

`external_url`は外部から接続可能なfqdnでかつ、Let's EncryptのACMEを通すため最初は`http://`にしておく必要があるとこがミソ。
- [ACME \- Qiita](https://qiita.com/urakarin/items/b0fa10546f4eaf1630db)

### gitlabの起動

firewallに穴を開けてgitlabの起動
```sh
firewall-cmd --permanent --add-service={ssh,http,https} --permanent
firewall-cmd --reload
gitlab-ctl reconfigure
```

これで `http://gitlab.new.server.fqdn`につながるはず。
初期パスワードは`/etc/gitlab/initial_root_password`に入ってるのでこれを使ってrootでログインできるか確認。

### sslの強制に変更

`external_url`をhttpsにするだけ
```sh
vi /etc/gitlab/gitlab.rb
```

```rb
external_url 'https://gitlab.new.server.fqdn'
```

```sh
gitlab-ctl reconfigure
```

### SELinux下で鍵認証を有効にするためにパーミッション調整

- [SELinux 環境下にgitlabをインストールしたらSSHの鍵認証が失敗する \- Qiita](https://qiita.com/qyen/items/13eebab4d1f31b7daa76)

```sh
chcon -R -t ssh_home_t /var/opt/gitlab/.ssh
```