・Redmineのアップグレード(3.1→3.2)とGoogle認証プラグイン
今回は完全なサーバーのお引越しです。
引越前
- Apache + Passanger + ruby 1.9 + Redmine 3.2 (RHEL 5)
引越後
- Nginx + Unicorn + ruby 2.3 + Redmine 3.3 (RHEL 6)
Nginxは LibreSSLを使っていますが、RHEL 6標準の opensslも入れています。
このあたりもあって話がややこしく、、、いやいやチャレンジ精神旺盛でしょ!?
このあたりもあって話がややこしく、、、いやいやチャレンジ精神旺盛でしょ!?
1. Ruby 2.3 導入編
RHEL 6の Rubyは 1.8.7と Redmine が要求する 1.9に対応していません。ので新しいRubyのインストールが必要です。
1.1 Rbenvのインストール
RHEL 6には ruby 1.8.7が入っています。
これを削除してもいいのですが、今回 rbenv ツールにてバージョン管理することにしました。
これを削除してもいいのですが、今回 rbenv ツールにてバージョン管理することにしました。
参考:rbenvのインストール on CentOS(http://www.e-mist.com/)
インストール場所: /usr/local/rbenv
cd /usr/local
git clone git://github.com/sstephenson/rbenv.git
cd rbenv
mkdir plugins
cd rbenv
mkdir plugins
cd plugins
git clone git://github.com/sstephenson/ruby-build.git
以下は、ユーザーが rbenvをつかってrubyのバージョンを切り替える場合です。
redmine グループを作成して、そこに使えるユーザーをいれておくという感じです。ここでは詳しく説明しません。 root(sudo)だけしか切り替えなくていいぜ!ってかたは不要です。
redmine グループを作成して、そこに使えるユーザーをいれておくという感じです。ここでは詳しく説明しません。 root(sudo)だけしか切り替えなくていいぜ!ってかたは不要です。
chgrp -R redmine /usr/local/rbenv
chmod -R g+rwxXs /usr/local/rbenv
1.2 Rbenvをつかうための環境設定
bash系
/etc/profile
export RBENV_ROOT=/usr/local/rbenv
export PATH="$RBENV_ROOT/shims:$RBENV_ROOT/bin:$PATH"
eval "$(rbenv init -)"
csh系
/etc/csh.cshrc
/etc/csh.cshrc
setenv RBENV_ROOT /usr/local/rbenv
setenv PATH $RBENV_ROOT/shims:$RBENV_ROOT/bin:${PATH}
rbenv rehash
これでログインしなおします。
1.3 必要なパッケージのインストール
以下、CentOS/RHEL に Ruby 2.x をインストールする(http://dotnsf.blog.jp/)を参照
yum install libyaml-devel
yum install libffi-devel
yum groupinstall 'Development tools'
この3つは必須でした。
1.4 Rbenv より Rubyをインストール
rbenv install -l
で扱える最新版をチェック。Rubyのサイトの最新版にもっとも近いものをチェックします。今回は、2.3.1と最新版がいけました。
RUBY_CONFIGURE_OPTS=--with-openssl-dir=/usr/local rbenv install 2.3.1
LibreSSLを /usr/local 以下に展開して、 OpenSSLを /usr 以下に展開しています。
そのためか、上記の --with-openssl-dir を指定しないと
そのためか、上記の --with-openssl-dir を指定しないと
- make[2]: *** [ossl_ssl.o] Error 1
というエラーがでました。
また、1.3 の必要なパッケージが足りないと
また、1.3 の必要なパッケージが足りないと
- make[1]: *** Waiting for unfinished jobs....
といってインストールが止まります。
ここで結構時間がかかりました。
1.5 Rbenv より Rubyの設定
rbenv global 2.3.1
ruby -v
として 2.3.1と出てくれば成功です。
ここで「1.2 Rbenvを使うための環境設定」でハマりました。
- パスに「$RBENV_ROOT/shims」をいれよ!
これネットで情報がなかったのですよね。そのまま鵜呑みにしていたら ruby -v であれ、反映されないじゃん!!ってなりました。ふ〜
さて第1関門になる Rubyのインストールはできましたか。
じゃあ第2関門へレッツゴー
2. Redmine 3.3 のインストール
参考:http://qiita.com/akito1986/items/a0d4d8a7a59c8588e0f1(http://quita.com)
インストール場所:/usr/local/redmime-svn/3.3-stable
Nginxで指定する場所:/usr/local/redmine-svn/redmine (/usr/local/redmime-svn/3.3-stable へのシンボリックリンク)
※ ln -s /usr/local/redmime-svn/3.3-stable /usr/local/redmine-svn/redmine のこと
※ ln -s /usr/local/redmime-svn/3.3-stable /usr/local/redmine-svn/redmine のこと
とします。
インストールする場所と、Nginxが見る場所を変更しているのは、Redmineをアップグレードする際に楽のためです。アップグレードは、 /usr/local/redmime-svn/◯.◯-stable にRedmineをダウンロードして設定やデータを移行(コピー)して、 /usr/local/redmine-svn/redmine --> /usr/local/redmime-svn/◯.◯-stable にしておけば、 Nginxの設定はいじらなくてすむぜ(/usr/local/redmine-svn/redmine をみているので)っていう感じで。
2.1 Redmine 3.3のダウンロード
mkdir /usr/local/redmine-svn
cd /usr/local/redmine-svn
svn co https://svn.redmine.org/redmine/branches/3.3-stable/
ln -s 3.3-stable redmine
2.2 データの移行
移行する場合のみ
※バックアップについては「Redmineのアップグレード(3.1→3.2)とGoogle認証プラグイン」をチェックしてみてください。
データベースの移行
これは何も置換せず、そのまま新しいサーバーへ移行してください。
cp -p database.yml 3.3-stable/config/
cp -p configuration.yml 3.3-stable/config/
上記ファイルについては、データベース・アクセス情報、メール通知情報など変更点があるなら設定変更しておいてください。
cp -rp files/* 3.3-stable/files/
cp -rp plugins/* 3.3-stable/plugins/
cp -rp public/themes/* 3.3-stable/public/themes/
バックアップ元から上記3つのフォルダをコピーしてください。
2.3 Redmine が必要とする機能のインストール
cd /usr/local/redmine-svn/3.3-stable
gem install bundler --no-rdoc --no-ri
bundle install --without development test
bundle exec rake generate_secret_token
エラー無くRedmine 3.3のインストールはできましたか。
ここでハマるとまた相当時間がかかります。
さぁ、ここまできたら、第3関門の登場です!
3. Unicornの導入と起動
Nginxで Redmine を動作させるためには Railsサーバーが必要です。Unicornが軽くて良いらしいのでこれを使います。
3.1 Unicornのインストール
cd /usr/local/redmine-svn/3.3-stable
vi Gemfile
末尾に
gem 'unicorn'
を追加して保存
bundle update
※Gemfile.local に保存して対応するのが推奨されていますが、ここでは割愛。
3.2 Unicorn の一時起動テスト
Unicorn自体にウェブサーバー機能があります。
ただあくまで動作テストであり、本番環境には耐えられないから使わないように!ということです。
ただあくまで動作テストであり、本番環境には耐えられないから使わないように!ということです。
bundle exec unicorn_rails -l 3000 -E production
これで http://◯◯:3000 で Redmineが起動しているはずです!
これが動作しないなら、正しく Unicornがインストールできていないことになります。
ただし iptablesの設定で上記の場合には 3000/tcp に対して一時的にアクセス許可をしておいてください。
3.3. Unicornの起動設定
いろいろネットに出ていますが、私は、「Unicornの設定のまとめ」に掲載されているものをそのまま使いました。気をつけるところは「worker_processes」の値です。私も2 CPUだったのでそのままにしています。CPU数に応じて変更してみてください。
/usr/local/redmine-svn/3.3-stable/config/unicorn.rb
に保存します。
3.3. Unicornの起動スクリプトの生成
いろいろネットに出ていますが、私は、「RedmineをCentOS_6上で動かすーUnicornとNginx編(www.torutk.com)」に掲載されているものをそのまま使いました。
/etc/init.d/unicorn に保存します。
chmod 700 /etc/init.d/unicorn
mkdir /etc/unicorn
vi /etc/unicorn/redmine.conf
RAILS_ENV=production
RAILS_ROOT=/usr/local/redmine-svn/redmine
とします。
3.4. Unicornの起動スクリプトの登録
「RedmineをCentOS_6上で動かすーUnicornとNginx編(www.torutk.com)」参考に
/sbin/chkconfig --add unicorn
/sbin/chkconfig unicorn on
で自動起動になります。
3.5 Unicornの起動
service unicorn start
で起動します。
/usr/local/redmine-svn/redmine/log/
以下がログになっていて、 production.log が通常ログ、 unicorn_stderr.log がエラーログになります。
さぁ、ここまできたらもうひと踏ん張り!!
4. Nginx の設定
4.1 redmine 用の upstream設定の追加
「Unicornの設定のまとめ」の設定をしたと過程すると
/etc/nginx/nginx.conf
upstream redmine {
server unix:/usr/local/readmine-svn/redmine/tmp/unicorn.sock;
}
を追加してください。
後は https://◯◯:3000 で動作させることにします。
サブディレクトリで動作させるのは敷板が高く(基本サブディレクトリでは動作しない)、結局あきらめました。
ActionController::RoutingError (No route matches [GET] "/redmine"):
など出て。
など出て。
server {
listen 3000 ssl http2;
server_name ◯◯;
ssl on;
charset utf-8;
root /usr/local/redmine-svn/redmine/public;
access_log ログの場所 main;
error_log エラーログの場所;
ssl_certificate 証明書(中間証明書含む).cer;
ssl_certificate_key 証明書(秘密鍵).key;
※暗号化強度設定
※各種制限等をいれる(ただし画像に対して expires はいれないこと。Redmineではそれいれると画像が Not foundになってしまう)
try_files $uri/index.html $uri @unicorn;
location @unicorn{
proxy_pass http://redmine;
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;
}
}
Nginxの設定は構成によって違ってくるので、とりあえず基本的な部分のみ書き出しておきます。
これで Nginxを読み込み直すと、
- https://◯◯:3000
でRedmineが起動したでしょう!
※アクセスできなければ iptables 等 3000/tcp へのアクセスを許可しておいてください。
Google認証プラグイン導入時には
初めて使うなら、【まめ知識】RedmineでGoogle Apps認証!を参考。
そうでないなら https://cloud.google.com/console より、すでに設定したものの APIと認証、認証情報にある「リダイレクト URI」に
http://◯◯:3000/oauth2callback
https://◯◯:3000/oauth2callback
の2つを登録しておく。何故か https:// だけではダメだった。原因追求は時間がないのでとりあえず放置。
Unicornを monitで監視
monitを入れているなら、設定しておくといいでしょう。
Unicornがトラブルで落ちた時に再度起動しなおして通知してくれます。
Unicornがトラブルで落ちた時に再度起動しなおして通知してくれます。
/etc/monit.d/unicorn.conf
check process unicorn with pidfile /usr/local/redmine-svn/redmine/tmp/pids/unicorn.pid
start program = "/etc/init.d/unicorn start"
stop program = "/etc/init.d/unicorn stop"
if 5 restarts within 5 cycles then timeout
group unicorn
あたりで十分でしょう。
そしてmonitを設定を読み込みなおします。
Unicornのログローテート
ログ結構たまるので logrotateにてログ整理しておくとよいです。
古いログは
/usr/local/redmine-svn/redmine/log/old フォルダにいれることにします。
mkdir /usr/local/redmine-svn/redmine/log/old
/etc/logrotate.d/unicorn
/usr/local/redmine-svn/redmine/log/*.log {
missingok
notifempty
olddir /usr/local/redmine-svn/redmine/log/old
postrotate
/sbin/service unicorn rotate > /dev/null 2>&1 || :
endscript
}
「RedmineをCentOS_6上で動かすーUnicornとNginx編(www.torutk.com)」にある起動スクリプトには、 ログローテートに対応したオプション rotateが備わっているので楽です。なければ /usr/local/redmine-svn/redmine/tmp/pids/unicorn.pid のプロセスに対して kill -USR1 をしてログの読み込み直しをします。
logrorate /etc/logrotate.conf
として設定を追加し、/var/lib/logrotate.status
にログ対象が追加されていることを確認してください。
つまりは、/usr/local/redmine-svn/redmine/log/ フォルダにある拡張子 logファイルが登録されているかどうかです。
これで完了ですね!
2016年6月8日 @kimipooh
0 件のコメント:
コメントを投稿