TL;DR
- Gitlab-ceとRedmineを連携してコンテナ運用する仕組みを紹介します
- gitlab-ceをConoha-VM(上のdockerコンテナ)で運用する(HTTPS付き)の続編です
- Gistsにdocker-compose.ymlを掲載しています
- この記事から読み始めることもできます
つくるもの
- docker-composeで,Gitlab-CE(Omnibus Package),Redmine,リバースプロキシを稼働させます
- 反応速度向上のために,GitlabにRedis,Redmineにmemcachedを接続します.
- 上記2つはdocker-compose.ymlにコンテナとして稼働させます
- GitlabとRedmineで,1つのDBコンテナ(MySQL)にまとめます
- 1つのMySQLコンテナのデータベースの分けて使用することで,2つのサービスを共用します
準備
-
gitlab-ceをConoha-VM(上のdockerコンテナ)で運用する(HTTPS付き)を参考に,以下の作業を実施します
- docker-comopseを含むDockerの実行環境
- LetsEncryptoでのSSLワイルドカード証明書(fullchain.pem, privkey.pem)の取得方法は上記記事をご覧ください
- redmine用のサブドメインと,gitlab用のサブドメインから,当該VMのグローバルIPが引けるように,DNSへの名前登録をします
docker-compose.ymlの構成
- sameersbn氏が提供しているDockerイメージを組み合わせて作ります
- リクエストURIで処理を振り分けるリバースプロキシをnginx公式イメージで作ります
- SSLなどのを含めた設定ファイルは別途nginx.confを作ってマウントします
docker-compose.ymlの内容
- コンテナの立ち上げ方法を紹介します
- 基本的にはDockerHubで配布されているDockerイメージの組み合わせですが,1つのdocker-compose.ymlにまとめる上で適用した修正事項を説明します
- Gistsにdocker-compose.ymlを掲載していますので,
git clone
して必要な部分を修正してください
dockerコンテナの立ち上げ
- project001-docker-compose.ymlと同じディレクトリに,リバースプロキシ設定(nginx.conf),証明書ファイル(fullchain.pem,privkey.pem)を置いてください
- リバースプロキシされてリクエストが転送されるホストは,
gitlab:80, redmine:80
です - [gitlab-ceをConoha-VM(上のdockerコンテナ)で運用する(HTTPS付き)]に参考にできるnginx.confを掲載しています
- リバースプロキシされてリクエストが転送されるホストは,
-
/srv/docker/
に不揮発ボリュームが格納されます
git clone https://gist.github.com/88ba5b2b9a57ef73912e3872ff978452.git project
cd project
cp <path>/{nginx.conf,fullchain.pem,privkey.pem} .
docker-compose -f project001-docker-compose.yml
RedmineのDBをMySQLに変更
- Redmineが使用するデータベース(DockerhubデフォルトではPostgreSQL)を,MySQLに変更します
- 環境変数DB_ADAPTERに,
mysql2
を指定すると,MySQLを使用するようになります - MySQLコンテナの名前を
mysql
にすることにして,depends_on
ディレクティブでリンクします - データベース名を
redmine_production
にしておきます
- 環境変数DB_ADAPTERに,
redmine:
image: sameersbn/redmine:4.0.3-1
restart: always
depends_on:
- memcached-redmine
- mysql
...<snip>...
environment:
- TZ=Asia/Tokyo
- DB_ADAPTER=mysql2
- DB_HOST=mysql
- DB_USER=dbuser
- DB_PASS=dbpass
- DB_NAME=redmine_production
GitlabのDBをMySQLに変更
- 前節のRedmineと同様に,GitlabのDBもPostgreSQLからMySQLに変更します.
- 環境変数はRedmineと同じものを設定します
- データベース名を
gitlabhq_production
にしておきます
gitlab:
restart: always
image: sameersbn/gitlab:11.10.4
depends_on:
- redis-gitlab
- mysql
.....<snip>.....
environment:
- DEBUG=false
- DB_ADAPTER=mysql2
- DB_HOST=mysql
- DB_PORT=3306
- DB_USER=dbuser
- DB_PASS=dbpass
- DB_NAME=gitlabhq_production
サービスが接続するMySQLコンテナの作成
- 前節までで設定を記述したMySQLのコンテナを作成します
-
ポイント :2つのコンテナからデータベースを分けて使用されるので,2つのデータベースを作る必要があります.そのため,
DB_NAME
を2つ,カンマ区切りで記述します
-
ポイント :2つのコンテナからデータベースを分けて使用されるので,2つのデータベースを作る必要があります.そのため,
mysql:
restart: always
image: sameersbn/mysql:5.7.24
environment:
- DB_USER=dbuser
- DB_PASS=dbpass
- DB_NAME=redmine_production,gitlabhq_production
volumes:
- /srv/docker/mysql:/var/lib/mysql:Z
動作確認
-
docker-compose up -d
でコンテナを立ち上げます -
docker ps -a
でコンテナ情報を見ると,以下のように6個のコンテナが立ち上がります
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
XXXXXXXXXXX0 sameersbn/redmine:4.0.3-1 "/sbin/entrypoint.sh…" 3 seconds ago Up 2 seconds 80/tcp, 443/tcp project_redmine_1
XXXXXXXXXXX1 sameersbn/gitlab:11.10.4 "/sbin/entrypoint.sh…" 4 seconds ago Up 2 seconds 80/tcp, 443/tcp, 0.0.0.0:10022->22/tcp project_gitlab_1
XXXXXXXXXXX2 sameersbn/redis:4.0.9-1 "/sbin/entrypoint.sh…" 5 seconds ago Up 3 seconds 6379/tcp project_redis-gitlab_1
XXXXXXXXXXX3 sameersbn/memcached:1.5.6-1 "/sbin/entrypoint.sh…" 5 seconds ago Up 3 seconds 11211/tcp, 11211/udp project_memcached-redmine_1
XXXXXXXXXXX4 nginx:1.15.8 "nginx -g 'daemon of…" 5 seconds ago Up 2 seconds 80/tcp, 0.0.0.0:443->443/tcp project_rev_1
XXXXXXXXXXX5 sameersbn/mysql:5.7.24 "/sbin/entrypoint.sh…" 5 seconds ago Up 3 seconds 3306/tcp project_mysql_1
- リバースプロキシに設定したURLにアクセスして,gitlab, redmineに接続できれば完成です
- メモリを比較的食うので,注意してください(メモリ4GBだと足りなくなると思われます)
- gitlabが2GBくらい
- redmineとmysqlがそれぞれ200MBくらい