概要
- 老朽化したサーバからの移行に伴い、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を日本語ロケールで設定する場合
- 
postgreSQLのimageには初期ロケールはen_US.utf8しか設定されていないので、日本語ロケールを使う場合には、docker imageを作る必要があります。(参考)Docker for Mac で 日本語locale設定を含む PostgreSQL を構築 
- 
上記docker-compose.ymlのDBサーバ部分を書き換え、docker image作成用のDockerfileを作ります 
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環境に、旧環境からデータを移行する際には、以下の手順で実施します。
- 移行元環境から、DBデータ、添付ファイル、プラグインを取得し、移行先環境に転送します。
- DBデータバックアップ: pg_dump -U redmine redmine > [任意のファイル名]
- filesディレクトリ(添付ファイル): /var/lib/redmine/files
- pluginディレクトリ(プラグイン): /var/lib/redmine/plugin
- redmineコンテナにアクセスし、 公式のインストール手順 の、以下の作業を実施します。
- redmineコンテナへアクセス: docker exec -it redmine /bin/bash
- Step 4 - 依存するソフトウェアのインストール
- Step 5 - セッションストア秘密鍵の生成
- コンテナから出る:exit
- 移行元の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
 
- RedmineDBにアクセス:
- テーブルの再作成
- psql -U redmine redmine < [redmineコンテナ内に格納したバックアップDBデータ]
- postgresqlコンテナから出る:exit
 
 
- テーブルの削除
- redmineコンテナに再度アクセスし、公式のアップグレード手順の、以下の作業を実施
- [Step 4 – データベースの更新]:データベースのマイグレーションとプラグインのマイグレーションを実施
- redmine関連コンテナを再起動し、設定を反映させる
- redmineコンテナを再起動:docker-compose restart