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件の履歴