やりたいこと
CentOSで動かしていたredmineのバックアップの公式redmineでのリストア。
公式Redmine+postgeSQL環境をdocker-composeで構築の手順に従いました。
redmineのバージョンは、もともと動かしていたものに合わせました。
また、私がリストアをした過程で起こったトラブルについてもまとめました。
1. バックアップ
pg_dump -U PostgreSQLユーザー名 -h ホスト名 --file=ダンプデータファイル名 Redmineデータベース名
データベース名等は、config/database.ymlで確認できる。(今回は、/var/lib/redmine/にあった。)
https://redmine.jp/faq/system_management/backup/
6 production:
7 adapter: postgresql
8 database: db_redmine
9 host: localhost
10 username: user_redmine
11 password: [パスワード]
12 encoding: utf8
pg_dump -U user_redmine -h localhost --file=redmine.sql db_redmine
files,pluginは/var/lib/redmine/files以下にあった。
2. Dockerを立てる。
- Docker, Docker-composeのインストール
Docker:
sudo apt install docker.io
Docker-compose: https://docs.docker.jp/compose/install.html#linux
- 任意の場所にdocker-compose.ymlを作成。
mkdir ~/redmine34
cd redmine34
vim docker-compose.yml
version: '3.7'
services:
# Redmine本体
redmine:
image: redmine:3.4.13-passenger
container_name: redmine
depends_on:
- postgres
ports:
- '3000:3000'
# expose:
# - '3000'
volumes:
- ./redmine/files:/usr/src/redmine/files
restart: always
environment:
REDMINE_DB_POSTGRES: postgres
REDMINE_DB_DATABASE: redmine
REDMINE_DB_USERNAME: redmine
REDMINE_DB_PASSWORD: redmine
TZ: Asia/Tokyo
REDMINE_DB_PORT: 5432
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: redmine
POSTGRES_USER: redmine
POSTGRES_PASSWORD: redmine
POSTGRES_DATABASE: redmine
TZ: Asia/Tokyo
volumes:
redmine:
postgres:
- 起動+確認
redmineコンテナとredmine_postgresコンテナが立ち上がります。
sudo docker-compose up -d
sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
57e942429ef6 redmine:3.4.13-passenger "/docker-entrypoint.…" 5 days ago Up 4 days 0.0.0.0:3000->3000/tcp redmine
24d8f032deb6 postgres:11.5 "docker-entrypoint.s…" 5 days ago Up 4 days 0.0.0.0:5432->5432/tcp postgres_redmine
トラブル1:docker psで見た時、remineのSTATUSがずっとrestart。
redmineとpostgres_redmineのコンテナがちゃんとつながらず、redmineがrestartし続けていた。調べてみるとポート番号が使われていたので、5432ポートから、5431ポートに変更した。
vim docker-compose.yml
version: '3.7'
services:
# Redmine本体
redmine:
...
environment:
...
REDMINE_DB_PORT: 5431 # 変更
...
# DBサーバ
postgres:
...
ports:
- "5431:5431" # 変更
...
postgres_redmineのコンテナに入り、デフォルトのポート番号を変更。
sudo docker exec -it postgres_redmine /bin/bash
# postgres_redmineコンテナ内
apt-get update
apt-get install vim
vim /var/lib/postgresql/data/postgresql.conf
# listen_addresses = 'localhost'
listen_addresses = '*'
# port = 5432
port = 5431
sudo docker-compose restart
sudo docker ps
3. リストア
docker exec -it redmine /bin/bash # redmineのdocker imageに入る。
# redmineコンテナ内
gem install bundler
bundle install --without development test
bundle install --without development test rmagick
bundle exec rake generate_secret_token
exit
- バックアップしたDBデータをpostgresqlのdockerイメージ内にコピー
docker cp [redmine.sqlのパス] postgres_redmine:[コンテナ内の任意のディレクトリ]
- 初期DBデータを削除して、バックアップデータをリストア
docker exec -it postgres_redmine /bin/bash
# postgre_redmineコンテナ内
psql -U redmine -d redmine
drop schema public cascade;
create schema public;
\q
psql -U redmine redmine < [redmineコンテナ内に格納したバックアップDBデータ]
exit
トラブル2: ERROR: role "postgres"/"user_redmine" does not exist
ERROR: role "postgres" does not exist
ERROR: role "user_redmine" does not exist
というエラーが出たので、↓のコマンドで上の2つのユーザを作成してやり直した。
# postgres_redmine Docker内
createuser --interactive --pwprompt -U postgres
createuser --interactive --pwprompt -U redmine
トラブル3: psql: error: connection to server on socket
psql -U redmine -d redmine
psql: error: connection to server on socket "/var/run/postgresql/.s.PGSQL.5432" failed: No such file or directory
Is the server running locally and accepting connections on that socket?
https://www.dbonline.jp/postgresql/connect/index2.html#section1
を参考にport番号を指定したら治った。
- filesとpluginをredmineコンテナに入れる。
sudo docker cp [保存場所]/files/. redmine:/usr/src/redmine/files/
sudo docker cp [保存場所]/plugin/. redmine:/usr/src/redmine/plugin/
docker exec -it redmine /bin/bash
# redmineコンテナ内
bundle exec rake db:migrate RAILS_ENV=production
exit
- 再起動
sudo docker-compose restart
再起動が終わると、http://localhost:3000 でredmineが見れるようになります。