プログラマーのメモ書き

伊勢在住のプログラマーが気になることを気ままにメモったブログです

Redmine のアップグレード 4.1.1 -> 6.0.5 (その1)

ひと月ほど前になりますが、名古屋であった OSC 名古屋に参加してきました。そこで、 Redmine の便利機能を紹介してくれるセッションがあって、それを聞いてみたところ、久しぶりに自分が使っている Redmine をアップグレードしたくなってきました。

ということで、前回の Redmine のアップグレードの記事を参考に、 Redmine を今までの 4.1.1 から bitnami で公開してくれてる最新の 6.0.5 にアップグレードしたのでメモっておきます。

インスタンスの立ち上げ

Bitnami の Redmine ページにある Single Tier から aws -> Launch in AWS Console を選択します。すると AMI の一覧が表示されるので、起動したいリージョンのものをクリックすると、aws のコンソールのログインを求められ、ログインするとそのままインスタンス起動ページが表示されます。

今回も

  • インスタンスタイプ: t3.nano
  • EBS サイズ: 10 GiB (gp3)

のスポットインスタンスとして起動しました。

あと、前回の移行時と同じく比較しておきます。

移行前 移行後
EC2インスタンス t3.nano t3.nano
OS Debian 10, 64bit Debian 12, 64bit
Redmine 4.1.1 6.0.5

スポットインスタンスについて

なお、以前は EC2 の左側のメニューの『スポットリクエスト』を選択すると『スポットリクエストの作成』みたいなのがあったのですが、いまは、『スポットフリートリクエストの作成』になってしまってます。

じゃあ、スポットインスタンス(単体)を立ち上げたい時はどうすればいいんだろうか?と思い、さんざん探した結果、上記のインスタンスリクエストの『高度な詳細』の中にある『購入オプション』で選択するようです。

ちなみに公式ドキュメントにはちゃんと書いてありました。

また、ここで『スポットインスタンス』を選択すると、

『スポットインスタンスオプションのカスタマイズ』のリンクが表示されるので、ここからスポットインスタンスに関するオプションを設定することができます。

今回は、上記のように設定してみました。

アップグレード

アップグレードは前回作業時の記事および下記の公式ドキュメントを参考にして進めます。

Upgrade Redmine

まずは、redmineのデータを移行させます。

旧サーバーでの作業

DB のバックアップ

bitnami@ip-172-30-0-111:~$ /opt/bitnami/mysql/bin/mysqldump -u root -p bitnami_redmine --add-drop-database > redmine.dump
Enter password: 
bitnami@ip-172-30-0-111:~$ 

今回は公式ドキュメントを参考に --add-drop-database オプションを追加しました。

添付ファイルのバックアップ

bitnami@ip-172-30-0-111:~$ cd /opt/bitnami/apps/redmine/htdocs/
bitnami@ip-172-30-0-111:/opt/bitnami/apps/redmine/htdocs$ tar zcvf ~/redmine_files.tgz files

プラグインは使ってないのでバックアップしません。

バックアップファイルが作れたら、 SFTP でローカルに保存しておきます。

新サーバーでの作業

最初は新サーバーに SSH (ポート 22)で接続して作業を行うので、必要に応じて新サーバーにアタッチしたセキュリティグループで SSH (22) を通すようにしておきます。

そのうえで、新サーバーに SSH でログインします( EC2 の場合は秘密鍵を指定してログインします)。

まずは公式の手順通りに apache を停止します。

bitnami@ip-172-30-3-59:~$ cd stack
bitnami@ip-172-30-3-59:~/stack$ 
bitnami@ip-172-30-3-59:~/stack$ sudo ./ctlscript.sh stop apache
Stopped apache
bitnami@ip-172-30-3-59:~/stack$ 

次に、 SFTP でダウンロードしたバックアップファイルを新サーバーへアップロードします(ファイルはホームディレクトリにおいておきます)。

続いてデータベースのバックアップを反映させます。初期パスワードは、立ち上げたインスタンスの bitnami ユーザーのホームディレクトリにファイルがあり、そこに記載されています(~/bitnami_credentials に記載)。DB のパスワードに関する公式の説明はこちらに載ってますので気なる方は確認してみてください。

bitnami@ip-172-30-3-59:~/stack$ mysql -u root -p bitnami_redmine < ~/redmine.dump 
mysql: Deprecated program name. It will be removed in a future release, use '/opt/bitnami/mariadb/bin/mariadb' instead
Enter password: 
bitnami@ip-172-30-3-59:~/stack$ 

このとき、気づいたんですが、 Bitnami の Redmine スタックの DB が MySQL から MariaDB に変わってます。下記の記事などによると 4.2.3 などで既に切り替わっていたようです。

Bitnami Redmine(Windows)から自前Redmine(Windows)にデータ移行する手順 #Redmine - Qiita

一応、上記コマンドでエラーなく処理できました。ちなみに、公式の記述にあるような DB 名を指定しないやり方で試したときは、

bitnami@ip-172-30-3-148:~/stack$ mysql -u root -p < ~/redmine.dump 
mysql: Deprecated program name. It will be removed in a future release, use '/opt/bitnami/mariadb/bin/mariadb' instead
Enter password: 
--------------
DROP TABLE IF EXISTS `ar_internal_metadata`
--------------

