VPSにhttps対応でマルチドメインのRedmineを構築しよう～Docker Redmineメンテナンス編～

# 要件
- VPSにRedmineをDockerベースで構築したい
- 既にbitnamiで構築済みのRedmineをDockerベースに移行したい
- httpsに対応してほしい
- Redmineのコンテナを複数立ち上げて、マルチドメインのRedmineを気軽に構築したい

上記要件が社内で出たので、構築した手順のメモ

## 参考にしたサイト
[Redmine を Docker 公式イメージで運用する](https://qiita.com/bezeklik/items/b5c39136a8db23e2e81c)

# Docker Redmineメンテナンス

## 環境クリーン手順

### Dockerコンテナ一括削除

```
docker rm -f `docker ps -a -q`
```

### Dockerイメージ一括削除

```
docker images -aq | xargs docker rmi
```

### Docker未使用ネットワーク一括削除

```
docker network prune
```

### Dockerボリューム削除

```
rm -r -f /srv/docker/redmine
rm -r -f /srv/docker/nginx-proxy-with-encrypt
```

---

## バックアップ手順

### バックアップディレクトリの作成

```
mkdir /srv/docker/redmine/backup
```

### 手動バックアップ

#### データベース

```
docker exec redmine_db_1 mysqldump -psample redmine | gzip > /srv/docker/redmine/backup/redmine_db_`date +%F`.sql.gz
```
redmine_db_1はターゲットとするコンテナの名前

-psampleはパスワード-pオプションの後に空白入れずにパスワードを入れる

#### ファイル

```
cd /srv/docker/redmine/ && \
tar cvf backup/redmine_files_`date +%F`.tar.gz files
```

### 自動バックアップ

#### データベース

```
cat << '_EOF_' > /etc/systemd/system/backup-redmine-db.service
[Unit]
Description=Backup Redmine database

[Service]
Type=oneshot
ExecStart=/bin/bash -c "docker exec redmine_db_1 mysqldump -psample redmine | gzip > /srv/docker/redmine/backup/redmine_db_`date +%F`.sql.gz" && \
 find /srv/docker/redmine/backup -name redmine_db_*.tar.gz -mtime +14 | xargs rm
_EOF_
```

```
cat << '_EOF_' > /etc/systemd/system/backup-redmine-db.timer
[Unit]
Description=Backup Redmine database

[Timer]
OnCalendar=daily
Persistent=true

[Install]
WantedBy=timers.target
_EOF_
```

#### ファイル

```
cat << '_EOF_' > /etc/systemd/system/backup-redmine-files.service
[Unit]
Description=Backup Redmine files

[Service]
Type=oneshot
ExecStart=/bin/bash -c "cd /srv/docker/redmine/ && tar -cf backup/redmine_files_`date +%F`.tar.gz files" && \
 find /srv/docker/redmine/backup -name redmine_files_*.tar.gz -mtime +14 | xargs rm
_EOF_
```

```
cat << '_EOF_' > /etc/systemd/system/backup-redmine-files.timer
[Unit]
Description=Backup Redmine files

[Timer]
OnCalendar=daily
Persistent=true

[Install]
WantedBy=timers.target
_EOF_
```

```
mkdir /srv/docker/redmine/backup && \
systemctl daemon-reload && \
systemctl enable backup-redmine-{db,files}.timer
```

### タイマーをスタートする

```
systemctl start backup-redmine-{db,files}.timer
```

### タイマーを無効にする

```
systemctl disable backup-redmine-{db,files}.timer
```

### タイマーの状態を確認する

```
systemctl status backup-redmine-{db,files}.timer
```

### ログを見る

```
journalctl -u backup-redmine-db.service
journalctl -u backup-redmine-files.service
```

と対象のサービスを確認すればよい。

---

## バックアップリストア手順

### MySQLバックアップファイルのリストア

```
zcat /srv/docker/redmine/backup/redmine_db_2018-09-26.sql.gz | docker exec -i redmine_db_1 mysql -psample redmine
```

redmine_db_1はターゲットとするコンテナの名前

-psampleはパスワード-pオプションの後に空白入れずにパスワードを入れる

### Redmineバックアップファイルのリストア

```
cd /srv/docker/redmine/ && \
rm -r -f /srv/docker/redmine/files && \
tar xf /srv/docker/redmine/backup/redmine_files_2018-09-26.tar.gz
```

### dockerコンテナの再起動

```
cd ~/work/redmine/ && \
docker-compose restart
```

---

## バージョンアップ手順

### Redmine 本体の更新

```
cd ~/work/redmine/ && \
docker pull redmine && docker-compose restart && docker container prune
```

---