TL;DR
- gitlabとredmineをdocker-composeで運用するとなかなか面倒なので,1つのドメイン(サブドメイン無し)でサブディレクトリ運用できるようにします
やりたいこと
- この記事でやりたいことは,以下のことです
-
https://gitlab.mydomain
やhttps://redmine.mydomain
のようになっている状況を,https://mydomain/gitlab
やhttps://mydomain/redmine
で使えるように変更したい
-
- メリット : SSL証明書をletsencryptで取得している場合,ワイルドカード証明書は更新の都度,DNSの設定を修正する必要があるので面倒ですが,ホストが決まっているように(外部からは)見えるので,通常の更新手続きが使えます
- デメリット : サブディレクトリ運用技術が枯れていない(gitlabなど)サービスで,不具合が発生する可能性があります
やったこと
- gitlab, redmineコンテナに環境変数の追加
- nginxでのリバースプロキシ設定の修正
gitlab, redmineコンテナの環境変数の追加
-
Gitlab-CEとRedmineを連携してdockerコンテナで運用するの記事で作成した
docker-compose.yml
のコンテナの環境変数設定に,以下のようにRELATIVE_URL_ROOT
に,運用したいサブディレクトリ名を追加します- リバースプロキシで振り分けるだけだと,サービス内部でのリクエストのやりとりにより,不具合が発生します
redmine:
# .....<snip>.....
environment:
# .....<snip>.....
- REDMINE_RELATIVE_URL_ROOT=/redmine
# .....<snip>.....
gitlab:
# .....<snip>.....
environment:
# .....<snip>.....
- GITLAB_RELATIVE_URL_ROOT=/gitlab
リバースプロキシ設定
- nginx.confのサブディレクトリでアクセスするコンテナを,下記のように振り分ける処理を記述します
- ドメインが1つになるので,
default_server
とserver_name
をデフォルトに設定します - サブディレクトリ運用するようになったコンテナにそのままの形でプロキシされるようにします
- ドメインが1つになるので,
server {
listen 443 ssl default_server;
server_name _;
# ...<snip>...
location /redmine {
proxy_pass http://redmine/redmine;
}
location /gitlab {
proxy_pass http://gitlab/gitlab;
}
}
動作確認
- サービスをゼロから立て直したほうが無難です(サブドメインからサブディレクトリに運用が変わるので,既存のデータ内にあるURLは使えなくなります)
# 不揮発ボリュームを削除する(必要があればバックアップをとっておく)
# sudo rm -rf /srv/docker/{gitlab,redmine,mysql}
docker-compose up -d
Creating network "project_default" with the default driver
Creating project_mysql_1 ... done
Creating project_memcached-redmine_1 ... done
Creating project_redis-gitlab_1 ... done
Creating project_gitlab_1 ... done
Creating project_redmine_1 ... done
Creating project_rev_1 ... done
-
https://<URL>/gitlab
,https://<URL>/redmine
にアクセスして,サービスが稼働していることを確認します.