0. 前提条件
rubyがインストールされていることは前提として記載する。
作業はrootで実施。
1. MySQLのインストール
RedmineのデータベースにMySQLを利用したいため、インストールする。ここでは 5.5系のバージョンのMySQLをインストールするためにremiリポジトリを追加する。
rpm -ivh http://ftp.jaist.ac.jp/pub/Linux/Fedora/epel/6/x86_64/epel-release-6-7.noarch.rpm
rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
* remiパッケージはepelパッケージに依存するためepelリポジトリを先に追加する。
作成された/etc/yum.repos.d/remi.repo
をvimなどで開きenable=1
に変更する。
yum install -y mysql mysql-lib mysql-devel mysql-server
でMySQLをインストールする。
インストールが完了したら設定ファイルを/etc/my.cnfにコピーする
cp -af /usr/share/mysql/my-medium.cnf /etc/my.cnf
chkconfig
でサービスとしてmysqlを起動する設定をし、サービスを起動する。
chkconfig mysqld on
service mysqld start
動作を確認する場合は
mysql -u root -e 'select user,host from mysql.user'
などで行えばOK.
2. Redmine用データベースとユーザをMySQLに追加
MySQLのインストールが済んだら、Redmine用のデータベースとユーザを作成する。
まず、DBのcharsetをutf8に設定する。
/etc/my.cnf
に以下の設定を追記する。
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
character-set-server=utf8 #=> この行を追加
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
[mysql]
default-character-set=utf8 #=>この行を追加
文字セットの設定をしたら、MySQLを起動する。
service mysqld start
起動したら、Redmine用データベースとユーザを追加する。
mysql -uroot
mysql> CREATE DATABASE redmine DEFAULT CHARACTER SET utf8;
Query OK, 1 row affected (0.00 sec)
mysql> SHOW DATABASES;
で確認するとredmineというDBができているはず。
次に、redmineデータベースにアクセス権限を持つユーザを作成する。
mysql> GRANT ALL ON redmine.* TO redmine@'localhost' IDENTIFIED BY 'hogehoge';
mysql> FLUSH PRIVILEGES;
hogehoge
の部分はパスワード。
3. Redmine本体のインストール
ソースはどのような方法で手に入れても良いと思うが、今回はGithubのリポジトリをcloneして利用する。
インストール先はRedmineのインストールガイドに従い、/var/lib下にする。
cd /var/lib/
git clone https://github.com/redmine/redmine.git redmine
cd redmine
インストールしたいバージョンのブランチへ切り替える。
git checkout -b 2.1-stable remotes/origin/2.1-stable
bundler
で依存gemをインストールする。developグループやtestグループ、利用しないpostgresqlとsqlite3のアダプタ等はインストールしない。
bundle exec install --path vendor/bundle --without development test postgresql sqlite
セッションデータの暗号化鍵を生成する。
bundle exec rake generate_secret_token
データベース構築
RAILS_ENV=production bundle exec rake db:migrate
ここまでで一度、Webrickで動作を確認しておく。
(iptablesを使用している場合、ポート3000番をあけておく。)
bundle exec rails s -e production
4. Unicornをインストールする
unicornはbundlerでインストールする。
Gemfile.localを作成し以下を記述する。
gem 'unicorn'
Gemfile.localを編集し終えたらbundle install
を実行する。
5. Unicornの設定 & サービス化
unicornの設定をする。
設定はgithub上のサンプルを利用させて頂き、必要な部分を変更する。(もちろん、自分で書いてもOK)
cd /var/lib/redmine/config/
wget -O unicorn_redmine.rb https://raw.github.com/defunkt/unicorn/master/examples/unicorn.conf.rb
vim unicorn_redmine.rb
今回はhttp://ホスト名/redmineというサブディレクトリでの運用を考えているため、サブディレクトリ用の設定をする。
/var/lib/redmine/config.ruを以下の用に書き換える。
if ENV['RAILS_RELATIVE_URL_ROOT'] #=> 追加
map ENV['RAILS_RELATIVE_URL_ROOT'] do #=>追加
run RedmineApp::Application #=> 追加
end #=> 追加
else #=> 追加
run RedmineApp::Application
end #=> 追加
で、unicorn起動時に --path /redmine
を付加すると、ENV['RAILS_RELATIVE_URL_ROOT']
に/redmine
が入ってきて、
http://ホスト名/redmineでアクセスできるという寸法。
次に、起動スクリプトを用意する。Web上にあるサンプル等を利用させて頂いて作成すれば良いと思う。今回はサブディレクトリの運用を考えているので、unicorn起動時に上述の--path /redmine
を付加するようにしている。
#!/bin/bash
#
# redmine Startup script for unicorn.
#
# chkconfig: - 86 15
# description: redmine on unicorn start/stop script.
#
# set rbenv environment valiables
#
export PATH=/usr/local/bin:/usr/bin:/usr/local/rbenv/versions/1.9.3-p327/bin
export RUBY_HOME=/usr/local/rbenv/versions/1.9.3-p327
set -u
set -e
APP_NAME=redmine
APP_ROOT="/var/lib/$APP_NAME"
CONFIGS="$APP_ROOT/config/unicorn_redmine.rb"
PID="$APP_ROOT/config/shared/pids/unicorn.pid"
ENV=production
UNICORN_OPTS="-D -E $ENV -c $CONFIGS --path /redmine -p 8080"
old_pid="$PID.oldbin"
cd $APP_ROOT || exit 1
sig(){
test -s "$PID" && kill -$1 `cat $PID`
}
oldsig(){
test -s $old_pid && kill -$1 `cat $old_pid`
}
case $1 in
start)
sig 0 && echo >&2 "Already running" && exit 0
cd $APP_ROOT ; bundle exec unicorn_rails $UNICORN_OPTS
;;
stop)
sig QUIT && exit 0
echo >&2 "Not running"
;;
force-stop)
sig TERM && exit 0
echo >&2 "Not running."
;;
restart|reload)
sig HUP && echo reloaded OK && exit 0
echo >&2 "Couldn't reload, starting instead"
bundle exec unicorn_rails $UNICORN_OPTS
;;
upgrade)
sig USR2 && exit 0
echo >&2 "Couldn't upgrade, starting instead"
bundle exec unicorn_rails $UNICORN_OPTS
;;
rotate)
sig USR1 && echo rotated logs OK && exit 0
echo >&2 "Couldn't rotate logs" && exit 1
;;
*)
echo >&2 "Usage: $0 <start|stop|restart|upgrade|rotate|force-stop>"
exit 1
;;
esac
記載したら、chmod 755 /etc/init.d/redmine
で実行権限を与えておく。
起動スクリプトを作成したのでchkconfigに追加しておく。
chkconfig --add redmine
chkconfig redmine on
chkconfig --list redmine
redmine 0:off 1:off 2:on 3:on 4:on 5:on 6:off
実際にサービスを起動する。
service redmine start
6.nginxのインストール & 設定
nginxのインストールを行う。ソースからビルドするのもありだと思うが、今回はepelのパッケージを利用する。
yum install -y nginx
/etc/nginxにインストールされるので、/etc/nginx/conf.d/にredmine用の設定を記載する。(後で別のアプリケーションもサブディレクトリを別にして同一のサーバ上で動かす予定であるので、今回はdevelopment.confという名前で作成する。)
upstream redmine {
server hostname:8080;#hostnameは環境に合わせて書き換える
}
server {
listen 80;
server_name hostname; #hostnameは環境に合わせて書き換える
root /var/www;
location /redmine {
try_files $uri $uri.html $uri/index.html @redmine;
}
location @redmine{
#error_log /var/www/redmine/log/error.log;
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://redmine;
}
}
nginxのドキュメントルートを/var/wwwに設定したので、redmineのpublicディレクトリのシンボリックリンクを作成しておく。
(静的ファイルはnginxに返してほしいから)
ln -s /var/lib/redmine/public redmine
あとはnginx -t
で問題なければservice nginx restart
でnginxを再起動してhttp://ホスト名/redmineにアクセスしてみる。(iptablesを利用している場合は80ポートを空けておくのを忘れずに。)
かなり、大急ぎで書いたので間違いがあるかもしれません。