要件
- VPSにRedmineをDockerベースで構築したい
- 既にbitnamiで構築済みのRedmineをDockerベースに移行したい
- httpsに対応してほしい
- Redmineのコンテナを複数立ち上げて、マルチドメインのRedmineを気軽に構築したい
上記要件が社内で出たので、構築した手順のメモ
参考にしたサイト
bitnami でインストールした Redmine を Docker に移設した
Docker上でnginx-proxy他を使ってSSL対応マルチドメインサーバ環境の構築
Docker Redmine(https/マルチサイト対応)環境構築手順
事前準備
事前実行コマンド
mkdir ~/work
mkdir ~/work/nginx
mkdir ~/work/redmine
nginx設定手順
~/work/nginx/docker-compose.ymlを下記内容で作成する
version: "2"
services:
nginx-proxy:
image: jwilder/nginx-proxy
container_name: nginx-proxy
privileged: true
ports:
- 80:80
- 443:443
volumes:
- /srv/docker/nginx-proxy-with-encrypt/certs:/etc/nginx/certs:ro
- /srv/docker/nginx-proxy-with-encrypt/htpasswd:/etc/nginx/htpasswd
- /etc/nginx/vhost.d
- /usr/share/nginx/html
- /var/run/docker.sock:/tmp/docker.sock:ro
- /srv/docker/nginx-proxy-with-encrypt/log:/var/log/nginx
networks:
- default
- ssl_proxy
restart: always
letsencrypt-nginx:
image: jrcs/letsencrypt-nginx-proxy-companion
container_name: letsencrypt-nginx
privileged: true
volumes:
- /srv/docker/nginx-proxy-with-encrypt/certs:/etc/nginx/certs:rw
- /var/run/docker.sock:/var/run/docker.sock:ro
volumes_from:
- nginx-proxy
restart: always
networks:
ssl_proxy:
external: true
ネットワークブリッジを新規作成
docker network create --driver bridge ssl_proxy
※初回のみで良い。
もし下記のようなエラーになったら、
Error response from daemon: Failed to Setup IP tables: Unable to enable SKIP DNAT rule: (iptables failed: iptables --wait -t nat -I DOCKER -i br-4d0938766655 -j RETURN: iptables: No chain/target/match by that name.
(exit status 1))
下記コマンドを実行
mv /var/lib/docker/network/files /tmp/docker-iptables-err && \
systemctl restart docker
docker-compose実行
cd ~/work/nginx/ && \
docker-compose up -d
Redmine設定手順
~/work/redmine/.envを下記内容で作成する
DOCK_REDMINE_USE_PORT=3000
DOCK_REDMINE_DB_PASS=sample
DOCK_REDMINE_DB_NAME=redmine
DOCK_REDMINE_DOMAIN=sample-redmine.com
DOCK_REDMINE_EMAIL=emailaddress
DOCK_REDMINE_VOLUME=/srv/docker/redmine/
- DOCK_REDMINE_USE_PORT・・・RedmineとDockerホストを接続するポート番号。サービスごとに固有のポート番号を割り振る。
- DOCK_REDMINE_DB_PASS・・・Redmineが使用するDBのルートパスワード。サービスごとに固有でなくても良い。
- DOCK_REDMINE_DB_NAME・・・Redmineが使用するDB名。サービスごとに固有でなくても良い。
- DOCK_REDMINE_DOMAIN・・・Redmineにアクセスする際のドメイン名。サービスごとに固有のドメインを割り振る。
- DOCK_REDMINE_EMAIL・・・Let's Encryptで使用するメアドのアカウント名。DOCK_REDMINE_EMAIL@DOCK_REDMINE_DOMAINのように連結される。
- DOCK_REDMINE_VOLUME・・・Redmineの各種フォルダをマッピングするパス名。マッピングされるフォルダ下記のとおり。サービスごとにパスを変える必要がある。
- files
- log
- plugins
- public/themes
~/work/redmine/docker-compose.ymlを下記内容で作成する
version: '3.5'
services:
redmine:
image: redmine
restart: always
ports:
- ${DOCK_REDMINE_USE_PORT}:3000
environment:
REDMINE_DB_MYSQL: db
REDMINE_DB_PASSWORD: ${DOCK_REDMINE_DB_PASS}
VIRTUAL_HOST: ${DOCK_REDMINE_DOMAIN}
VIRTUAL_PORT: ${DOCK_REDMINE_USE_PORT}
VIRTUAL_PROT: https
LETSENCRYPT_HOST: ${DOCK_REDMINE_DOMAIN}
LETSENCRYPT_EMAIL: ${DOCK_REDMINE_EMAIL}@${DOCK_REDMINE_DOMAIN}
LETSENCRYPT_TEST: "false"
volumes:
- ${DOCK_REDMINE_VOLUME}files:/usr/src/redmine/files
- ${DOCK_REDMINE_VOLUME}log:/usr/src/redmine/log
- ${DOCK_REDMINE_VOLUME}plugins:/usr/src/redmine/plugins
- ${DOCK_REDMINE_VOLUME}public/themes:/usr/src/redmine/public/themes
networks:
- default
- ssl_proxy
db:
image: mysql:5.7
command: mysqld --character-set-server=utf8 --collation-server=utf8_unicode_ci
restart: always
environment:
MYSQL_ROOT_PASSWORD: ${DOCK_REDMINE_DB_PASS}
MYSQL_DATABASE: ${DOCK_REDMINE_DB_NAME}
volumes:
- ${DOCK_REDMINE_VOLUME}mysql:/var/lib/mysql
networks:
ssl_proxy:
external: true
docker-compose実行
cd ~/work/redmine/ && \
docker-compose up -d
動作確認
docker exec -it nginx-proxy /bin/bash
Dockerコンテナ内で下記コマンド実行
cat /etc/nginx/conf.d/default.conf
DOCK_REDMINE_DOMAINに対するプロキシ及びSSLの情報が追加されていることを確認
※環境による可能性もあるが、証明書を取得するのに数十秒かかることもあるので、少し待ってから見に行くと良い
MySQLバックアップファイルのリストア
zcat ~/redmine_yyyy-mm-dd.sql.gz | docker exec -i redmine_db_1 mysql -psample redmine
redmine_db_1はターゲットとするコンテナの名前
-psampleはパスワード-pオプションの後に空白入れずにパスワードを入れる
Redmineバックアップファイルのリストア
cd /srv/docker/redmine/ && \
tar xf ~/redmine_yyyy-mm-dd.tar.gz
メール設定
configuration.ymlを適切に設定して、下記コマンド実行
docker cp ~/work/redmine/configuration.yml redmine_redmine_1:/usr/src/redmine/config/configuration.yml
configuration.yml設定例
外部SMTPサーバー使用例
email_delivery:
delivery_method: :smtp
smtp_settings:
address: "sample-redmine.com"
port: 587
domain: 'sample-redmine.com'
authentication: :login
user_name: 'test@sample-redmine'
password: 'password'
enable_starttls_auto: false
Gmail SMTPサーバー使用例
email_delivery:
delivery_method: :smtp
smtp_settings:
address: smtp.gmail.com
port: 587
domain: example.net
authentication: :login
user_name: sample@example.net
password: password
imagemagick_convert_command設定例
imagemagick_convert_command: /usr/bin/convert
imagemagick_convert_commandはRedmine公式イメージなら上記パスに格納されいる。
パスを確認するには下記コマンドを実行する
docker exec -it redmine_redmine_1 /bin/bash
which convert
dockerコンテナの再起動
cd ~/work/redmine/ && \
docker-compose restart