0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Redmine 6.1.1 を Docker で構築する Docker Compose / MySQL

0
Last updated at Posted at 2026-03-21

はじめに

本記事は,Docker と Dokcer Compose を使って DB は MySQL で Redmine 6.1.1 を起動する手順である.

https://blog.redmine.jp/articles/6_1/redmine-6_1-docker/ の MySQL 版であり,元記事と同じく,DB パスワードや secret_key_base といった機密情報の取り扱いに Docker Secrets を利用する.

実行環境・使用バージョン

項目 内容
Redmine 6.1.1( redmine:6.1.1
DB MySQL 9.6.0( mysql:9.6.0 ).どのバージョンが適切なのかは不明のため,最新バージョンで実行することとした.
コンテナ実行 Docker version 29.3 + Docker Compose version v5.1.0
公開ポート http://localhost:8080(ホストの8080 → コンテナの3000)
永続化 Docker volumes(DB / 添付ファイル / プラグイン / テーマ).ホスト上からは /var/lib/dockec/volumes で確認できる
機密情報 Docker Secrets(ホスト上はファイルで管理)

その他の前提条件は,元記事と同じく以下の通り.

  • Docker Engine と Docker Compose v2 が利用できること( docker compose version が動く)
  • openssl が利用できること
  • ホスト側で 8080 ポートが空いていること

セットアップ

こちらは 元記事とほぼ同じである.
secrets に利用するファイルのみ,所有グループの変更と権限設定の追加を実施している.

  • 作業用ディレクトリの作成する
mkdir redmine
cd redmine
  • DB パスワードと Redmine の secret_key_base を作成する
openssl rand -base64 24 | tr -dc 'a-zA-Z0-9' | head -c 24 > db_password.txt
openssl rand -hex 64 > secret_key_base.txt
  • Redmine コンテナのユーザが redmine(uid 999) で root のみの読み書きだと実行してくれなかったため,元記事から少し権限を増やして設定する
    • ホストには 999 のユーザがいるため,グループに意図しないものが増えて変な感じになる.もっと上手い解決策があるのか不明である
chown root:999 secret_key_base.txt db_password.txt
chmod 600 db_password.txt secret_key_base.txt

Dockerfile 作成

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

プラグインをインストールする際の注意点(2026/03/21追記)

ネイティブ拡張(Cで書かれたgem)を含むプラグインをインストールする場合は,Dockerfileに build-essential を追加する.
AI helper プラグインをインストールしようとしたところ,エラーが発生したため発覚した.
なるべく軽量なコンテナにする場合は不要である.

FROM redmine:6.1.1

USER root

RUN apt-get update && \
    apt-get install -y --no-install-recommends \
    fonts-noto-cjk \
    fontconfig \
    build-essential && \ 
    rm -rf /var/lib/apt/lists/* && \
    fc-cache -fv

USER redmine

docker-compose.yml 作成

docker-compose.yml を作成する.

networks:
  redmine_network:
    driver: bridge

volumes:
  mysql_data:
  redmine_files:
  redmine_plugins:
  redmine_themes:

secrets:
  db_password:
    file: ./db_password.txt
  secret_key_base:
    file: ./secret_key_base.txt

services:
  mysql:
    image: mysql:9.6.0
    container_name: redmine_mysql
    restart: always
    networks:
      - redmine_network
    volumes:
      - mysql_data:/var/lib/mysql/
    environment:
      MYSQL_DATABASE: redmine_production
      MYSQL_ROOT_PASSWORD_FILE: /run/secrets/db_password      
      MYSQL_USER: redmine_user
      MYSQL_PASSWORD_FILE: /run/secrets/db_password
    secrets:
      - db_password
    healthcheck:
      test: ["CMD-SHELL", "mysqladmin ping -h 127.0.0.1 -u root -p$$(cat /run/secrets/db_password)"]
      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:
      mysql:
        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_MYSQL: mysql
      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

変更箇所と参考URL

変更箇所についての参考記事と変更理由などを説明する.
原理がどうでも良い人は docker-compose.yml のみをコピーすれば良い.

services:
  mysql:
    volumes:
      - mysql_data:/var/lib/mysql/
  • MySQL のデータベースや User を設定する
    • MYSQL_ROOT_PASSWORD_FILE は必須となる
    • root ではなく redmine_user を使って db にアクセスするので, MYSQL_USERMYSQL_PASSWORD_FILE を設定する
      • パスワードは secrets のファイルを読んでくるため,MYSQL_ROOT_PASSWORD_FILE, MYSQL_PASSWORD_FILE としている.secrets を使用せず直接パスワードを記載する場合は,MYSQL_ROOT_PASSWORD, MYSQL_PASSWORD とする
    • secrets を使ったパスワードなどの指定方法について https://qiita.com/tarosuke777000/items/0700fc688cf52ffeeeba
    • MySQL の各種環境変数について https://qiita.com/tarosuke777000/items/0700fc688cf52ffeeeba
services:
  mysql:
    environment:
      MYSQL_DATABASE: redmine_production
      MYSQL_ROOT_PASSWORD_FILE: /run/secrets/db_password      
      MYSQL_USER: redmine_user
      MYSQL_PASSWORD_FILE: /run/secrets/db_password
  • MySQL の healthcheck 方法に変更する
services:
  mysql:
    healthcheck:
      test: ["CMD-SHELL", "mysqladmin ping -h 127.0.0.1 -u root -p$$(cat /run/secrets/db_password)"]
services:
  redmine:
    environment:
      REDMINE_DB_MYSQL: mysql

PostgreSQL から MySQL へデータ移行

先に PostgreSQL で構築したため,練習も兼ねて最初から立ち上げるのではなく移行した.
最初から MySQL で構築した人は,実施不要である.
https://blog.redmine.jp/articles/change-database/

  • Redmine コンテナに接続(元記事の docker-compose.yml を使用)
docker compose up -d
  • PostgreSQL のバックアップ
    • yaml_db をインストールして,dumpを取り,ローカルに退避する
docker compose exec -it redmine bash
$ pwd
/usr/src/redmine
$ echo gem \'yaml_db\' >> Gemfile
$ bundle install
$ export REDMINE_DB_PASSWORD="$(cat /run/secrets/db_password)"
$ export SECRET_KEY_BASE="$(cat /run/secrets/secret_key_base)"
$ env RAILS_ENV=production rake db:dump
$ ls db/
data.yml   migrate/   schema.rb
$ exit
docker compose cp redmine_app:/usr/src/redmine/db/data.yml ./tmp/data.yml
  • MySQL へ DB 変更(本記事の docker-compose.yml を使用)
    • 起動し直して MySQL へ諸々変更された後に,dump した転送する
docker compose down
docker compose up -d
docker compose cp ./tmp/data.yml redmine:/usr/src/redmine/db/data.yml
docker compose exec -it redmine bash
$ pwd
/usr/src/redmine
$ echo gem \'yaml_db\' >> Gemfile
$ bundle install
$ export REDMINE_DB_PASSWORD="$(cat /run/secrets/db_password)"
$ export SECRET_KEY_BASE="$(cat /run/secrets/secret_key_base)"
$ DISABLE_DATABASE_ENVIRONMENT_CHECK=1 bundle exec rake db:load RAILS_ENV=production
0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?