Skip to content

Docker で GitLab サーバを構築

gitlab コンテナを構築

事前にip aコマンドで仮想マシンの IP アドレスを調べておき、docker-compose.yaml を作成します。

services:
  gitlab:
    image: gitlab/gitlab-ce:latest
    container_name: nob-gitlab
    environment:
      GITLAB_OMNIBUS_CONFIG: |
        external_url "http://${IP_address}:80"
        gitlab_rails['gitlab_shell_ssh_port'] = 2022
    ports:
      - "80:80"
      - "2022:22"
    volumes:
      - "/srv/gitlab/config:/etc/gitlab"
      - "/srv/gitlab/logs:/var/log/gitlab"
      - "/srv/gitlab/data:/var/opt/gitlab"

docker-compose up -dでコンテナを起動します。アクセスできるようになるまでに数分ラグがあります。Error: 502 であれば根気良く待ってください。しばらく待ってhttp://${IP_address}:80にアクセスすると gitlab の画面が表示されます。
root ユーザのパスワードはサーバ内のファイルに記載されているため、以下のコマンドで調べられます。

docker exec -it nob-gitlab grep 'Password:' /etc/gitlab/initial_root_password

Let's Encrypt を使って SSL 通信をできるようにする

external_urlを HTTPS プロトコルで設定すると Let’s Encrypt で SSL 通信ができるようにしてくれます。cf. https://docs.gitlab.com/omnibus/settings/ssl/#enable-the-lets-encrypt-integration

services:
  gitlab:
    image: gitlab/gitlab-ee:latest
    container_name: nob-gitlab
    environment:
      GITLAB_OMNIBUS_CONFIG: |
        external_url "https://nob-gitlab.ddo.jp"
        gitlab_rails['gitlab_shell_ssh_port'] = 2022
    ports:
      - "80:80"
      - "443:443"
      - "2022:22"
    volumes:
      - "/srv/gitlab/config:/etc/gitlab"
      - "/srv/gitlab/logs:/var/log/gitlab"
      - "/srv/gitlab/data:/var/opt/gitlab"

自己証明書を使って SSL 通信をできるようにする

下記でコンテナを起動するとhttps://${設定したドメイン}で GitLab にアクセスできます:

services:
  gitlab:
    image: gitlab/gitlab-ee:latest
    container_name: nob-gitlab
    environment:
      GITLAB_OMNIBUS_CONFIG: |
        external_url "https://gitlab.example.nob"
        gitlab_rails['gitlab_shell_ssh_port'] = 2022
        nginx['redirect_http_to_https'] = true
        letsencrypt['enable'] = false
    ports:
      - "80:80"
      - "443:443"
      - "2022:22"
    volumes:
      - "/srv/gitlab/config:/etc/gitlab"
      - "/srv/gitlab/logs:/var/log/gitlab"
      - "/srv/gitlab/data:/var/opt/gitlab"
      # 証明書をコンテナに配置
      - "./volumes/ssl:/etc/gitlab/ssl"
$ ls -l volumes/ssl/
total 12
-rw-r--r-- 1 root root 1123 Apr 27 12:25 gitlab.example.nob.crt
-rw-r--r-- 1 root root  956 Apr 27 12:25 gitlab.example.nob.csr
-rw------- 1 root root 1704 Apr 27 12:25 gitlab.example.nob.key

gitlab-runner コンテナを構築

gitlab-runner は下記で起動できます:

services:
  gitlab-runner:
    image: gitlab/gitlab-runner:latest
    container_name: nob-gitlab-runner
    volumes:
      - "/srv/gitlab/gitlab-runner/config:/etc/gitlab-runner"
      - "/var/run/docker.sock:/var/run/docker.sock"

docker-compose up -dを実行してコンテナを作成。起動後、GitLab GUI 上の "Create project runner" から作成したコマンドから、対話形式で runner を構築できます。

GitLab が 自己証明書で SSL 通信をしている場合

runner コンテナの中に、GitLab 本体が使っている証明書{ドメイン名}.crtとして配置する必要があります。例として、docker-compose.yamlに下記を追加してください:

volumes:
  - "./volumes/ssl/server.crt:/etc/gitlab-runner/certs/${ドメイン名}.crt"

Runner トラブルシュート

GitLab にドメインを当てているなどしていて「名前解決ができない」のようなメッセージが出て落ちる場合は、runner のコンテナ内の/srv/gitlab/gitlab-runner/config/config.tomlに下記を追加します。

cf. https://docs.gitlab.com/runner/configuration/advanced-configuration/

  [runners.docker]
  ...
    extra_hosts = ["${ドメイン名}:${GitLabのIPアドレス}"]

.gitlab-ci.yml サンプル

stages:
  - build
  - test

job_build:
  stage: build
  script:
    - echo "Building the project"

job_test1:
  stage: test
  script:
    - echo "This is the first test"

job_test2:
  stage: test
  script:
    - echo "This is the second test"