Redmine3.1をCentOS7.1にインストールし、既存のRedmine1.2のデータの移行を行う手順

  • 10
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

古いサーバ上でRedmine1.2が動いていたのですが、サーバのリプレースとともにRedmineの移行+Redmine3.1へのアップグレードを行ったので、その手順をメモ。

環境

移行先サーバ

  • OS: CentOS7.1
  • DB: MariaDB 5.5.44

移行元サーバ

  • OS: CentOS5.6
  • DB: MySQL 5.0.77
  • Redmine 1.2

既存のデータの抽出

ファイルのバックアップ

(Redmineホーム)/files 配下にファイルが格納されているため、ディレクトリごとコピーする。
※以下ではRedmineホームを/var/lib配下としている

$ sudo cp -r /var/lib/redmine-1.2.1/files ~/files_bak

DBのダンプ

$ sudo mysqldump -u {user} -p{password} {db} > ~/mysql.dump

これらのデータを一旦ローカルなどに退避しておく。

新サーバへRedmineをインストール

基本的には下記のスクリプトを利用し、インストールを行う。
https://github.com/farend/redmine-centos7-mariadb-ansible

※2015/12/16現在、新しいバージョンも公開されているが、新バージョンはDBとしてPostgreSQLを利用している。今回はMySQL(MariaDB)を使いたいため、上記のバージョンを用いる。

スクリプト実行準備

GitHubのREADMEに従い、スクリプト実行準備を行う。

$ sudo yum install -y epel-release
$ sudo yum install -y ansible git
$ git clone https://github.com/farend/redmine-centos7-mariadb-ansible.git

DBのパスワードを設定。

$ sudo vi redmine-centos7-mariadb-ansible/group_vars/redmine-servers

db_passwd_rootと、db_passwd_redmineを適当な内容に変更する。

スクリプト実行

スクリプトを実行する。

$ cd redmine-centos7-mariadb-ansible
$ sudo ansible-playbook -i hosts site.yml

当方の環境では、passengerの設定を取得する部分が正常に動作しなかった。
そこで、その部分のみ手動で設定する。

$ passenger-install-apache2-module --snippet

下記のように表示されるので、コピーしておく。
※環境により記述が変化するので、この通りとは限らない。

LoadModule passenger_module /usr/local/lib/ruby/gems/2.2.0/gems/passenger-5.0.21/buildout/apache2/mod_passenger.so
<IfModule mod_passenger.c>
  PassengerRoot /usr/local/lib/ruby/gems/2.2.0/gems/passenger-5.0.21
  PassengerDefaultRuby /usr/local/bin/ruby
</IfModule>

コピーした記述およびその他の設定の記述をApacheのコンフィグに記述する。

$ sudo vi /etc/httpd/conf.d/redmine.conf

<Directory "/var/lib/redmine/public">
  Require all granted
</Directory>

LoadModule passenger_module /usr/local/lib/ruby/gems/2.2.0/gems/passenger-5.0.21/buildout/apache2/mod_passenger.so
<IfModule mod_passenger.c>
  PassengerRoot /usr/local/lib/ruby/gems/2.2.0/gems/passenger-5.0.21
  PassengerDefaultRuby /usr/local/bin/ruby
</IfModule>

Header always unset "X-Powered-By"
Header always unset "X-Runtime"

PassengerMaxPoolSize 20
PassengerMaxInstancesPerApp 4
PassengerPoolIdleTime 864000
PassengerHighPerformance on
PassengerStatThrottleRate 10
PassengerSpawnMethod smart
PassengerFriendlyErrorPages off

アクセスURLの設定

今回はサブディレクトリ/redmineでアクセスできるようにしたい。
Apacheのドキュメントルートに指定されているディレクトリにシンボリックリックを貼る。

$ sudo ln -s /var/lib/redmine/public /var/www/html/redmine

Apacheのコンフィグを変更する。先ほど作成したredmine.confに記述を追加する。

$ sudo vi /etc/httpd/conf.d/redmine.conf
# 省略

RackBaseURI /redmine

# 省略

Apacheを再起動する。

$ sudo systemctl restart httpd.service

動作確認

(サーバのIPアドレス)/redmineにブラウザからアクセスし、Redmineのトップが表示されることを確認する。

データの復旧

ファイルの復旧

退避しておいたfilesディレクトリとMySQLのダンプファイルを新サーバにSCPなどで転送し、redmine配下へ移動する。

$ sudo rm -rf /var/lib/redmine/files
$ sudo mv ~/files_bak /var/lib/redmine/files

DBの復旧

ダンプしたMySQLのデータを流し込む。

$ mysql -u {user} -p{password} {db} < ~/mysql.dump

DBのマイグレーションを行う必要があるが、そのままのテーブル構成だとエラーが発生するため、手動で不要な(マイグレーションにより作成されるはずの)テーブルの削除を行う。

$ mysql -u {user} -p{password} {db}

mysql> drop table changeset_parents;
mysql> drop table queries_roles;
mysql> drop table custom_fields_roles;
mysql> drop table email_addresses;
mysql> drop table roles_managed_roles;

DBのマイグレーションを行う。

$ cd /var/lib/redmine
$ sudo rake db:migrate RAILS_ENV=production

その他

一部のページへのリクエストで文字コードに起因するエラーが発生するため、アプリケーションコードの修正を行う。

$ sudo vi var/lib/redmine/app/helpers/application_helper.rb
# Helper to render JSON in views
  def raw_json(arg)
    arg = force_utf8_strings(arg) #add
    arg.to_json.to_s.gsub('/', '\/').html_safe
  end

# (中略)

private

# (中略)

# add
  def force_utf8_strings(arg)
    if arg.is_a?(String)
      arg.dup.force_encoding('UTF-8')
    elsif arg.is_a?(Array)
      arg.map do |a|
        force_utf8_strings(a)
      end
    elsif arg.is_a?(Hash)
      arg = arg.dup
      arg.each do |k,v|
        arg[k] = force_utf8_strings(v)
      end
      arg
    else
      arg
    end
  end

参考:Redmine カスタムクエリが500 ActionView::Template::Error ("XXX" from ASCII-8BIT to UTF-8) になるときの対処方法