LoginSignup
8
17

More than 5 years have passed since last update.

RedmineとGitLabをLet's Encrypt(https-portal)を使用しDocker上に構築する

Last updated at Posted at 2018-02-05

はじめに

以下サイト様などを参考にさせていただきました。
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ファイル以外はコピペで行ける、、はず。

letsencrypt/docker-compose.yml
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
redmine/docker-compose.yml
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
gitlab/docker-compose.yml
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
start-up.sh
#!/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
shut-down.sh
#!/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
.env
# 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」コマンドでネットワーク作成 -> 同一ネットワークへぶら下げる事で対応する事とした。

redmineコンテナからgitlabコンテナへの疎通確認
$ 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の連携については、時間が取れ次第書く予定。

8
17
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
17