【Gitlab】Gitlabサーバーを構築してみた（インストール～初期設定）

# はじめに
自主学習用の検証環境として、Gitlabサーバを構築してみました。
初めてGitlabサーバを構築する方は参考にしてみてください。（基本的には[公式文書](https://about.gitlab.com/install/#ubuntu)に準拠しています。）
GitlabサーバはUbuntu 24.07上にインストールします。
Ubuntuの設定周りは[こちら](https://qiita.com/rittan_girla/items/a01df929796a2d36485f)の記事で記載した内容の通りです。

# 環境
- クライアントPC
    - Windows11
- Gitlabサーバ（VirtualBox）
    - Ubuntu 24.07
    - Gitlab 17.3

# 目次
1. [Gitlabインストール手順](https://qiita.com/rittan_girla/items/8ad9746975ce57b11936/#1-gitlab%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E6%89%8B%E9%A0%86)
1. [Gitlab初期設定](https://qiita.com/rittan_girla/items/8ad9746975ce57b11936/#2-gitlab%E5%88%9D%E6%9C%9F%E8%A8%AD%E5%AE%9A)
1. [クライアント側設定](https://qiita.com/rittan_girla/items/8ad9746975ce57b11936/#3-%E3%82%AF%E3%83%A9%E3%82%A4%E3%82%A2%E3%83%B3%E3%83%88%E5%81%B4%E8%A8%AD%E5%AE%9A)

# 1. Gitlabインストール手順
Gitlabインストール手順を記載します。

## 1-1. パッケージアップデート
```
# apt-get update
# apt-get upgrade
```

## 1-2. 必要なパッケージをインストール

【コマンド】
```
# apt-get install -y curl openssh-server ca-certificates tzdata perl
```
【結果】
すでにインストールされていたため、下記のような表示でした。
```
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
curl is already the newest version (8.5.0-2ubuntu10.1).
curl set to manually installed.
openssh-server is already the newest version (1:9.6p1-3ubuntu13.4).
ca-certificates is already the newest version (20240203).
ca-certificates set to manually installed.
tzdata is already the newest version (2024a-3ubuntu1.1).
tzdata set to manually installed.
perl is already the newest version (5.38.2-3.2build2).
perl set to manually installed.
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
```


## 1-3. postfixインストール

【コマンド】
```
# apt-get install -y postfix
```

## 1-4. Gitlabリポジトリ登録

【コマンド】
```
# curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ee/script.deb.sh | sudo bash
```

【結果】
```
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  6865  100  6865    0     0   5153      0  0:00:01  0:00:01 --:--:--  5153
Detected operating system as Ubuntu/noble.
Checking for curl...
Detected curl...
Checking for gpg...
Detected gpg...
Running apt-get update... done.
Installing apt-transport-https... done.
Installing /etc/apt/sources.list.d/gitlab_gitlab-ee.list...done.
Importing packagecloud gpg key... done.
Running apt-get update... done.

The repository is setup! You can now install packages.
```

## 1-5. Gitlabインストール
GitlabのDNSがあればドメイン名を指定しますが、今回の環境ではDNS登録しないため、直接GitlabのIPアドレスを指定しています。
※筆者の環境では、インストール完了まで7分ほどかかりました。

【コマンド】
```
# EXTERNAL_URL="https://GitlabのIPアドレス" apt-get install gitlab-ee
```

【結果】
実行ログは長いので最後の行のみ記載しています。
最後にログイン情報についての記載がありますが、24時間以内でクリーンアップされるため注意が必要です。
また、今回はIPアドレスを指定しているため、Acmeのエラーが出ています。
```
Notes:
Default admin account has been configured with following details:
Username: root
Password: You didn't opt-in to print initial root password to STDOUT.
Password stored to /etc/gitlab/initial_root_password. This file will be cleaned up in first reconfigure run after 24 hours.

NOTE: Because these credentials might be present in your log files in plain text, it is highly recommended to reset the password following https://docs.gitlab.com/ee/security/reset_user_password.html#reset-your-root-password.

[2024-08-07T15:37:46+00:00] FATAL: Stacktrace dumped to /opt/gitlab/embedded/cookbooks/cache/cinc-stacktrace.out
[2024-08-07T15:37:46+00:00] FATAL: ---------------------------------------------------------------------------------------
[2024-08-07T15:37:46+00:00] FATAL: PLEASE PROVIDE THE CONTENTS OF THE stacktrace.out FILE (above) IF YOU FILE A BUG REPORT
[2024-08-07T15:37:46+00:00] FATAL: ---------------------------------------------------------------------------------------
[2024-08-07T15:37:46+00:00] FATAL: Acme::Client::Error::RejectedIdentifier: letsencrypt_certificate[xxx.xxx.xxx.xxx] (letsencrypt::http_authorization line 6) had an error: Acme::Client::Error::RejectedIdentifier: acme_certificate[staging] (letsencrypt::http_authorization line 43) had an error: Acme::Client::Error::RejectedIdentifier: Invalid identifiers requested :: Cannot issue for "192.168.11.33": The ACME server can not issue a certificate for an IP address
dpkg: error processing package gitlab-ee (--configure):
 installed gitlab-ee package post-installation script subprocess returned error exit status 1
Errors were encountered while processing:
 gitlab-ee
needrestart is being skipped since dpkg has failed
E: Sub-process /usr/bin/dpkg returned an error code (1)
```

## 1-6. ログイン情報確認

【コマンド】
```
# cat /etc/gitlab/initial_root_password
```

【結果】
```
# WARNING: This value is valid only in the following conditions
#          1. If provided manually (either via `GITLAB_ROOT_PASSWORD` environment variable or via `gitlab_rails['initial_root_password']` setting in `gitlab.rb`, it was provided before database was seeded for the first time (usually, the first reconfigure run).
#          2. Password hasn't been changed manually, either via UI or via command line.
#
#          If the password shown here doesn't work, you must reset the admin password following https://docs.gitlab.com/ee/security/reset_user_password.html#reset-your-root-password.

Password: *********************

# NOTE: This file will be automatically deleted in the first reconfigure run after 24 hours.
```

## 1-7. Gitlabログイン
設定したGitlabのURLに接続します。
- ログイン情報
    - ユーザー名：root
    - パスワード：1-6で確認した値

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3698496/875be9dd-5330-ff9f-167c-83dd168e16cc.png)

ログイン後の画面
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3698496/62a060bc-0cc7-48fd-bd3d-22f6877b2c7d.png)

# 2. Gitlab初期設定
Gitlabの初期設定手順を記載します。

# 2-1. rootパスワード変更
①左上のユーザー>[Edit Profile]を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3698496/2b9840d2-86b9-605d-e27b-a46f9535885d.png)

②左ペインから[Password]を選択して、[Save password]を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3698496/9c95604d-8aaa-4076-660e-5e271a6867be.png)

③ログイン画面に遷移するため、新しく変更したパスワードでログインします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3698496/f58137ac-2563-9f50-4c92-6f09994e6298.png)

