公式Redmine+postgeSQL環境をdocker-composeで構築


概要

  • 老朽化したサーバからの移行に伴い、Redmine環境もdokerで再構築・移行した
    • 構築環境情報を明確化するためと、ミドルウェアやツールのバージョンアップを容易にするため

前提

  • サーバにdockerおよびdocker-composeがインストールされていること

結論(docker-compose.yml)

  • 以下のdocker-compose.ymlをサーバに配置し、docker-compose up -dで実行する
docker-compose.yml

version: '3.7'

services:
    # Redmine本体
    redmine:
        image: redmine:3.4.13-passenger
        container_name: redmine
        ports:
            - '33000:3000'
        expose:
            - '3000'
        volumes:
            - ./redmine/files:/usr/src/redmine/files
            - ./redmine/log:/usr/src/redmine/log
            - ./redmine/plugins:/usr/src/redmine/plugins
            - ./redmine/public/themes:/usr/src/redmine/public/themes
        restart: always
        environment:
            REDMINE_DB_POSTGRES: postgres
            REDMINE_DB_DATABASE: redmine
            REDMINE_DB_USERNAME: redmine
            REDMINE_DB_PASSWORD: redmine
            TZ: Asia/Tokyo
        links:
            - postgres

    # DBサーバ
    postgres:
        image: postgres:11.5
        container_name: postgres_redmine
        volumes:
            - ./postgres/db-data:/var/lib/postgresql/data
            - ./postgres/initdb:/docker-entrypoint-initdb.d
        ports:
            - "5432:5432"
        restart: always
        environment:
            POSTGRES_ROOT_PASSWORD: postgres
            POSTGRES_USER: redmine
            POSTGRES_PASSWORD: redmine
            POSTGRES_DATABASE: redmine
            TZ: Asia/Tokyo

volumes:
    redmine:
    postgres:
  • 正常に起動したら、ブラウザから、ホストIP:33000でアクセスしてRedmineのトップ画面が表示されることを確認する。

(余談)postgreSQLを日本語ロケールで設定する場合

docker-compose.yml
    # DBサーバ
    # 日本語ロケールのdocker imageを利用
    postgres:
        build:
            context: ./
            dockerfile: ./Dockerfile
        container_name: postgres_redmine
        volumes:
Dockerfile
FROM postgres:11.5

RUN localedef -i ja_JP -c -f UTF-8 -A /usr/share/locale/locale.alias ja_JP.UTF-8

ENV LANG ja_JP.utf8

旧環境からの移行(リストア)

  • 構築したRedmine環境に、旧環境からデータを移行する際には、以下の手順で実施します。
  1. 移行元環境から、DBデータ、添付ファイル、プラグインを取得し、移行先環境に転送します。
    • DBデータバックアップ: pg_dump -U redmine redmine > [任意のファイル名]
    • filesディレクトリ(添付ファイル): /var/lib/redmine/files
    • pluginディレクトリ(プラグイン): /var/lib/redmine/plugin
  2. redmineコンテナにアクセスし、 公式のインストール手順 の、以下の作業を実施します。
  3. 移行元のDBデータを、移行先環境にリストアします
    (※ 環境初期構築時にDBに初期データが事前に入ってしまうため、テーブルを削除→再作成という流れで実施)
    • ホストのバックアップデータをpostgresqlコンテナにコピー: docker cp [ホストのバックアップファイル] postgres_redmine:[コンテナ内の任意のディレクトリ]
    • postgresqlコンテナにアクセス: docker exec -it postgres_redmine /bin/bash
    • DBに登録されている初期データを削除
    • テーブルの削除
      • RedmineDBにアクセス:psql -U redmine -d redmine
      • テーブル全削除:drop schema public cascade;
      • スキーマの再構築:create schema public;
      • RedmineDBから出る:\q
    • テーブルの再作成
      • psql -U redmine redmine < [redmineコンテナ内に格納したバックアップDBデータ]
      • postgresqlコンテナから出る:exit
  4. redmineコンテナに再度アクセスし、公式のアップグレード手順の、以下の作業を実施
    • [Step 4 – データベースの更新]:データベースのマイグレーションとプラグインのマイグレーションを実施
  5. redmine関連コンテナを再起動し、設定を反映させる
    • redmineコンテナを再起動:docker-compose restart

参考