ERROR 1046 (3D000) at line 22: No database selected
bitnami@ip-172-30-3-148:~/stack$ 

という感じでエラーがでてましたので、ご参考までに。

次は添付ファイルを復元します。フォルダ構成が、以前のものと同じではないので、どこに解凍するかというのがあるのですが、公式の説明だと

Copy the Redmine application files to the files directory, by copying redmine_files.tar.gz to the new instance and extracting its contents:

のように『 files ディレクトリ』に解凍してね、とあるので、たぶん redmine/files で大丈夫だろうと考えました。

で、今回の Bitnami Redmine stack の場合は、 redmine/files ディレクトリが /bitnami/redmine/files ディレクトリへのシンボリックリンクになっています。

bitnami@ip-172-30-3-59:~/stack/redmine$ ls -l
total 144
drwxr-xr-x  9 bitnami daemon  4096 Apr 20 08:29 app
(略)
lrwxrwxrwx  1 root    root      23 Jul  7 00:04 files -> /bitnami/redmine/files/
(略)
lrwxrwxrwx  1 root    root      24 Jul  6 23:44 plugins -> /bitnami/redmine/plugins
(略)
bitnami@ip-172-30-3-59:~/stack/redmine$ 

どうも、 /bitnami/redmine 以下に files や plugins をまとめておいておくという考えのようです。なので、これに従うようにするため、解凍時に --keep-directory-symlink オプションを追加しておきます。

bitnami@ip-172-30-3-59:~/stack$ cd redmine/
bitnami@ip-172-30-3-59:~/stack/redmine$ sudo tar zxvf ~/redmine_files.tgz --keep-directory-symlink

問題なさそうです。次は、ログファイルのパーミッションを変更します。後段の移行作業でログが書き込まれる際にエラーにならないようにするためのようです。

bitnami@ip-172-30-3-59:~/stack/redmine$ 
bitnami@ip-172-30-3-59:~/stack/redmine$ cd log/
bitnami@ip-172-30-3-59:~/stack/redmine/log$ ls -l
total 64
-rw-r--r-- 1 daemon daemon 65321 Jul  6 23:45 production.log
bitnami@ip-172-30-3-59:~/stack/redmine/log$ sudo chmod 666 production.log 

最後に移行処理を呼び出しますが、その前に、

bitnami@ip-172-30-3-59:~/stack$ cd redmine/
bitnami@ip-172-30-3-59:~/stack/redmine$ ls -laF db
total 64
drwxrwxr-x  3 bitnami daemon  4096 Jul  6 23:44 ./
drwxr-xr-x 17 bitnami daemon  4096 Jul  7 00:04 ../
drwxrwxr-x  2 bitnami daemon 24576 Apr 20 08:29 migrate/
-rw-r--r--  1 daemon  daemon 29914 Jul  6 23:44 schema.rb
bitnami@ip-172-30-3-59:~/stack/redmine$ sudo chown bitnami db/schema.rb 

として、 db/schema.rb ファイルの所有者を変更しておきます。

bitnami@ip-172-30-3-59:~/stack$ cd redmine/
bitnami@ip-172-30-3-59:~/stack/redmine$ bundle exec rake db:migrate RAILS_ENV=production
== 20200826153401 AddTwofaSchemeToUser: migrating =============================
(略)
== 20241103184550 ChangeBuiltinRolesUserVisibility: migrated (0.0233s) ========

bitnami@ip-172-30-3-59:~/stack/redmine$ 

問題なく移行できたようです。なお、最初に行った db/schema.rb の所有者を変更していなかったときは、

bitnami@ip-172-30-3-148:~/stack$ cd redmine/
bitnami@ip-172-30-3-148:~/stack/redmine$ bundle exec rake db:migrate RAILS_ENV=production
== 20200826153401 AddTwofaSchemeToUser: migrating =============================
(略)
rake aborted!
Errno::EACCES: Permission denied @ rb_sysopen - /opt/bitnami/redmine/db/schema.rb (Errno::EACCES)
(略)
Tasks: TOP => db:schema:dump
(See full trace by running task with --trace)
bitnami@ip-172-30-3-148:~/stack/redmine$ 

のようにエラーとなりました。Stack Overflow に似たエラーのことが載っていて、パーミッションの問題とのことだったので、さきほどは修正してから実行しました。

最後に掃除しときます。

bitnami@ip-172-30-3-59:~/stack/redmine$ bundle exec rake tmp:clear

ログのパーミッションを戻します。

bitnami@ip-172-30-3-59:~/stack/redmine$ ls -l log/
total 68
-rw-rw-rw- 1 daemon daemon 69163 Jul  7 00:27 production.log
bitnami@ip-172-30-3-59:~/stack/redmine$ sudo chmod 644 log/production.log 

最後にapacheを再開します。

bitnami@ip-172-30-3-59:~/stack$ sudo ./ctlscript.sh start apache
Started apache
bitnami@ip-172-30-3-59:~/stack$ 

とりあえず、この時点で、redmineにアクセスすると、ちゃんと表示されて、ログインもできました(ユーザー名、パスワードは旧サーバーのものと同じです)。また、添付ファイルのあるチケットを表示するとそれも問題なく表示できました。

まとめ

とりあえず、redmineの移行はできたようです。なので、引き続きサーバーに関する設定を行います。