環境
- OS: Windows 10 Pro
- Docker version 18.03.1-ce, build 9ee9f40
- docker-compose version 1.21.1, build 7641a569
イメージを取得する
2018/6/24 時点での latest(10.8.4-ce.0) のイメージを使用する。
サーバーを立てる
ボリュームを作成する
docker-compose.yml
を作る
docker-compose.yml
version: '3'
services:
gitlab:
image: gitlab/gitlab-ce:latest
restart: always
hostname: 'localhost'
volumes:
- gitlab_etc:/etc/gitlab
- gitlab_log:/var/log/gitlab
- gitlab_opt:/var/opt/gitlab
ports:
- "80:80"
- "22:22"
volumes:
gitlab_etc:
external: true
gitlab_log:
external: true
gitlab_opt:
external: true
はじめの動作確認
めっちゃ初期化処理が走る。
しばらく待った後、 http://localhost/
に接続して、 GitLab が表示されることを確認。
root の初期パスワード設定画面になっているはずなので、設定する。
root のパスワード設定がうまくいかなかった場合
(手順再確認したらうまくいった。再現条件不明)
下記 HowTo で、 root のパスワードを更新することで、 root ログインできた。
How to reset your root password | GitLab
$ docker-compose exec gitlab /bin/bash
$ gitlab-rails console production
-------------------------------------------------------------------------------------
Gitlab: 10.8.4 (2268d0c)
Gitlab Shell: 7.1.2
postgresql: 9.6.8
-------------------------------------------------------------------------------------
Loading production environment (Rails 4.2.10)
irb(main):001:0> user = User.where(id: 1).first
=> #<User id:1 @root>
irb(main):006:0> user.password = 'PASSWORD'
=> "PASSWORD"
irb(main):007:0> user.password_confirmation = 'PASSWORD'
=> "PASSWORD"
irb(main):008:0> user.save!
Enqueued ActionMailer::DeliveryJob (Job ID: 1325655d-b7d4-4a34-9840-ba93a7dfb968) to Sidekiq(mailers) with arguments: "Devise
Mailer", "password_change", "deliver_now", gid://gitlab/User/1
=> true
ユーザーとプロジェクト作ってこのドキュメントを登録
ユーザーとプロジェクトの作成は割愛。
git init
git add .
git commit -m 'Initial Commit'
git remote add origin git@localhost:mikoto2000/HowToUseGitLabDockerImage.git
ok.
ポートを変える
docker-compose.yml
を修正
version: '3'
services:
gitlab:
image: gitlab/gitlab-ce:latest
restart: always
hostname: 'localhost'
volumes:
- gitlab_etc:/etc/gitlab
- gitlab_log:/var/log/gitlab
- gitlab_opt:/var/opt/gitlab
environment:
GITLAB_OMNIBUS_CONFIG: |
external_url 'http://localhost:8160/'
gitlab_rails['gitlab_shell_ssh_port'] = 8022
ports:
- "8160:8160"
- "8022:22"
volumes:
gitlab_etc:
external: true
gitlab_log:
external: true
gitlab_opt:
external: true
environment
のGITLAB_OMNIBUS_CONFIG
を追加external_url
: Web ページ内で、自身へのリンクとして使用される URL を指定。待ち受けポートも、ここで指定されたものに変えてくれるgitlab_rails['gitlab_shell_ssh_port']
: Web ページ内で、自身へ SSH アクセスするための URL として使用されるポートを指定。 SSH の待ち受けポートを変更してくれるわけではない
ports
を更新- “8160:8160” : Docker コンテナの 8160 ポートをホストの 8160 にマッピング
- “8022:22” : Docker コンテナの 22 ポートをホストの 8022 にマッピング
コンテナ再起動
docker-compose restart gitlab
だと docker-compose.yml
の修正が反映されなかったので、 stop
start
した。
動作確認
http://localhost:8160
にアクセスする。
Project -> Detail に書いてある HTTP と SSH の URL に、指定したポートが反映されてることを確認する。
HTTPS 化する
サーバ用の鍵と証明書を作成
ここの通りに作業を行う。
OpenSSL で CA と証明書を作る - mikoto2000 の日記
作成した鍵と証明書をコンテナにコピー
# 鍵を入れるディレクトリを作成
docker-compose exec gitlab /bin/bash
mkdir -p /etc/gitlab/ssl
chmod 700 /etc/gitlab/ssl
exit
# コンテナ名確認
docker ps
# 確認したコンテナに、ファイルをコピー
docker cp ./server_01.crt gitlab_gitlab_1:/etc/gitlab/ssl
docker cp ./server_01.key gitlab_gitlab_1:/etc/gitlab/ssl
docker-compose.yml
を更新
version: '3'
services:
gitlab:
image: gitlab/gitlab-ce:latest
restart: always
hostname: 'server_01'
volumes:
- gitlab_etc:/etc/gitlab
- gitlab_log:/var/log/gitlab
- gitlab_opt:/var/opt/gitlab
environment:
GITLAB_OMNIBUS_CONFIG: |
external_url 'https://server_01:443/'
nginx['redirect_http_to_https'] = true
nginx['redirect_http_to_https_port'] = 80
gitlab_rails['gitlab_shell_ssh_port'] = 8022
ports:
- "80:80"
- "443:443"
- "8022:22"
volumes:
gitlab_etc:
external: true
gitlab_log:
external: true
gitlab_opt:
external: true
external_url
をhttps://server_01:8160/
に修正- プロトコルを
https
に修正 - ここのホスト名と、
/etc/gitlab/ssh
に格納した鍵・証明書のファイル名を一致させなければならない(一致させたくない場合は別途設定が必要らしいが未調査)
- プロトコルを
external_url
に合わせてhostname
を変更nginx['redirect_http_to_https']
,nginx['redirect_http_to_https_port']
で、 http 接続してきた人を https にリダイレクトするように設定
コンテナ再起動
docker-compose restart gitlab
だと docker-compose.yml
の修正が反映されなかったので、 stop
start
した。
hosts ファイル修正
hosts ファイルに、今回作ったサーバー名を追加。
127.0.0.1 server_01
接続確認
http://server_01/
にアクセスして https
にリダイレクトされるのを確認。