kotoyuuko

CORE

昨日より、明日より、笑える今が一番大好き。
github
telegram
email

Docker 環境での GitLab のインストール

前言#

本文では、Debian 11 環境での GitLab のインストール方法について説明します。

Git ユーザーグループとユーザーの作成#

まず、git のユーザーグループとユーザーを作成する必要があります:

groupadd -g 998 git
useradd -m -u 998 -g git -s /bin/sh -d /home/git git

上記のコマンドは、Docker をインストールする前に実行することをお勧めします。
Docker を apt でインストールすると、デフォルトで GID が 998 の docker グループが作成され、GitLab の git グループと競合する可能性があるため、事前に GID が 998 のグループを作成することで手動の変更を回避できます。

Docker と Docker Compose のインストール#

参考:

アプリケーションの作成#

GitLab アプリケーションとデータフォルダ /app/gitlab を作成します:

mkdir -p /app/gitlab
mkdir -p /app/gitlab/data/{config,logs,data}

/app/gitlab/docker-compose.yaml ファイルを作成し、以下の内容を記述します:

version: '3'

services:
  gitlab:
    image: gitlab/gitlab-ce:14.7.2-ce.0
    container_name: gitlab
    restart: always
    privileged: true
    environment:
      GITLAB_OMNIBUS_CONFIG: |
        external_url 'https://example.com';
        nginx['enable'] = false;
        gitlab_rails['trusted_proxies'] = ['172.17.0.0/24', '10.0.0.0/8'];
        gitlab_workhorse['listen_network'] = 'tcp';
        gitlab_workhorse['listen_addr'] = '0.0.0.0:8181';
        gitlab_workhorse['gitlab_ssh_host'] = 'git.example.com';
    ports:
      - '8181:8181'
      - '2222:22'
    volumes:
      - /etc/localtime:/etc/localtime:ro
      # - /app/gitlab/data/data/.ssh/id_rsa.pub:/gitlab-data/ssh/authorized_keys:ro
      - /app/gitlab/data/config:/etc/gitlab
      - /app/gitlab/data/logs:/var/log/gitlab
      - /app/gitlab/data/data:/var/opt/gitlab
    shm_size: '256m'
    deploy:
      resources:
        limits:
          cpus: 2
          memory: 4G

example.com を GitLab のドメインに、git.example.com を SSH のドメインに変更してください。

アプリケーションフォルダに移動し、イメージをプルしてサービスを初期化します:

cd /app/gitlab
docker-compose pull
docker-compose up -d

設定#

まず、サービスを停止します:

docker-compose down

/app/gitlab/data/config/gitlab.rb ファイルを編集し、以下の項目を順番に検索してコメントを解除し、必要に応じて変更します:

external_url 'https://example.com'
gitlab_rails['gitlab_ssh_host'] = 'git.example.com'
gitlab_rails['time_zone'] = 'Asia/Shanghai'
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.example.com"
gitlab_rails['smtp_port'] = 587
gitlab_rails['smtp_user_name'] = "smtp_user"
gitlab_rails['smtp_password'] = "smtp_password"
gitlab_rails['smtp_domain'] = "example.com"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['gitlab_email_enabled'] = true
gitlab_rails['gitlab_email_from'] = 'noreply@example.com'
gitlab_rails['gitlab_email_display_name'] = 'Example'
gitlab_rails['gitlab_email_reply_to'] = 'noreply@example.com'
gitlab_rails['gitlab_default_theme'] = 2
gitlab_rails['gravatar_plain_url'] = 'https://gravatar.loli.net/avatar/%{hash}?s=%{size}&d=identicon'
gitlab_rails['gravatar_ssl_url'] = 'https://gravatar.loli.net/avatar/%{hash}?s=%{size}&d=identicon'
gitlab_shell['auth_file'] = "/var/opt/gitlab/.ssh/authorized_keys"

サービスを起動し、設定を適用します:

doker-compose up -d

SSH フォワーディング#

コンテナ内の SSH キーをホストマシンにマッピングします:

rm -rf /home/git/.ssh
ln -sf /app/gitlab/data/data/.ssh /home/git/.ssh

ホストマシンからコンテナへの通信キーを生成します:

su - git
ssh-keygen

gitlab-shell を作成します:

mkdir -p /opt/gitlab/embedded/service/gitlab-shell/bin
touch /opt/gitlab/embedded/service/gitlab-shell/bin/gitlab-shell
chmod a+x /opt/gitlab/embedded/service/gitlab-shell/bin/gitlab-shell

/opt/gitlab/embedded/service/gitlab-shell/bin/gitlab-shell の内容は以下の通りです:

#!/bin/sh
ssh -i /home/git/.ssh/id_rsa -p 2222 -o StrictHostKeyChecking=no git@git.example.com "SSH_ORIGINAL_COMMAND=\"$SSH_ORIGINAL_COMMAND\" $0 $@"

/etc/hosts ファイルに git.example.com127.0.0.1 に向けるように追加してください。

docker-compose.yaml ファイルを編集し、/gitlab-data/ssh/authorized_keys の行のコメントを解除します。

サービスを再起動します:

docker-compose down
docker-compose up -d

nginx フォワーディングの設定#

nginx の設定ファイルの例:

upstream gitlab-workhorse {
  server 127.0.0.1:8181 fail_timeout=0;
}

server {
  listen 80;
  listen [::]:80 ipv6only=on;
  server_name example.com;
  server_tokens off;
  return 301 https://$http_host$request_uri;
}

server {
  listen 443 ssl;
  listen [::]:443 ipv6only=on ssl;
  server_name example.com;
  server_tokens off;

  include enable-ssl.conf;
  include enable-hsts.conf;

  ssl_certificate /data/ssl/example.com/fullchain.pem;
  ssl_certificate_key /data/ssl/example.com/privkey.pem;
  ssl_trusted_certificate /data/ssl/example.com/ca.pem;

  location / {
    client_max_body_size 0;
    gzip off;

    proxy_read_timeout 300;
    proxy_connect_timeout 300;
    proxy_redirect off;

    proxy_http_version 1.1;

    proxy_set_header Host $http_host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-Ssl on;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_pass http://gitlab-workhorse;
  }
}

結論#

ブラウザで https://example.com を開いて試してみてください!

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。