Ruby + Redmine + UnicornをInstallしてALMiniumから移行

alminium_to_redmineAWSの無料期間が終わるので、ALMiniumでインストールしたRedmineを別のサーバーに素のRedmineとして移行したときの覚書。

環境(移行元): Amazon Linux AMI release 2013.09, Redmine 2.2.3, ruby 1.9.3, apache 2.2.26

環境(移行先): CentOS 5.10 x86_64, Redmine 2.4.3, ruby 2.1.1, nginx 1.4.4

 

目次

  1. バックアップ
  2. 移行先に最新のRubyをインストール
  3. Redmine用のデータベース作成
  4. Redmineのインストール
  5. Redmineの初期設定
  6. unicornのインストール
  7. nginxの設定
  8. 移行元からデータを移行

 

参考

 

1.バックアップ

# mysqldump -u alminium -p alminium > alminium.sql

パスワードはデフォルトの場合「alminium」

圧縮してダウンロードする
# tar czvf alminium_20140226.tgz alminium.sql

 

2.移行先に最新のRubyをインストール

既にインストール済みの古いRubyを削除

# yum list installed | grep ruby
# yum remove ruby ruby-devel ruby-libs ruby-mode

コンパイルに必要なパッケージは既にインストール済みだったので省略。

# wget http://cache.ruby-lang.org/pub/ruby/2.1/ruby-2.1.1.tar.gz
# tar xzvf ruby-2.1.1.tar.gz
# cd ruby-2.1.1
# ./configure --disable-install-doc
# make
# make install

bundlerのインストール

# gem install bundler --no-rdoc --no-ri

 

3.Redmine用のデータベース作成

phpMyAdminで作成したので省略。文字コード(charset)は「utf8mb4」

 

4.Redmineのインストール

# cd /opt
# wget http://www.redmine.org/releases/redmine-2.4.3.tar.gz
# tar xzvf redmine-2.4.3.tar.gz
# mv redmine-2.4.3 redmine
# rm redmine-2.4.3.tar.gz
# cd redmine

データベース接続設定

# vi config/database.yml

production:
  adapter: mysql2
  database: redmine
  host: localhost
  username: redmine
  password: pass
  encoding: utf8mb4

Gemパッケージ(Gemfileに記載)をインストール

# bundle install --without development test

すると下記エラー

-----
Using mysql_config at /usr/bin/mysql_config
-----
checking for mysql.h... no
checking for mysql/mysql.h... no
-----
mysql.h is missing.  please check your installation of mysql and try again.

mysql-develが必要なようなのでインストールする。

# yum install mysql-devel.x86_64 --enablerepo=remi

Try Again

# bundle install --without development test

すると今度は下記エラー

Package MagickCore was not found in the pkg-config search path.
Perhaps you should add the directory containing `MagickCore.pc'
to the PKG_CONFIG_PATH environment variable
No package 'MagickCore' found
checking for stdint.h... yes
checking for sys/types.h... yes
checking for wand/MagickWand.h... no

Can't install RMagick 2.13.2. Can't find MagickWand.h.

環境変数PKG_CONFIG_PATHを設定しろと言われた。

MagickWandは/usr/local/lib/pkgconfigにあったのでパスを通す

# vi ~/.bash_profile

export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig

# source ~/.bash_profile
# echo $PKG_CONFIG_PATH

Try Again

# bundle install --without development test

無事完了。

 

5.Redmineの初期設定

# bundle exec rake generate_secret_token
# RAILS_ENV=production bundle exec rake db:migrate

すると下記エラー

Mysql2::Error: Specified key was too long; max key length is 767 bytes: CREATE UNIQUE INDEX `unique_schema_migrations` ON `schema_migrations` (`version`)

MySQLのcharsetを「utf8mb4」にしたのが影響したらしい。ちょっと後悔。下記サイトを参考に設定する。

# vi /etc/my.cnf

# for Redmine
innodb_file_format = Barracuda
innodb_file_per_table = 1
innodb_large_prefix

# /etc/rc.d/init.d/mysqld restart

# vi config/initializers/adapt_utf8mb.rb

ActiveSupport.on_load :active_record do
  module ActiveRecord::ConnectionAdapters

    class AbstractMysqlAdapter
      def create_table_with_innodb_row_format(table_name, options = {})
        table_options = options.reverse_merge(:options => 'ENGINE=InnoDB ROW_FORMAT=DYNAMIC')
        create_table_without_innodb_row_format(table_name, table_options) do |td|
          yield td if block_given?
        end
      end
      alias_method_chain :create_table, :innodb_row_format
    end

  end
end

Try Again

# RAILS_ENV=production bundle exec rake db:migrate

無事完了。

 

6.unicornのインストール

unicornというソフトでHTTPサーバー立てて、nginxでリバースプロキシを設定するのが一般的らしい。

下記を参考に。

 

# gem install unicorn

# vi config/unicorn.rb

# vi /etc/rc.d/init.d/redmine

# chmod 755 /etc/rc.d/init.d/redmine

実行してみる。

# /etc/rc.d/init.d/redmine start

すると下記エラー

/usr/local/lib/ruby/gems/2.1.0/gems/bundler-1.5.3/lib/bundler/rubygems_integration.rb:240:in `block in replace_gem': unicorn is not part of the bundle. Add it to Gemfile. (Gem::LoadError)
        from /usr/local/bin/unicorn_rails:22:in `<main>'

Gemfileにunicornを追加しろと怒られた。

# vi Gemfile

gem 'unicorn'

「gem install unicorn」せずにGemfileを編集して「bundle install」する方がよかったみたい。

Try Again

# /etc/rc.d/init.d/redmine start

無事起動したみたい。自動起動するようにしておく。

# chkconfig --add redmine
# chkconfig redmine on

 

7.nginxの設定

# cd /etc/nginx/conf.d/
# vi redmine.conf

server {
    listen       80;
    server_name  dev.hoge.jp;

    access_log /var/log/nginx/redmine.access.log;
    error_log /var/log/nginx/redmine.error.log;

    location = /robots.txt  { access_log off; log_not_found off; }
    location = /favicon.ico { access_log off; log_not_found off; }

    ### Reverse Proxy for Redmine on Unicorn
    location / {
        rewrite ^/(.*)$ /$1 break;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_pass http://127.0.0.1:5001;
    }
}

# /etc/rc.d/init.d/nginx configtest
# /etc/rc.d/init.d/nginx reload

ブラウザでアクセスしてredmineの画面が表示出来るか確認。

 

8.移行元からデータを移行

下記サイトを参考にしながら。

移行先データベースのテーブルを全削除して、「1.バックアップ」で作成した移行元のテーブルをインポートする。

phpMyAdminで実行したので省略。

データベースの更新

# cd /opt/redmine/
# rake db:migrate RAILS_ENV="production"

キャッシュとセッションファイルのクリア

# rake tmp:cache:clear
# rake tmp:sessions:clear

サーバの再起動

# /etc/rc.d/init.d/redmine restart

ブラウザからアクセスして表示出来るか確認。

※添付したファイルがあるなら、それも移行先にコピーする必要あり。
※SMTPの設定も忘れずに。

 

< 2014/02/27 Modified >
新しいチケットを作成しようとしたらInternal Errorが発生。ログを見ると

ActiveRecord::StatementInvalid (Mysql2::Error: Column 'position' cannot be null:

issuesテーブルのpositionにNULLを許可してないのが原因らしい。

調べてみるとBacklogsプラグインをインストールすると直るという情報を見つけた。けど、今回はphpMyAdminでNULLを許可するだけで応急処置。

 

< Related Posts >