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