docker-composeでGitLab

# はじめに

GitLabをローカルで立ち上げようと思い立ち、docker-composeならすぐだろうと思ったがそんなことはなかったのでメモ。
gitlab.rbファイルの編集をしないと立ち上げたWebに接続できなかったというお話です。

# 環境（DockerホストPC）

* ホスト名：seiryu
* IP: 192.168.0.4/24
* OS: Ubuntu 21.04 Server (on Hyper-V Server 2019)
* docker ver: 20.10.7
* docker-compose ver: 1.29.2

```bash:バージョン詳細
$ uname -a
Linux seiryu 5.11.0-18-generic #19-Ubuntu SMP Fri May 7 14:22:03 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
$ docker -v
Docker version 20.10.7, build f0df350
$ docker-compose -v
docker-compose version 1.29.2, build 5becea4c
```

# 導入手順

1. docker-compose.yml作成
1. ```docker-compose up -d```実行
1. 接続確認 <-- ここでハマる:worried:


# docker-compose.yml

```yml:docker-compose.yml
version: '3'
services:
  web:
    image: 'gitlab/gitlab-ce:latest'
    restart: always
    environment:
      GITLAB_OMNIBUS_CONFIG: |
        external_url 'http://192.168.0.4:8929'
        gitlab_rails['gitlab_shell_ssh_port'] = 2224
    ports:
      - '8929:80'
      - '2224:22'
    volumes:
      - '/srv/gitlab/config:/etc/gitlab'
      - '/srv/gitlab/logs:/var/log/gitlab'
      - '/srv/gitlab/data:/var/opt/gitlab'
```

* GitLab Docs[^1]記載のdocker-compose.ymlをベースに作成
* ```emvironment```の内容はちゃんと調べてはいないが、見よう見まねで修正

[^1]: 『[GitLab Docker images - Install GitLab using Docker Compose](https://docs.gitlab.com/omnibus/docker/#install-gitlab-using-docker-compose)』GitLab Docs

## 実行・接続確認（ハマりポイント）

上記ymlと同じフォルダにて```docker-compose```を実行し、```curl```で接続できるか確認。

```bash:接続失敗
$ docker-compose up -d
$ curl http://localhost:8929
curl: (52) Empty reply from server
```

何も出てこない…

# 対応方法

[たまたま見つけたページ](https://obel.hatenablog.jp/entry/20180430/1525082622)[^2]にgitlab.rbの設定も必要との記載を発見。
この環境では```docker-compose up```を実行した際に```/srv/gitlab/config/gitlab.rb```ファイルが作成されているので、このファイルに以下の2行を追加。

```rb:/srv/gitlab/config/gitlab.rb（コメントのない行が追加行）
# external_url 'GENERATED_EXTERNAL_URL'
external_url 'http://192.168.0.4:8929'
############## (中略）#################
# nginx['listen_port'] = nil
nginx['listen_port'] = 80
```

[^2]: obel氏 『[GitLab を docker-compose で起ち上げ、アドレスを「IPアドレス:ポート番号」にするとき](https://obel.hatenablog.jp/entry/20180430/1525082622)』 約束の地（2018.4.30）


# コンテナ再起動・確認


```bash:成功
$ docker-compose stop
$ docker-compose start
$ curl http://localhost:8929
<html><body>You are being <a href="http://localhost:8929/users/sign_in">redirected</a>.</body></html>
$ curl http://192.168.0.4:8929
<html><body>You are being <a href="http://192.168.0.4:8929/users/sign_in">redirected</a>.</body></html>
```

接続できた！:relaxed:

# 終わりに

gitbucketはdocker-composeで難なく使えたので甘く見てたら、こちらは予想外に時間がかかった。
docker-compose.ymlだけで起動できるようにしてみたいな。

# 追記(2021.6.19)

ここまで書いたら気づきそうなものだけれど、ちょっと疲れてたかな。
docker-compose.ymlを以下のように修正すればgitlab.rbは変更不要でした。

```yml:docker-compose.yml(修正版)
version: '3'
services:
  web:
    image: 'gitlab/gitlab-ce:latest'
    restart: always
    environment:
      GITLAB_OMNIBUS_CONFIG: |
        external_url 'http://192.168.0.4:8929'
        gitlab_rails['gitlab_shell_ssh_port'] = 2224
        nginx['listen_port'] = 80                       # この行を追加
    ports:
      - '8929:80'
      - '2224:22'
    volumes:
      - '/srv/gitlab/config:/etc/gitlab'
      - '/srv/gitlab/logs:/var/log/gitlab'
      - '/srv/gitlab/data:/var/opt/gitlab'
```

GitLab Docs[^1] に、以下の通りdocker-compose.ymlにgitlab.rbの設定を記載できる旨記述があったんですが完全に見落としてました。
```GITLAB_OMNIBUS_CONFIG```の値として設定を書けとのことです。（複数設定は改行コードで区切る）

```yml:記述箇所
    environment:
      GITLAB_OMNIBUS_CONFIG: |
        external_url 'https://gitlab.example.com'
        # Add any other gitlab.rb configuration here, each on its own line  ← この部分
```

あと、いろんなとこで書いてますが```docker-compose up -d```を実行してから接続できるようになるまで時間がかかるので、のんびり待つのが吉です。