Redmine 6.1 をDockerで動かす手順(Docker Compose / PostgreSQL)

Docker と Docker Compose を使って Redmine 6.1 系を起動する手順です。
本手順では、DB パスワードや secret_key_base といった機密情報の取り扱いに Docker Secrets を利用します。
Redmineとは:
Redmineはオープンソースのプロジェクト管理ソフトウェアです。オンプレミスのサーバなど自分で用意した環境に自由にインストールできるほか、 クラウドサービス の利用も可能です。Redmineについて詳しくは Redmine.JP をご覧ください。
本手順で作成される環境
| 項目 | 内容 |
|---|---|
| Redmine | 6.1.1(redmine:6.1.1 をベースにビルド) |
| DB | PostgreSQL 16(postgres:16-bookworm) |
| コンテナ実行 | Docker Engine + Docker Compose v2 |
| 公開ポート | http://localhost:8080(ホストの8080 → コンテナの3000) |
| 永続化 | Docker volumes(DB / 添付ファイル / プラグイン / テーマ) |
| 機密情報 | Docker Secrets(ホスト上はファイルで管理) |
事前準備
- Docker Engine と Docker Compose v2 が利用できること(
docker compose versionが動く) opensslが利用できること(Secrets の生成に使用)- ホスト側で
8080ポートが空いていること
以降の作業は、任意の作業ディレクトリで実行します(例: ~/redmine)。
セットアップ手順
1. 作業用ディレクトリを作成する
mkdir redmine
cd redmine
2. Docker Secrets 用の機密情報ファイルを作成する
DB パスワードと Redmine の secret_key_base を生成し、ファイルに保存します。
# DB パスワード(24文字)を生成して保存
openssl rand -base64 24 | tr -dc 'a-zA-Z0-9' | head -c 24 > db_password.txt
# secret_key_base(128文字相当)を生成して保存
openssl rand -hex 64 > secret_key_base.txt
作成したファイルは機密情報そのものです。第三者に読まれないように権限を設定します。
chmod 600 db_password.txt secret_key_base.txt
Git などでバージョン管理する場合は、必ずコミット対象から外してください(例: .gitignore に追記)。
db_password.txt
secret_key_base.txt
3. Dockerfile を作成する(日本語PDF出力の文字化け対策)
Redmine のガントチャート等を PDF 出力した際に、日本語が「□□□」のように表示されるのを防ぐためのフォントを追加します。Dockerfile(拡張子なし)を作成し、以下を保存します。
FROM redmine:6.1.1
USER root
RUN apt-get update && \
apt-get install -y --no-install-recommends \
fonts-noto-cjk \
fontconfig && \
rm -rf /var/lib/apt/lists/* && \
fc-cache -fv
USER redmine
4. docker-compose.yml を作成する
docker-compose.yml を作成し、以下を保存します。
networks:
redmine_network:
driver: bridge
volumes:
postgres_data:
redmine_files:
redmine_plugins:
redmine_themes:
secrets:
db_password:
file: ./db_password.txt
secret_key_base:
file: ./secret_key_base.txt
services:
postgres:
image: postgres:16-bookworm
container_name: redmine_postgres
restart: always
networks:
- redmine_network
volumes:
- postgres_data:/var/lib/postgresql/data
environment:
POSTGRES_USER: redmine_user
POSTGRES_DB: redmine_production
POSTGRES_PASSWORD_FILE: /run/secrets/db_password
secrets:
- db_password
healthcheck:
test: ["CMD-SHELL", "pg_isready -U redmine_user -h localhost"]
interval: 10s
timeout: 5s
retries: 5
start_period: 30s
redmine:
build: .
container_name: redmine_app
restart: always
ports:
- "8080:3000"
networks:
- redmine_network
depends_on:
postgres:
condition: service_healthy
volumes:
- redmine_files:/usr/src/redmine/files
- redmine_plugins:/usr/src/redmine/plugins
- redmine_themes:/usr/src/redmine/themes
environment:
REDMINE_DB_POSTGRES: postgres
REDMINE_DB_DATABASE: redmine_production
REDMINE_DB_USERNAME: redmine_user
REDMINE_DB_PASSWORD_FILE: /run/secrets/db_password
REDMINE_SECRET_KEY_BASE_FILE: /run/secrets/secret_key_base
TZ: Asia/Tokyo
REDMINE_PLUGINS_MIGRATE: "1"
secrets:
- db_password
- secret_key_base
5. コンテナを起動する
docker compose up -d
※初回は DB イメージのダウンロードや、フォントを組み込んだ Redmine のビルドが走るため、数分かかる場合があります。
起動状態を確認します。
docker compose ps
redmine_app と redmine_postgres の STATUS が Up(または running)であれば成功です。
6. 日本語初期データを投入する
デフォルトの「チケットの種類」や「ステータス」などを日本語で投入します。
docker compose exec redmine bash -lc '
export REDMINE_DB_PASSWORD="$(cat /run/secrets/db_password)"
export SECRET_KEY_BASE="$(cat /run/secrets/secret_key_base)"
env RAILS_ENV=production REDMINE_LANG=ja bundle exec rake redmine:load_default_data
'
特にエラーが出ずにプロンプトへ戻れば完了です。
7. ブラウザでアクセスする
ブラウザで以下へアクセスします。
http://localhost:8080
初期ログイン情報は以下です。
- ログインID:
admin - パスワード:
admin
初回ログイン直後にパスワード変更が求められるので、任意の強力なパスワードに変更してください。
日常運用(停止・再開)
※必ず、この手順で作成した redmine ディレクトリで実行してください。
終了(停止して削除)
コンテナを停止して削除します(データは volumes に残るため消えません)。
docker compose down
再開
停止した状態から再び起動します。
docker compose up -d
docker-compose.yml や Dockerfile を変更した場合は、docker compose down の後に docker compose up -d --build で反映してください。