はじめに
以下サイト様などを参考にさせていただきました。
docker で全自動 Let's encrypt
目的
何か作ろうと思い立つ -> レンタルのVPSサーバに立てていたRedmineとGitLabを壊して再構築 -> 熱が冷める -> 何を作ろうとしていたか忘れる の生産性ゼロの無限ループからの脱却
環境
- Ubuntu 16.04 on さくらVPS
※ DTIだとカーネルバージョン低すぎてdocker使えない問題があったためさくらへ引っ越し
事前準備
docker/docker-composeのインストール
公式サイトなどを参考にインストールする。
ユーザ権限でのdocker実行・コマンド補完等も設定しておくと便利。
ドメイン取得
以前はフリーのサブドメイン取得サービス使用していたがだがしかし、サブドメインだとLet's Encryptの週5回制限に引っかかるため、お名前.comで独自ドメイン取得。
Redmine用とGitLab用のサブドメイン(Aレコード)を取得し、ホストIPアドレスに割り当てておく。
使用Dockerイメージ一覧 (2018/02/05現在)
REPOSITORY | TAG | IMAGE ID |
---|---|---|
sameersbn/redmine | latest | c80277c852be |
sameersbn/mysql | latest | b3adeabf2484 |
sameersbn/gitlab | 10.4.2 | dc07b7d00db8 |
sameersbn/redis | latest | d8f7b0e07097 |
sameersbn/postgresql | 9.6-2 | 7f79690e67e0 |
steveltn/https-portal | 1 | 96ff11c6fcc4 |
ファイル構成
├── letsencrypt/
│ └── docker-compose.yml
│
├── gitlab/
│ └── docker-compose.yml
│
├── redmine/
│ └── docker-compose.yml
│
├── start-up.sh # 起動スクリプト
│
├── shut-duwn.sh # 停止スクリプト
│
└── .env # 環境変数定義
ファイルの中身
少し長くなるが、以下各ファイルの詳細。
基本的に.envファイル以外はコピペで行ける、、はず。
version: '2'
services:
https-portal:
image: steveltn/https-portal:1
ports:
- '80:80'
- '443:443'
restart: always
volumes:
- /srv/docker/https-portal/certs:/var/lib/https-portal
- /var/run/docker.sock:/var/run/docker.sock:ro
environment:
STAGE: 'production' # 'production' 'staging' 'local'
FORCE_RENEW: 'true'
networks:
- default
- redmine_default
- gitlab_default
networks:
redmine_default:
external: true
gitlab_default:
external: true
version: '2'
services:
redmine-mysql:
restart: always
image: sameersbn/mysql:latest
environment:
- DB_USER=${REDMINE_DB_USER}
- DB_PASS=${REDMINE_DB_PASS}
- DB_NAME=redmine_production
volumes:
- /srv/docker/redmine/mysql:/var/lib/mysql
redmine:
restart: always
image: sameersbn/redmine:latest
container_name: redmine
depends_on:
- redmine-mysql
networks:
- default
- local-link
volumes:
- /srv/docker/redmine/redmine:/home/redmine/data
environment:
- VIRTUAL_HOST=${REDMINE_VIRTUAL_HOST}
- TZ=Asia/Tokyo
- DB_ADAPTER=mysql2
- DB_HOST=redmine-mysql
- DB_PORT=3306
- DB_USER=${REDMINE_DB_USER}
- DB_PASS=${REDMINE_DB_PASS}
- DB_NAME=redmine_production
- REDMINE_PORT=
- REDMINE_HTTPS=false
- REDMINE_RELATIVE_URL_ROOT=
- REDMINE_SECRET_TOKEN=
- REDMINE_SUDO_MODE_ENABLED=false
- REDMINE_SUDO_MODE_TIMEOUT=15
- REDMINE_CONCURRENT_UPLOADS=2
- REDMINE_BACKUP_SCHEDULE=
- REDMINE_BACKUP_EXPIRY=
- REDMINE_BACKUP_TIME=
- SMTP_ENABLED=true
- SMTP_METHOD=smtp
- SMTP_DOMAIN=smtp.gmail.com
- SMTP_HOST=smtp.gmail.com
- SMTP_PORT=587
- SMTP_USER=${SMTP_USER}
- SMTP_PASS=${SMTP_PASS}
- SMTP_STARTTLS=true
- SMTP_AUTHENTICATION=login
- IMAP_ENABLED=false
- IMAP_HOST=imap.gmail.com
- IMAP_PORT=993
- IMAP_USER=${IMAP_USER}
- IMAP_PASS=${IMAP_PASS}
- IMAP_SSL=true
- IMAP_INTERVAL=30
networks:
local-link:
external: true
version: '2'
services:
gitlab-redis:
restart: always
image: sameersbn/redis:latest
volumes:
- /srv/docker/gitlab/redis:/var/lib/redis:Z
gitlab-postgresql:
restart: always
image: sameersbn/postgresql:9.6-2
volumes:
- /srv/docker/gitlab/postgresql:/var/lib/postgresql:Z
environment:
- DB_USER=${GITLAB_DB_USER}
- DB_PASS=${GITLAB_DB_PASS}
- DB_NAME=gitlabhq_production
- DB_EXTENSION=pg_trgm
gitlab:
restart: always
image: sameersbn/gitlab:10.4.2
container_name: gitlab
depends_on:
- gitlab-redis
- gitlab-postgresql
networks:
- default
- local-link
volumes:
- /srv/docker/gitlab/gitlab:/home/git/data:Z
environment:
- VIRTUAL_HOST=${GITLAB_VIRTUAL_HOST}
- DEBUG=false
- DB_ADAPTER=postgresql
- DB_HOST=gitlab-postgresql
- DB_PORT=5432
- DB_USER=${GITLAB_DB_USER}
- DB_PASS=${GITLAB_DB_PASS}
- DB_NAME=gitlabhq_production
- REDIS_HOST=gitlab-redis
- REDIS_PORT=6379
- TZ=Asia/Tokyo
- GITLAB_TIMEZONE=Tokyo
- GITLAB_HTTPS=true
- SSL_SELF_SIGNED=false
- GITLAB_HOST=${GITLAB_HOST}
- GITLAB_PORT=
- GITLAB_SSH_PORT=
- GITLAB_RELATIVE_URL_ROOT=
- GITLAB_SECRETS_DB_KEY_BASE=long-and-random-alphanumeric-string
- GITLAB_SECRETS_SECRET_KEY_BASE=long-and-random-alphanumeric-string
- GITLAB_SECRETS_OTP_KEY_BASE=long-and-random-alphanumeric-string
- GITLAB_NOTIFY_ON_BROKEN_BUILDS=true
- GITLAB_NOTIFY_PUSHER=false
- GITLAB_EMAIL=${GITLAB_EMAIL}
- GITLAB_EMAIL_REPLY_TO=${GITLAB_EMAIL_REPLY_TO}
- GITLAB_INCOMING_EMAIL_ADDRESS=${GITLAB_INCOMING_EMAIL_ADDRESS}
- GITLAB_BACKUP_SCHEDULE=daily
- GITLAB_BACKUP_TIME=01:00
- SMTP_ENABLED=true
- SMTP_DOMAIN=smtp.gmail.com
- SMTP_HOST=smtp.gmail.com
- SMTP_PORT=587
- SMTP_USER=${SMTP_USER}
- SMTP_PASS=${SMTP_PASS}
- SMTP_STARTTLS=true
- SMTP_AUTHENTICATION=login
- IMAP_ENABLED=false
- IMAP_HOST=imap.gmail.com
- IMAP_PORT=993
- IMAP_USER=${IMAP_USER}
- IMAP_PASS=${IMAP_PASS}
- IMAP_SSL=true
- IMAP_STARTTLS=false
networks:
local-link:
external: true
#!/bin/bash
source .env
# create local network
docker network create local-link
# redmine
docker-compose -f redmine/docker-compose.yml up -d
# gitlab
docker-compose -f gitlab/docker-compose.yml up -d
# https-portal
docker-compose -f letsencrypt/docker-compose.yml up -d
#!/bin/bash
source .env
# https-portal
docker-compose -f letsencrypt/docker-compose.yml down
# gitlab
docker-compose -f gitlab/docker-compose.yml down
# redmine
docker-compose -f redmine/docker-compose.yml down
# remove local network
docker network rm local-link
# Redmine settings
REDMINE_VIRTUAL_HOST=Redmine用のサブドメイン
REDMINE_DB_USER=user
REDMINE_DB_PASS=password
# GitLab settings
GITLAB_VIRTUAL_HOST=GitLab用のサブドメイン
GITLAB_DB_USER=user
GITLAB_DB_PASS=password
GITLAB_HOST=GitLab用のサブドメイン
GITLAB_EMAIL=hogehoge@example.com
GITLAB_EMAIL_REPLY_TO=hogehoge@example.com
GITLAB_INCOMING_EMAIL_ADDRESS=hogehoge@example.com
# Common settings
SMTP_USER=hogehoge@example.com
SMTP_PASS=password
IMAP_USER=hogehoge@example.com
IMAP_PASS=password
起動・停止
起動コマンド
$ ./start-up.sh
https://Redmine用のサブドメイン と https://GitLab用のサブドメイン でアクセスできれば成功!
停止コマンド
$ ./shut-down.sh
変数の外だしについて
始めは正攻法?に「env_file」で進めていたが、「変数の置き換え」なるものを発見!こちらを採用。
「source .env」も起動スクリプトに書いておく方式としてみた。
local-link
自分が知らないだけの可能性が高いが、docker-composeファイルが分かれていると各コンテナは同一ネットワークではないらしく、各コンテナ間でのサービス名でのアクセスができなかった。
折角なのでRedmineとGitLabは連携したいので、「docker network create」コマンドでネットワーク作成 -> 同一ネットワークへぶら下げる事で対応する事とした。
$ docker exec -it redmine bash
root@***:/home/redmine/redmine# ping gitlab -c 1
PING gitlab (172.18.0.3) 56(84) bytes of data.
64 bytes from gitlab.local-link (172.18.0.3): icmp_seq=1 ttl=64 time=0.241 ms
上記環境下でのRedmineとGitLabの連携については、時間が取れ次第書く予定。