Redmineのオンプレミス構築には,
- MySQLやPostgreSQLなどのデータベース
- Redmine本体のインストール
- 依存ライブラリのインストール
などが必要であり,結構な手間がかかります.
Dockerを用いることで,Redmineの環境構築が簡単に行うことができます.
事前準備
Dockerのインストール
まずは,Dockerのインストールをします.
通常のDockerは公式サイトを参考にしてください.
Rootless Dockerに関しては,下記の記事にまとめています.
Dockerを用いたRedmineオンプレミス構築
Redmineの構築
下記のようなDocker Composeファイルを作成します.
docker-compose.yml
version: '3.1'
services:
redmine:
image: redmine:4.2.8-bullseye
restart: always
ports:
- 8080:3000
environment:
REDMINE_DB_POSTGRES: redmine-db
REDMINE_DB_DATABASE: redmine
REDMINE_DB_USERNAME: redmine_user
REDMINE_DB_PASSWORD: redmine_passwd
REDMINE_SECRET_KEY_BASE: supersecretkey
REDMINE_DB_PORT: 5432
volumes:
- vol_redmine:/usr/src/redmine/files
redmine-db:
image: postgres:14.5-bullseye
restart: always
ports:
- 5432:5432
environment:
POSTGRES_DB: redmine
POSTGRES_USER: redmine_user
POSTGRES_PASSWORD: redmine_passwd
volumes:
- vol_redmine_db:/var/lib/postgresql/data
volumes:
vol_redmine:
vol_redmine_db:
作成したファイルをもとにコンテナを作成し,起動します.
docker compose up -d
下記のように,RedmineとDBのコンテナがそれぞれ作成されます.
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
203f16f0b37c redmine:4.2.8-bullseye "/docker-entrypoint.…" 22 minutes ago Up 4 minutes 0.0.0.0:8080->3000/tcp, :::8080->3000/tcp root-redmine-1
6a1e9eb9557b postgres:14.5-bullseye "docker-entrypoint.s…" 22 minutes ago Up 4 minutes 0.0.0.0:5432->5432/tcp, :::5432->5432/tcp root-redmine-db-1
コンテナが作成されたらWebブラウザでRedmineアクセスします.同一のマシンであれば,localhost:8080
,外部からならIPアドレス(もしくはドメイン):8080
でアクセス可能です.
アクセスできると下記のような画面が表示されます.
右上の「Sign in」をクリックし,ログインします.
ユーザ名はadmin,初期パスワードもadminです.
ログインに成功すると,パスワードリセットが要求されるため適宜パスワードを変更します.
パスワードを変更後,アカウント設定をすれば完了です.
HTTPS化したRedmineの構築
上記のやり方でRedmineの構築が完了しましたが,通信が暗号化されておらず安全性に不安があります.
ここから先は,Redmineの接続をSSL/TLS証明書により通信を暗号化します.
SSL/TLS証明書を用いて暗号化するためには,下記の方法が考えられます.
- Redmineイメージから作成したコンテナ内にHTTPS化の設定を行う
- https-portalを用いて暗号化された通信にリダイレクトする
「Redmineイメージから作成したコンテナ内にHTTPS化の設定を行う」に関しては,SSL/TLSのDockerfileを作成する必要があります.また,ドメイン等の設定をするため,コンテナ内にアクセスして設定しないといけないため,コンテナ作成の自動化で少々大変な思いをします.
「https-portalを用いて暗号化された接続にリダイレクトする」に関しては,https-portal
というコンテナイメージを利用することで,通信を暗号化します.この方法では,Redmineイメージをそのまま使用することができるため,Docker Composeを使用することでコンテナ作成を自動化できます.
よって,この記事では「https-portalを用いて暗号化された接続にリダイレクトする」を採用します.
以下のようなDocker Composeファイルを用意するだけで完了です.
https-portalの詳細は,こちらを参照ください.
docker-compose.yml
version: '3.1'
services:
https-portal:
image: steveltn/https-portal:latest
ports:
- '80:80'
- '443:443'
restart: always
environment:
DOMAINS: 'redmine.local -> http://redmine:3000'
STAGE: local
volumes:
- https-data:/var/lib/https-portal
postgres:
image: postgres:latest
restart: always
volumes:
- postgres-data:/var/lib/postgresql/data
environment:
- 'POSTGRES_PASSWORD=password'
- 'POSTGRES_DB=redmine'
redmine:
image: redmine:latest
restart: always
volumes:
- redmine-data:/usr/src/redmine/files
ports:
- 8080:3000
environment:
- 'REDMINE_DB_POSTGRES=postgres'
- 'REDMINE_DB_DATABASE=redmine'
- 'REDMINE_DB_PASSWORD=password'
- 'TZ=Asia/Tokyo'
volumes:
postgres-data:
redmine-data:
https-data:
ここでは,ドメイン名をredmine.local
としています.適宜,環境に合わせたドメイン名を入力してください.
http://redmine:3000
に関しては,redmineのサービス名とします.
ブラウザで設定したドメイン名redmine.local
にアクセスします.
暗号化された通信となっていることがわかります.(今回は自己証明書なので,Warningが出ています)
ドメイン名ではなく,localhostやIPアドレスを直打ちする場合はSSL化されないため注意が必要です.