ヘッダー画像

【Synology】DockerでGitLabを構築してみた

投稿 2025年3月30日 最終更新 2025年3月30日 専門用語多め

GitLab構築

DockerでSynologyにGitLabを構築してみます。

DDNSで独自ドメインを設定しているところに構築します。

このブログの「inkblogdb.com」ドメインを例にして設定していますので、ご参考にしてください。

docker-compose.yml

初めにdocker-compose.ymlを載せておきます。

後ほど解説します。

version: '3.6'
services:
  gitlab:
    image: gitlab/gitlab-ee:latest
    container_name: gitlab
    restart: always
    hostname: 'inkblogdb.com'
    environment:
      GITLAB_OMNIBUS_CONFIG: |
        external_url 'https://inkblogdb.com:50433'
        registry_external_url 'https://inkblogdb.com:50000'
        gitlab_rails['gitlab_shell_ssh_port'] = 50022
        gitlab_rails['time_zone'] = "Asia/Tokyo"
        # Synologyの独自証明書を設定
        letsencrypt['enable'] = false
        nginx['ssl_certificate'] = "/etc/ssl/certs/gitlab/RSA-fullchain.pem"
        nginx['ssl_certificate_key'] = "/etc/ssl/certs/gitlab/RSA-privkey.pem"
    ports:
      - '50433:50433' # external_url用
      - '50000:50000' # registry_external_url用
      - '50022:22' # SSH用
    volumes:
      - './gitlab/config:/etc/gitlab'
      - './gitlab/logs:/var/log/gitlab'
      - './gitlab/data:/var/opt/gitlab'
      # Synologyの独自証明書を反映
      - '/usr/syno/etc/certificate/system/default:/etc/ssl/certs/gitlab'
    shm_size: '256m'
    entrypoint: >
      sh -c "
        mkdir -p /etc/gitlab/ssl ;
        ln -s /etc/ssl/certs/gitlab/RSA-fullchain.pem  /etc/gitlab/ssl/inkblogdb.com.crt ;
        ln -s /etc/ssl/certs/gitlab/RSA-privkey.pem  /etc/gitlab/ssl/inkblogdb.com.key ;
        /assets/wrapper
      "

Synology特有の注意点・変更点

ホストおよび証明書

例ではNASのDDNSに設定している独自ドメインを使用しています。

NAS側でLet's Encryptの証明書も自動更新してくれるので、証明書が更新されたらGitLabにも反映すべく
できる限りコピーはせず、Synologyのシステムをそのまま使うようにしました。

volumes

まずSynologyのデフォルト証明書が管理されているディレクトリは/usr/syno/etc/certificate/system/defaultです。

なので、そのディレクトリをDockerのvolumesに設定し、GitLabコンテナ内の/etc/ssl/certs/gitlabに反映させます。

volumes:
  - '/usr/syno/etc/certificate/system/default:/etc/ssl/certs/gitlab'

GITLAB_OMNIBUS_CONFIG

上記Dockerのvolumesで反映した証明書を認識させるために、下記設定を行います。

environment:
  GITLAB_OMNIBUS_CONFIG: |
    letsencrypt['enable'] = false
    nginx['ssl_certificate'] = "/etc/ssl/certs/gitlab/RSA-fullchain.pem"
    nginx['ssl_certificate_key'] = "/etc/ssl/certs/gitlab/RSA-privkey.pem"

entrypoint

最後にGitLab起動時に、GitLabが認識できる形にさせるためにシンボリックリンクを貼ります。

entrypoint: >
  sh -c "
    mkdir -p /etc/gitlab/ssl ;
    ln -s /etc/ssl/certs/gitlab/RSA-fullchain.pem  /etc/gitlab/ssl/inkblogdb.com.crt ;
    ln -s /etc/ssl/certs/gitlab/RSA-privkey.pem  /etc/gitlab/ssl/inkblogdb.com.key ;
    /assets/wrapper
  "

/etc/gitlab/sslがGitLabがデフォルトで読み込みに行くディレクトリなので、ディレクトリを作成します。

そこにhostnameで設定したドメイン名.crtと.keyを配置します。

最後にGitLab起動のための/assets/wrapperを実行します。

ポート番号

NASだといろいろサービスやシステム等が起動しているため、競合しないように自由枠の50000番台を使います。
ご自由に変更いただいて問題ないです。

設定項目 ポート番号
external_url 50433
registry_external_url 50000
gitlab_shell_ssh_port 50022

まとめ

GitLabをSynology上に構築するのは簡単でしたが、証明書周りがちょっと面倒だったのでまとめてみました。

以上、ここまで見ていただきありがとうございます。

皆さまの快適な開発ライフに、ほんの少しでもお役に立てれば幸いです。

コメント

この記事のコメントはありません。