Ruby + Redmine + UnicornをInstallしてALMiniumから移行
AWSの無料期間が終わるので、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
目次
- バックアップ
- 移行先に最新のRubyをインストール
- Redmine用のデータベース作成
- Redmineのインストール
- Redmineの初期設定
- unicornのインストール
- nginxの設定
- 移行元からデータを移行
参考
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... noCan'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::ConnectionAdaptersclass 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
endend
end
Try Again
# RAILS_ENV=production bundle exec rake db:migrate
無事完了。
6.unicornのインストール
unicornというソフトでHTTPサーバー立てて、nginxでリバースプロキシを設定するのが一般的らしい。
下記を参考に。
- さくらVPSで nginx + MySQL + Unicorn + Redmine の運用 - コードを舐める日々
- Ubuntu12.04 LTS + Nginx + MySQLでRedmineを動かすメモ | ブログ :: Web notes.log
# 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 >