Debian jessieにRedmineをインストールする
環境
- debian jessie 8.0
- debianマシンはすでに用意してあるものとする。
- redmine 2.6.5
- backlogs 1.0.6
手順
redmine本体
必要なツール類をインストールする。MySQLを使うことが多いのだが、個人的な好みによりPostgreSQLを使用することにする。
% sudo apt-get install postgresql ruby ruby-dev ruby-pg libpq-dev \
make build-essential gcc \
imagemagick libmagickwand-dev git-core subversion
PostgreSQLに接続してユーザやDBの作成を行う。password
の部分はもちろん変更すべし。パスワードに記号が入っているとredmineで接続できない場合があるので、英数に限定する方がいいかも。
% sudo -u postgres psql
postgres# CREATE ROLE redmine LOGIN ENCRYPTED PASSWORD 'password' NOINHERIT VALID UNTIL 'infinity';
postgres# CREATE DATABASE redmine WITH ENCODING='UTF8' OWNER=redmine;
postgres# \q
Linuxにユーザredmine
を追加する。
% sudo adduser --disabled-login --gecos 'Redmine' redmine
パスワードを設定しておく。
% sudo passwd redmine
sudoグループにユーザredmine
を加えておく。Debianではvisudo
でユーザを追加せず、このグループにユーザを追加するだけでsudoできるように設定されている。
% sudo vi /etc/group
...
sudo:x:27:redmine ← ★redmineを追加する
...
Redmineの公式webからソースをゲットする。Backlogsは2.2.4と2.3.2に対応と書かれているが、今回は執筆時点での最新版2.6.5にBacklogsを導入するという暴挙に出る。
sudo -u redmine
を多用するのでaliasしておく。
% alias sr='sudo -u redmine'
% cd /home/redmine
% sr wget http://www.redmine.org/releases/redmine-2.6.5.tar.gz
% sr tar zxvf redmine-2.6.5.tar.gz
% sr ln -s redmine-2.6.5 redmine
% cd redmine
database.ymlのテンプレートをコピーし、設定を施す。
MySQLの設定をコメントアウトしてPostgreSQLの設定を有効化し、設定を変更する。 testもコメントアウトしてしまってOK。
% sr cp config/database.yml.example config/database.yml
% sr vi config/database.yml
...
production:
adapter: postgresql
database: redmine
host: localhost
username: redmine ← ★postgresになっているので変更する
password: "password" ← ★パスワードは最初にPostgreSQLに設定したもの。
...
bundlerを導入してbundleする。システムのrubyを使っているのでbundlerはsudoで入れてしまう。
% sudo gem install bundler
% sr bundle install --without development test
つづいてrake。
% sr rake generate_secret_token
% sr RAILS_ENV=production rake db:migrate
% sr RAILS_ENV=production rake redmine:load_default_data
Select Language: ja ← ★日本語を指定
試しにサーバを動かしてみる。
% sr ruby script/rails server webrick -e production
この状態でhttp://debianサーバ:3000/
に接続して、redmineが見られればOK。
Ctrl-Cでサーバを停止できる。
ログ消去
ログが永遠に作成されたら嫌なので、logrotateを使って自動的に消去する。
% sudo vi /etc/logrotate.d/redmine
/home/redmine/redmine/log/*.log {
rotate 3
size 1M
compress
missingok
notifempty
copytruncate
}
テストしてみる。
% sudo logrotate -dv /etc/logrotate.conf
nginx + unicornにする
WEBrickを使うのはアレなのでnginxに乗っける。
まずはunicornをbundleする。
% sr vi Gemfile.local
gem "unicorn"
unicornの設定ファイルを作成する。
% sr vi config/unicorn.rb
worker_processes 2
working_directory "/home/redmine/redmine"
listen File.expand_path("tmp/unicorn.sock", ENV['RAILS_ROOT'])
listen "127.0.0.1:8079", :tcp_nopush => true
pid File.expand_path("tmp/unicorn.pid", ENV['RAILS_ROOT'])
timeout 60
preload_app true
stdout_path File.expand_path("log/unicorn.stdout.log", ENV['RAILS_ROOT'])
stderr_path File.expand_path("log/unicorn.stderr.log", ENV['RAILS_ROOT'])
GC.respond_to?(:copy_on_write_friendly=) and GC.copy_on_write_friendly = true
before_fork do |server, worker|
defined?(ActiveRecord::Base) and ActiveRecord::Base.connection.disconnect!
old_pid = "#{server.config[:pid]}.oldbin"
if old_pid != server.pid
begin
sig = (worker.nr + 1) >= server.worker_processes ? :QUIT : :TTOU
Process.kill(sig, File.read(old_pid).to_i)
rescue Errno::ENOENT, Errno::ESRCH
end
end
sleep 1
end
after_fork do |server, worker|
defined?(ActiveRecord::Base) and ActiveRecord::Base.establish_connection
end
initスクリプトを作成する。上の方の設定は自信無い。
% sudo vi /etc/init.d/redmine
#!/bin/sh
### BEGIN INIT INFO
# Provides: redmine
# Required-Start: $local_fs $remote_fs $network $syslog
# Required-Stop: $local_fs $remote_fs $network $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: redmine unicorn
# Description: redmine unicorn
# chkconfig: - 75 25
### END INIT INFO
export PATH=/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin
# move to project root directory
NAME=redmine
ENVIROMENT=production
APP_USER="redmine"
ROOT_DIR="/home/redmine/redmine"
PID="${ROOT_DIR}/tmp/unicorn.pid"
CONF="${ROOT_DIR}/config/unicorn.rb"
start()
{
if [ -e $PID ]; then
echo "$NAME already started";
exit 1;
fi
echo "start $NAME";
cd $ROOT_DIR
sudo -u ${APP_USER} -H bundle exec unicorn_rails -c ${CONF} -E ${ENVIROMENT} -D
}
stop()
{
if [ ! -e $PID ]; then
echo "$NAME not started";
exit 1;
fi
echo "stop $NAME";
kill -QUIT `cat ${PID}`
rm -f $PID
}
force_stop()
{
if [ ! -e $PID ]; then
echo "$NAME not started";
exit 1;
fi
echo "stop $NAME";
kill -TERM `cat ${PID}`
rm -f $PID
}
reload()
{
if [ ! -e $PID ]; then
echo "$NAME not started";
start
exit 0;
fi
echo "reload $NAME";
kill -HUP `cat ${PID}`
}
restart()
{
stop
start
}
case "$1" in
start)
start
;;
stop)
stop
;;
force-stop)
force_stop
;;
reload)
reload
;;
restart)
restart
;;
*)
echo "Syntax Error: release [start|stop|force-stop|reload|restart]"
;;
esac
permissionを設定し、スタートしておく。
% sudo chmod 755 /etc/init.d/redmine
% sudo /etc/init.d/redmine start
自動起動設定もしておく。
% sudo update-rc.d redmine defaults
nginxをインストールし、redmineサイト用の設定ファイルを追加する。
% sudo apt-get install nginx
% sudo vi /etc/nginx/sites-available/redmine
upstream redmine {
server 127.0.0.1:8079;
}
server {
listen 80;
server_name redmine.hogehoge.com; ← ★ここは自分のものにあわせて変更する
server_tokens off;
root /home/redmine/redmine;
client_max_body_size 20m;
# individual nginx logs for this gitlab vhost
access_log /var/log/nginx/redmine_access.log;
error_log /var/log/nginx/redmine_error.log;
location / {
try_files $uri $uri/index.html $uri.html @redmine;
}
location @redmine {
proxy_redirect off;
proxy_set_header X-FORWARDED_PROTO $http_x_forwarded_proto;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $http_x_forwarded_for;
proxy_set_header X-Forwarded-For $http_x_forwarded_for;
proxy_pass http://redmine;
proxy_intercept_errors on;
error_page 404 /404.html;
error_page 422 /422.html;
error_page 500 502 503 504 /500.html;
}
}
サイトを有効化してnginxを起動する。
% cd /etc/nginx/sites-enabled
% sudo ln -s ../sites-available/redmine
% sudo /etc/init.d/nginx restart
この状態でhttp://debianサーバ/
でredmineにアクセスできるはず。
Backlogsプラグイン
Redmineの設定
Backlogsの導入時にはBacklogs用のトラッカーを設定する必要があるので、Redmineの設定をしておく。
まずはRedmineにログインする。管理者の初期設定は、ユーザ・パスワードともにadmin
となっている。
「管理>ユーザー」からユーザadmin
のパスワードを必ず変更する。
ロールと権限
必要なものを登録しておく。
複雑にすると使いにくくなるので、個人的には以下の設定で十分だと思う。
- 管理者 → 「メンバー」に名前変更
- 開発者 → 削除
- 報告書 → 削除
トラッカー
「管理>トラッカー」から以下のトラッカーを追加する。最初からあるものは消してしまっても構わない。バグは最初からあるものを使って構わない。
- タスク
- ストーリー
- バグ
- 課題
チケットのステータス
「管理>チケットのステータス」から以下のステータスを作成する。最初からあるものは消す。
- Todo(デフォルト値)
- Doing
- Done(終了したチケット)
ワークフロー
全部のトラッカーに関してステータスを相互に変更できるように設定する。使い方にもよるが、基本的には非メンバや匿名ユーザは変更できないようにしてしまって問題ない。
Backlogsの組込み
最新版を取得してくる。
% alias sr="sudo -u redmine"
% cd /home/redmine/redmine/plugins
% sr git clone git://github.com/backlogs/redmine_backlogs.git
redmineに導入する。
% cd redmine_backlogs
% sr RAILS_ENV=production bundle install --without development test
% cd ../..
% sr RAILS_ENV=production bundle install --without development test
% sr RAILS_ENV=production bundle exec rake db:migrate
% sr RAILS_ENV=production bundle exec rake tmp:cache:clear
% sr RAILS_ENV=production bundle exec rake tmp:sessions:clear
% sr RAILS_ENV=production bundle exec rake redmine:backlogs:install
Which trackers do you want to use for your stories?
1. タスク
2. ストーリー
3. バグ
4. 課題
Separate values with a space (e.g. 1 3): 2 ← ★先ほど作った「ストーリー」を選択
Which tracker do you want to use for your tasks?
1. タスク
2. バグ
3. 課題
Choose one from above (or choose none to create a new tracker): 1 ← ★先ほど作った「タスク」を選択
これでBacklogsが使えるようになっているはず。
最終的に「管理>情報」では以下のように表示された。
Environment:
Redmine version 2.6.5.stable
Ruby version 2.1.5-p273 (2014-11-13) [x86_64-linux-gnu]
Rails version 3.2.21
Environment production
Database adapter PostgreSQL
SCM:
Subversion 1.8.10
Git 2.1.4
Filesystem
Redmine plugins:
redmine_backlogs v1.0.6