Redmineリストア手順(公式redmine Docker, PostgreSQL, Docker-compose)

# やりたいこと

CentOSで動かしていたredmineのバックアップの公式redmineでのリストア。
[公式Redmine+postgeSQL環境をdocker-composeで構築](https://qiita.com/piro87084806/items/76a95eff3a1bb17cae81)の手順に従いました。
redmineのバージョンは、もともと動かしていたものに合わせました。
また、私がリストアをした過程で起こったトラブルについてもまとめました。


# 1. バックアップ

```
pg_dump -U PostgreSQLユーザー名 -h ホスト名 --file=ダンプデータファイル名 Redmineデータベース名
```
データベース名等は、config/database.ymlで確認できる。(今回は、/var/lib/redmine/にあった。)
https://redmine.jp/faq/system_management/backup/
```config/database.yml
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
```


``` 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
```

<details><summary>トラブル1:docker psで見た時、remineのSTATUSがずっとrestart。</summary><div>

redmineとpostgres_redmineのコンテナがちゃんとつながらず、redmineがrestartし続けていた。調べてみるとポート番号が使われていたので、5432ポートから、5431ポートに変更した。

```
vim docker-compose.yml
```
``` 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
```
```postgresql.conf
# listen_addresses = 'localhost'
listen_addresses = '*'

# port = 5432
port = 5431
```

```
sudo docker-compose restart
sudo docker ps
```


http://blog.totno.net/db/postgresql-threeconfirmation#toc5

</div></details>

# 3. リストア

* redmineの準備 http://guide.redmine.jp/RedmineInstall/#step-4-
```
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
```

<details><summary>トラブル2: ERROR:  role "postgres"/"user_redmine" does not exist</summary><div>

```
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
```
</div></details>


<details><summary>トラブル3: psql: error: connection to server on socket </summary><div>

```
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番号を指定したら治った。

</div></details>

* filesとpluginをredmineコンテナに入れる。
```
sudo docker cp [保存場所]/files/. redmine:/usr/src/redmine/files/
sudo docker cp [保存場所]/plugin/. redmine:/usr/src/redmine/plugin/
```

* データベースの更新　http://guide.redmine.jp/RedmineUpgrade/#step-4-
```
docker exec -it redmine /bin/bash

# redmineコンテナ内
bundle exec rake db:migrate RAILS_ENV=production
exit
```

* 再起動
```
sudo docker-compose restart 
```

再起動が終わると、http://localhost:3000 でredmineが見れるようになります。