LoginSignup
36
34

More than 5 years have passed since last update.

CentOS 6.3にRedmine + Unicorn + nginxな環境を構築する手順

Last updated at Posted at 2012-12-26

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に以下の設定を追記する。

/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を作成し以下を記述する。

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を以下の用に書き換える。

/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を付加するようにしている。

/etc/init.d/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という名前で作成する。)

/etc/nginx/conf.d/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ポートを空けておくのを忘れずに。)

かなり、大急ぎで書いたので間違いがあるかもしれません。

36
34
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
36
34