# 2-2. ユーザー作成
rootユーザーを普段使用することはセキュリティ的によくないため、ユーザーを作成します。

①ホームページから[Add people]を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3698496/9ffe69d2-0d4d-0d68-c630-100e6cceb44d.png)

②各必須項目を入力して、[create]を押下します。
※内部用の一般ユーザーのため、権限はRegularにします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3698496/4c6b7170-d936-61a0-6a27-634338c6312a.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3698496/ffede85c-aeef-979d-3a65-22aefc77ce29.png)

③ユーザーが作成されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3698496/7a3ac66b-1fb0-abaa-1797-f91d6c81cd9e.png)

④新しいユーザーでログインしなおします。
[パスワードをお忘れの場合]からパスワードリセットができます。

⑤ログイン後、パスワード変更が促されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3698496/dcc99e25-6da2-7729-7d04-2389b9e3d34a.png)

⑥パスワード変更が完了します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3698496/1d1947ba-65b6-76d5-6b12-8c388fcd2e1a.png)

⑦ログイン
※Regular権限なので、微妙に表示される項目が違いますね。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3698496/279a9a29-a0f8-5786-8e63-5a27026d4b96.png)

## 2-3. グループ作成
直接プロジェクトを作成しても良いですが、管理上グループ分けした方がよいので、グループを作成します。

①左ペインから[Group]を選択して、右上の[New group]を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3698496/c36cc665-6916-74ed-7fb5-565407d217a2.png)

②[Create group]を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3698496/992ff338-dbaa-d267-8943-9e4de69cf775.png)

③各情報を記入して、[Create group]を押下します。
※最小限Group name、Group URL（自動で入力はされる）、Visibility levelを記載し、あとはデフォルトでも問題ありません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3698496/865eeb89-7f73-e2d7-daaf-9812cf282f66.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3698496/06b4d437-19c8-9812-752f-457b43994156.png)

④グループ作成確認
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3698496/7ee2bcd7-d774-dcb6-b32e-426af1801ff7.png)

## 2-4. サブグループ作成
サブグループを作成しておくと案件毎や機能毎にプロジェクトを管理することができます。

①2-3で作成したグループ画面から、[Create new subgroup]を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3698496/a4140f34-bc7e-5586-82c5-75ea17cfbd4c.png)

②サブグループ名と公開範囲を設定して、[Create subgroup]を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3698496/dc33f14a-e5f7-f1bc-f8f9-5b8cd5c562f0.png)

③サブグループのページに自動で遷移します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3698496/dbd0ae17-9c3e-8d82-6d7b-c1ccde73877e.png)

## 2-5. プロジェクト作成
プロジェクトを作成することでリポジトリが作成できます。
2-4で作成したサブグループ配下にプロジェクトを作成します。

①[Create new project]を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3698496/dbd0ae17-9c3e-8d82-6d7b-c1ccde73877e.png)

②[Create Blank project]を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3698496/cdf8e9a2-249a-7a49-d121-2b935ba7e9e1.png)

③プロジェクト名と公開範囲を設定して、[Create project]を押下します。
Initialize repository with a READMEにチェックすることで、自動でREADME.mdが作成されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3698496/0dd452e8-710c-7909-b757-085945aba370.png)

