Dockerを用いたRedmineオンプレミス構築

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証明書を用いて暗号化するためには,下記の方法が考えられます.

  1. Redmineイメージから作成したコンテナ内にHTTPS化の設定を行う
  2. 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化されないため注意が必要です.

よかったらシェアしてね!
目次