プロジェクト

全般

プロフィール

操作

20260703 サーバ移行05 Redmine

無敗でDBマイグレート言った。記事を執筆中にRedmineのコンテナをdocker compose down、docker compose upしたせいでログイン情報が切れて記事が吹っ飛んで一敗。

  • Redmineコンテナのアップデート
  • /redmine以下で動かすための設定
  • MySQLの文字コード変更

Redmineコンテナのアップデート

使ったコンテナたち

version: '3.8'

services:
  redmine:
    # image: docker.io/redmine:3.4.4
    # image: docker.io/redmine:4.2.10
    # image: docker.io/redmine:5.1.12
    image: docker.io/redmine:6.1.3

アップデートのやり方

コンテナの中の/docker-entrypoint.shを覗く限りコンテナ起動時にdb:migrateが走るらしい。
実際コンテナを起動する以外特に何もせずDBはマイグレーションされた。

# docker exec -it redmine-app bash
Emulate Docker CLI using podman. Create /etc/containers/nodocker to quiet msg.
root@5b2e900863cf:/usr/src/redmine# cat -n /docker-entrypoint.sh
(省略)
   168          if [ "$1" != 'rake' -a -z "$REDMINE_NO_DB_MIGRATE" ]; then
   169                  rake db:migrate
   170          fi
(省略)

バックアップ

途中で失敗したりしてDB吹っ飛ぶと嫌だし、やり直せるように毎回物理バックアップと論理バックアップを取る

論理バックアップ(例)

systemctl start mysqld.service
mysqldump -u root -p redmine > redmine.3.4.4.sql

物理バックアップ(例):

systemctl stop mysqld.service
cp -ar /var/lib/mysql /path/to/backup/mysql.3.4.4

各redmineでのバージョンでのDBバージョン

4.2.10のDBバージョン:

root@092efd2f73b1:/usr/src/redmine# bundle exec rake db:version
Current version: 20200826153402

5.2.12のDBバージョン:

root@3e7c60aa34ea:/usr/src/redmine# bundle exec rake db:version
Current version: 20231012112407

6.1.3のDBバージョン:

root@1a7f056dd581:/usr/src/redmine# bundle exec rake db:version

database: redmine
Current version: 20250611092227

/redmine以下で動かすための設定

コンテナの/usr/src/redmine/config.ruに設定を追加した。

config.ruの内容はrailsにあわせてかバージョンによって若干違うけど変更点は同じ、applicationを起動しているコード(以下の例だとrun Rails.application)をmap "/redmine" do と endで囲うだけ

変更後はこんな感じ:

# This file is used by Rack-based servers to start the application.

require_relative 'config/environment'
map "/redmine" do
  run Rails.application
end

永続化

毎回コンテナ内の資源を編集するのは嫌なのでホスト側のファイルを参照するようにする。redmineに関する設定なので/etc/redmineを切る

[root@roma02 redmine]# pwd
/etc/redmine
[root@roma02 redmine]# ls -lZ
合計 8
-rw-r--r--. 1 root root unconfined_u:object_r:container_file_t:s0 153 7月 3 18:45 config.ru
-rw-r--r--. 1 root root unconfined_u:object_r:var_lib_t:s0 2168 7月 3 18:48 docker-compose.yml

SELinux設定

SELinuxで弾かれないようにコンテキストを変更する:

semanage fcontext -a -t container_file_t "/etc/redmine/config.ru"
restorecon -v /etc/redmine/config.ru

MySQLの文字コード変更

MySQL5.7の時に作ったredmineなのでデフォルト文字コードと照合順序がutf8mb3のまま。
照合順序を一覧で見るSQL:

SELECT
  table_name,
  table_collation
 FROM
  information_schema.tables
 WHERE
  table_schema="redmine"
;

ALTER文(例):

ALTER TABLE `issues` CONVERT TO CHARACTER SET utf8mb4;

面倒臭いのでExcelでALTER文を生成した。シェルスクリプトが得意な人はそれがいいと思う。

sylow castle さんが約1ヶ月前に更新 · 2件の履歴