④プロジェクトが作成されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3698496/841f1b70-7d7a-f7a0-63fc-11bdf9167e4a.png)

# 3. クライアント側設定
Gitを使用するためにGit for Windowsをインストールします。

# 3-1. Git for Windowsインストール
①下記サイトから、Git for Windowsをインストールします。

https://gitforwindows.org/

②インストーラを実行して、ウィザードが開いたら[Next]を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3698496/f81ca574-82bf-a00b-a4ec-eb2651bc33a5.png)

③インストール先を指定して[Next]を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3698496/2086bdaa-aa70-d5a4-379c-31061459423d.png)

④デフォルトのまま[Next]を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3698496/aa21142a-dc5a-f391-96cf-7a9a50b6bc34.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3698496/01588b45-1cae-4db7-c948-97f99791d002.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3698496/3181122e-b81e-881b-28d8-956f976a35ed.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3698496/187b21e2-dd77-bede-59a5-ace3a020cfea.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3698496/9c278ef8-3217-0ab1-61e7-6194e1542163.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3698496/cfd4d491-c37f-ed23-9054-2147e4f9c5bd.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3698496/0ebc4c26-84a3-bf59-3773-619fc92ae36b.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3698496/b4e86b79-656c-618d-ddc3-aa448611814d.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3698496/99258619-3c76-ff66-2ad4-458869775b59.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3698496/18a6519b-f500-91ff-747e-54489a2f5308.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3698496/760be061-f2bd-6e3b-7b0f-8f2cc3c9e7ea.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3698496/6b5c9942-539a-4c5b-c7b0-546a05ca323c.png)

⑤デフォルトのまま[Install]を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3698496/f9e1dbb1-3059-6838-4833-bdda3218801a.png)

⑥インストールが開始されるため、完了するまで待機します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3698496/efc00da1-ac79-6b34-c279-aa33f2682ab4.png)

⑦[Finish]を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3698496/f537631c-948a-3ab1-0ab1-c474e0e7eea4.png)

# 3-2. Git bash起動
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3698496/d46eec8b-72cb-3d79-b4e8-1daa1f87120a.png)

# 3-3. SSL検証無効化
このSSL検証設定を実施しない場合、下記エラーが発生します。
`fatal: unable to access 'http://xxx.xxx.xxx.xxx/testgroup/ansible/ansible-redhat8.git/': SSL certificate problem: self-signed certificate`

【コマンド】
```
git config --global http.sslVerify false
```

※参考

https://qiita.com/yazzy/items/3dae25b3cb8042eed8c2

# 3-4. リポジトリクローン
①プロジェクトページから[Code]という青いボタンを押下します。
表示された[Clone with HTTPS]のURLを控えておきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3698496/4deb8f06-3a17-86ce-94d5-b690e254e94a.png)

②下記コマンドを実行して、リポジトリをローカルにクローンします。

【コマンド】
```
$ git clone http://[ホスト名またはIPアドレス]/testgroup/ansible/ansible-redhat8.git
```
【結果】
```
Cloning into 'ansible-redhat8'...
warning: missing OAuth configuration for 192.168.11.33 - see https://aka.ms/gcm/gitlab for more information
```
ログイン画面が表示されたら、対象ユーザーでログインします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3698496/3f697a2a-1b39-1201-d8bd-18818d64f818.png)
```
$ git clone http://192.168.11.33/testgroup/ansible/ansible-redhat8.git
Cloning into 'ansible-redhat8'...
warning: ----------------- SECURITY WARNING ----------------
warning: | TLS certificate verification has been disabled! |
warning: ---------------------------------------------------
warning: HTTPS connections may not be secure. See https://aka.ms/gcm/tlsverify for more information.
warning: auto-detection of host provider took too long (>2000ms)
warning: see https://aka.ms/gcm/autodetect for more information.
warning: ----------------- SECURITY WARNING ----------------
warning: | TLS certificate verification has been disabled! |
warning: ---------------------------------------------------
warning: HTTPS connections may not be secure. See https://aka.ms/gcm/tlsverify for more information.
warning: ----------------- SECURITY WARNING ----------------
warning: | TLS certificate verification has been disabled! |
warning: ---------------------------------------------------
warning: HTTPS connections may not be secure. See https://aka.ms/gcm/tlsverify for more information.
warning: redirecting to https://xxx.xxx.xxx.xxx:443/testgroup/ansible/ansible-redhat8.git/
remote: Enumerating objects: 3, done.
remote: Counting objects: 100% (3/3), done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0 (from 0)
Receiving objects: 100% (3/3), done.
```

# 3-5. ファイル確認
Git bash上で対象のプロジェクトがクローンされていることを確認します。

```
$ dir
ansible-redhat8
```
※フォルダの中身
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3698496/8b0f27d5-60da-fbe0-c0f9-df1ce4eb3e10.png)


# おわりに
Gitlabのインストールから初期設定までの手順を記載しました。
以前とはだいぶGitlabのUIが変わっていて戸惑いました。（特にAdmin Areaの開き方が初見では分かりにくかった）
次回はgitlab-runnerの導入を実施してみます。

# 参考
https://about.gitlab.com/install/#ubuntu