Redmineを使ってAI管理、スケジュール管理をしたいと思い、DockerでRedmineを立ち上げることにしました。
構築手順を備忘録として残しておきます。
環境は以下です。
- ConoHa VPS (メモリ 1GB/CPU 2Core/SSD 100GB)
- Ubuntu 20.04.1 LTS
- Docker: 19.03.13
- Docker Compose: 1.27.4
- redmine: latest (2020/9/27 執筆時点では、4.1.1が最新)
- postgres: latest (2020/9/27 執筆時点では、13.0が最新)
目次
はじめに
DockerでRedmineを立ち上げるために事前調査をした結果、以下のような構築方針で作成することにしました。
【構築方針】
- RedmineのDockerコンテナはredmine(公式)[1]を使うことにする。
- Redmineのバージョンは4.1系を使うことにする。
- データベースはPostgreSQLを使い、dockerコンテナはpostgres(公式)[4]を使うことにする。
- 構築環境は「ConoHa VPS + Ubuntu」とする。
- SSL対応はSteveLTN/https-portal[2]コンテナを使う。
- 大人数で使うわけではないので、Memcachedは対応しない。
- Gメール設定で通知できるようにする。
なお、事前調査は「DockerでRedmineを立ち上げるための事前調査」でまとめているので、よろしければご覧ください。[3]
ConoHa VPSでサーバ構築する
本記事では、ConoHa VPS上に「Ubuntu 18.04.4 LTS」を立ち上げ、その上にDocker、Docker Composeを構築しています。Linux環境であれば、本記事の手順は有効だと思いますので、ご自分のLinux環境がある場合は、この章は飛ばしていただいて結構です。
ConoHa VPSは初期費用不要で月に数百円で利用できる仮想サーバのサービスです。
以下の記事でConoHa VPSにUbuntuを構築する方法をまとめたので、よろしければご覧ください。[5]
SSH接続するので、ドメインがあると良いです。
ConoHa VPSにドメインを設定する方法もまとめたので、よろしければご覧ください。[6]
「Docker + Docker Compose」環境を構築する
「DockerとDocker Compose」をインストールします。
以下の記事で、インストール方法をまとめたので、よろしければご覧ください。[7]
「https-portal + Redmine + postgreSQL」環境を構築する
構築の流れとしては以下です。
- ネットワーク構成を考える
- フォルダ構成を考える
- webサーバ(https-portal)のdocker-compose.ymlを作成する
- appサーバ(Redmine + postgreSQL)のdocker-compose.ymlを作成する
- 環境ファイルを作成する
- メール設定用のconfiguration.ymlを作成する
- DNSサーバでRedmineとpostgreSQLのホスト名を設定する
- appサーバ⇒webサーバという順番でコンテナを起動する
ネットワーク構成を考える
ネットワーク構成は以下の図のようにしました。
- コンテナとしては、https-portalコンテナ、redmineコンテナ、postgresコンテナを作成
- https-portalコンテナはWebアクセスのために、ホスト側と80番(http)、443番ポート(https)を共有
- web_netというコンテナネットワークを作成し、各コンテナ間を接続
- web/docker-compose.ymlでhttps-portalコンテナを生成、app/docekr-copose.ymlでredmineコンテナとpostgresコンテナを生成
- https-portalコンテナはホスト側のnginx/ssl_certsディレクトリを共有
- redmineコンテナはホスト側のredmine/plugins, redmine/themes, redmine/configディレクトリを共有
- postgresコンテナはホスト側のdb/initdb, db/dbdataディレクトリを共有
フォルダの構成を考える
以下のような構成としました。
事前にmkdir
コマンドでディレクトリを作成してください。
myenv
|-- app
| |-- db
| | |-- dbdata
| | `-- initdb
| |-- docker-compose.yml
| `-- redmine
│ ├── config
│ │ └── configuration.yml
| |-- plugins
| `-- themes
`-- web
|-- docker-compose.yml
`-- nginx
`-- ssl_certs
webサーバ(https-portal)のdocker-compose.ymlを作成する
webサーバとして、https-portalコンテナを立ち上げるdocker-compose.ymlを作成します。
【myenv/web/docker-compose.yml】
version: '3.7'
services:
web:
image: steveltn/https-portal:1
container_name: web
restart: always
volumes:
- ./nginx/ssl_certs:/var/lib/https-portal
networks:
web_net:
ipv4_address: ${HTTPS_PORTAL_NET_IP4_ADDR}
ports:
- '80:80'
- '443:443'
env_file:
- .env
environment:
DOMAINS: >-
${HOSTNAME_REDMINE}.${SITE_DOMAIN} -> http://redmine:${REDMINE_DOCKER_PORT}/,
STAGE: 'staging'
networks:
web_net:
external: true
services.web.environment.STAGE
はstaging
としています。すべての構築が完了し、問題ないことが確認できたら、production
に変更します。
appサーバ(Redmine + postgreSQL)のdocker-compose.ymlを作成する
appサーバとして、redmineコンテナとpostgresコンテナを立ち上げるdocker-compose.ymlを作成します。
【myenv/app/docker-compose.yml】
version: '3.8'
services:
redmine:
image: redmine:latest
container_name: ${APP_CONTAINER_NAME}
restart: always
volumes:
- ./redmine/plugins:/usr/src/redmine/plugins
- ./redmine/themes:/usr/src/redmine/public/themes
- ./redmine/config/configuration.yml:/usr/src/redmine/config/configuration.yml
networks:
web_net:
ipv4_address: ${APP_IP4_ADDR}
expose:
- ${APP_DOCKER_PORT}
env_file:
- .env
environment:
- REDMINE_DB_POSTGRES=reddb
- REDMINE_DB_DATABASE=${DB_NAME}
- REDMINE_DB_USERNAME=${DB_USER}
- REDMINE_DB_PASSWORD=${DB_PASSWORD}
- TZ=${DB_TZ}
depends_on:
- reddb
reddb:
image: postgres:latest
container_name: ${DB_CONTAINER_NAME}
restart: always
volumes:
- ./db/initdb:/docker-entrypoint-initdb.d
- ./db/dbdata:/var/lib/postgresql/data
networks:
web_net:
ipv4_address: ${DB_IP4_ADDR}
expose:
- ${DB_DOCKER_PORT}
env_file:
- .env
environment:
- POSTGRES_DB=${DB_NAME}
- POSTGRES_USER=${DB_USER}
- POSTGRES_PASSWORD=${DB_PASSWORD}
- TZ=${DB_TZ}
command: --port=${DB_DOCKER_PORT}
networks:
web_net:
name: web_net
driver: bridge
ipam:
driver: default
config:
- subnet: ${NET_SUBNET}
環境ファイルを作成する
秘密情報や環境依存性があるものは、環境ファイルで設定します。
docker-composeは同じディレクトリに.envというファイルを生成すると勝手に読み取ってくれるので、web用とapp用の2つの.envを作成することにします。
【myenv/web/.env】
HTTPS_PORTAL_NET_IP4_ADDR=192.168.1.200
SITE_DOMAIN=[環境に合わせる]
HOSTNAME_REDMINE=redmine
HOSTNAME_REDMINE_DB=db_redmine
REDMINE_DOCKER_PORT=3000
REDDB_DOCKER_PORT=5432
SITE_DOMAIN
はご自分のサイトのドメイン名を設定してください。
【myenv/app/.env】
APP_CONTAINER_NAME=redmine
APP_IP4_ADDR=192.168.1.11
APP_DOCKER_PORT=3000
DB_CONTAINER_NAME=db_redmine
DB_IP4_ADDR=192.168.1.12
DB_DOCKER_PORT=5432
DB_USER=[環境に合わせる]
DB_PASSWORD=[環境に合わせる]
DB_NAME=REDMINE_DB
DB_TZ=sia/Tokyo
NET_SUBNET=192.168.1.0/24
- DB_USER、DB_PASSWORDはご自分の環境に合わせてください。
メール設定用のconfiguration.ymlを作成する
メールの設定はredmineコンテナの「 config/configuration.yml
」で設定します。「 config/configuration.yml
」はホスト側の「myenv/app/redmine/config/configuration.yml」と共有しているので、そちらの設定を行います。
Gmailのアカウント当てにメールを送信するには、以下のように設定します。[10],[11],[12]
【myenv/app/redmine/config/configuration.yml】[10],[11],[12]
production:
email_delivery:
delivery_method: :smtp
smtp_settings:
enable_starttls_auto: true
address: "smtp.gmail.com"
port: 587
domain: "smtp.gmail.com"
authentication: :plain
user_name: "xxxx@gmail.com"
password: "xxxpassword"
user_name
にGmailメールアドレス、password
にGmailのパスワードを設定します。password
は後でGメールのアプリパスワードを設定しますので、ここでは適当な値で問題ないです。
DNSサーバでRedmineとpostgreSQLのホスト名を設定する
以下は、ConoHa VPSの例ですが、DNSサーバにRedmineとpostgreSQLのホスト名を設定します。
これにより、「ホスト名:サイトのドメイン」へのアクセスはサイトのIPアドレスにアクセスしに行きます。https-portalコンテナは、ホストと80、443ポートを共有しているため、サイトのIPアドレスへの通信はhttps-portalコンテナに到達します。
https-portalはNGINXを内蔵しており、アクセスされたホスト名から、適切なコンテナに中継をします。今回の設定では、https-portalのdocker-compose.ymlで設定した通り、「redmine.サイトのドメイン」はredeminコンテナへ中継されます。
appサーバ⇒webサーバという順番でコンテナを起動する
appサーバのコンテナを起動させる
~/myenv/app
ディレクトリに移動して、以下のコマンドを実行することで、appサーバのコンテナを起動させます。
$ cd ~/myenv/app
$ docker-compose up
以下のように表示されたらOKです。
redmine | [2020-09-29 23:20:41] INFO WEBrick 1.4.2
redmine | [2020-09-29 23:20:41] INFO ruby 2.6.6 (2020-03-31) [x86_64-linux]
redmine | [2020-09-29 23:20:41] INFO WEBrick::HTTPServer#start: pid=1 port=3000
※もしここで、「FATAL: database "DBコンテナ名" does not exist」というエラーが出てredmineコンテナの起動が失敗していた場合は、以下の方法を試してみてください。
> posgresコンテナ初回起動時に「FATAL: database "DBコンテナ名" does not exist」が出たときの対処法
これで、redmineコンテナが問題なく起動することを確認出来きました。
ただし、このままでは、appサーバのコンテナの出力がターミナルソフトとなっており、ターミナルソフトが操作できなくなってしまうので、appサーバのコンテナをバックグランドで起動させることにします。
一度「Ctrl+c
」でappサーバのコンテナを停止させます。
そして、再度以下のコマンドを実行します。
$ cd ~/myenv/app
$ docker-compose up -d
docker-compose up
コマンドに-d
オプションをつけることで、バックグラウンドでコンテナを起動させることができます。
webサーバのコンテナを起動させる
appサーバの起動方法と同じです。~/myenv/web
ディレクトリに移動して、以下のコマンドを実行することで、webサーバのコンテナを起動させます。
$ cd ~/myenv/web
$ docker-compose up
以下のように表示されたらOKです。
web | [services.d] starting services
web | [services.d] done.
appサーバのときと同様に、Ctrl+cでwebサーバのコンテナを停止させて、docker-compose up -dコマンドでwebサーバのコンテナをバックグラウンドで起動させます。
Redmineサーバにアクセスする
「https://redmine.サイトのドメイン」にブラウザからアクセスします。
アクセス成功すると、以下のようなRedmineのホーム画面が表示されるはずです。
注意:プライバシーエラーについて
「myenv/web/docker-compose.yml」の「services.web.environment.STAGE
」がstaging
のため、証明書がオレオレ証明書になっており、プライバシーエラーが出ます。
Redmineにアクセスすることができたら、「myenv/web/docker-compose.yml」の「services.web.environment.STAGE
」をproduction
に変更しておきましょう。production
に変更することで、プライバシーエラーが出なくなります。
Redmineの設定
Redmineの設定として、以下を実施しました。
- 初期設定
- メールの設定
初期設定
Redmineの初期設定は公式ページを参考にするとよいです。[9]
Gメールの設定
Gメールを使うには、2段階認証を有効にして、そのうえでRedmine向けにアプリパスワードを発行する必要があります。
詳しいやり方は、「Redmineの通知メールをGoogleのSMTPサーバーから発信する方法 | A1 Style」が分かりやすかったです。[12]
Redmine用のアプリパスワードを入手できたら、そのパスワードをconfig/configuration.yml
のpassword
に設定し、redmineコンテナを再起動させます。
【config/configuration.yml】
production:
email_delivery:
delivery_method: :smtp
smtp_settings:
enable_starttls_auto: true
address: "smtp.gmail.com"
port: 587
domain: "smtp.gmail.com"
authentication: :plain
user_name: "xxxx@gmail.com"
password: "xxxpassword"
password
は取得したGメールのアプリパスワードを設定します。
メールが設定できたかの確認は、「管理」→「設定」画面で「メール通知」タブを開き、画面左下の「テストメールを送信」で可能です。[10],[11],[12]
まとめ
RedmineをDockerコンテナで構築することができました。
この備忘録が皆様の参考になれば幸いです。
ConoHa上でDockerを導入したり、Webアプリを立ち上げたりした内容を以下の記事でまとめました。こちらもよろしければご覧になってください。
参考
[1] redmine(公式) | docker hub
[2] SteveLTN/https-portal | docker hub
[3] DockerでRedmineを立ち上げるための事前調査 | Create it Myself
[4] postgres(公式) | docker hub
[5] ConoHa VPSでサーバ構築する | Create it Myself
[6] ConoHa VPSにドメイン設定する | Create it Myself
[7] ConoHa VPS上にDocker環境を構築する | Create it Myself
[8] 公式Redmine+postgeSQL環境をdocker-composeで構築 | Qiita
[9] Redmineを使い始めるための初期設定 | Redmine.JP
[10] メール通知のためのconfiguration.ymlの設定 | Redmine.JP
[11] 【Redmine】メール通知を Gmail から送信する設定とテストメール送信方法 | ぴぐろぐ
[12] Redmineの通知メールをGoogleのSMTPサーバーから発信する方法 | A1 Style
広告
Dockerをやるなら以下の書籍がオススメです。
Dockerとは何か?から複数のコンテナを管理することができるDocker Compose、Kubernetesまでまとめられています。
ConoHa VPS
は初期費用不要で月に数百円で利用できる仮想サーバのサービスです。以下のような方には非常にオススメのサービスとなっています!
- 勉強がてらLinuxの環境をちょっと触ってみたい
⇒管理者権限が実行可能なLinuxサーバ環境が構築可能です! - スモールスタートでサービスを提供して、うまくいったら規模をスケールアップしたい
⇒後からメモリサイズやCPU数などのスケールアップ/スケールダウン可能です! - AWSやGCPなどのクラウドサービスは高いので、もっと安くサーバ構築したい
⇒初期費用なし、月数百円(1時間単位も可)で利用可能です!
以上!
コメント