FreeBSDでRedmineを動かす(FreeBSD+nginx+thin+Redmine+SQLite3)

 前回nginxとRedmineのインストールが終わったので、引き続き、設定に移る。

 Redmineredmineアカウントで動かすので*1、まず、redmineユーザーとredmineグループを作成しておく。

thin

 Redmine用の設定ファイル/usr/local/etc/thin/redmine.ymlを作成する。

---
group: redmine
pid: tmp/pids/thin.pid
wait: 30
timeout: 30
log: log/thin.log
max_conns: 1024
require: []
environment: production
max_persistent_conns: 512
servers: 4
user: redmine
daemonize: true
socket: /tmp/thin/redmine.sock
chdir: /usr/local/www/redmine

 thinコマンドにファイルを作成させることもできる。

# thin -C /usr/local/etc/thin/redmine.yml -u redmine -g redmine -e production -s 4 --socket /tmp/thin/redmine.sock -c /usr/local/www/redmine -d

 ソケットのためのテンポラリディレクトリを作成する。

# mkdir /tmp/thin
# chmod a+rwx /tmp/thin

 試しに動かしてみる。

# thin -C /usr/local/etc/thin/redmine.yml start

 しばらくしてから、redmineユーザーのソケットが4つあることをsockstatで確認する。

# sockstat
USER     COMMAND    PID   FD PROTO  LOCAL ADDRESS         FOREIGN ADDRESS
redmine  ruby18     1685  7  stream /tmp/thin/redmine.3.sock
redmine  ruby18     1681  7  stream /tmp/thin/redmine.2.sock
redmine  ruby18     1677  7  stream /tmp/thin/redmine.1.sock
redmine  ruby18     1673  7  stream /tmp/thin/redmine.0.sock

# thin -C /usr/local/etc/thin/redmine.yml stop

 OSのブート時にthinが自動的に起動するように、/usr/local/etc/rc.d/thinを作成する。いろいろなサイトに

# thin install

で/etc/init.d/thinが作成できると書いてあるが、筆者の環境ではinstallコマンドを認識しなかった。そのため、何かのスクリプトを元にして自分で書いてみた。

#!/bin/sh
PROVIDES=thin
THIN=/usr/local/bin/thin

cmd=$1

thin_start() {
    echo "Starting $PROVIDES..."
    $THIN -C /usr/local/etc/thin/redmine.yml start
}

thin_stop() {
    echo "Killing $PROVIDES..."
    $THIN -C /usr/local/etc/thin/redmine.yml stop
}

thin_restart() {
    echo "Restarting $PROVIDES..."
    $THIN -C /usr/local/etc/thin/redmine.yml restart
}

thin_help() {
    echo "Usage: $0 {start|stop|restart}"
}

case ${cmd} in
[Ss][Tt][Aa][Rr][Tt]) thin_start;;
[Ss][Tt][Oo][Pp]) thin_stop;;
[Rr][Ee][Ss][Tt][Aa][Rr][Tt]) thin_restart;;
*) thin_help;;
esac

nginx

 nginxからthin経由でRedmineに接続するようにnginxを設定する。/usr/local/etc/nginx/nginx.confファイルのhttpセクションの最後の部分に、以下のように追記する。

server {
  listen 8080;
  server_name redmine.example.com;
  root /usr/local/www/nginx;
  proxy_redirect off;
  location / {
    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_redirect off;
    proxy_read_timeout 300;
    proxy_pass http://redmine;
  }
}
upstream redmine {
  server unix:/tmp/thin/redmine.0.sock;
  server unix:/tmp/thin/redmine.1.sock;
  server unix:/tmp/thin/redmine.2.sock;
  server unix:/tmp/thin/redmine.3.sock;
}

 冒頭で書いたようにRedmineredmineアカウントで動かすので、/usr/local/www/redmineディレクトリとファイルのオーナーを変更する。

# chown -R redmine:redmine /usr/local/www/redmine

 設定ファイルが文法的に正しいことを確認し、nginxを起動する。

# nginx -t
the configuration file /usr/local/etc/nginx/nginx.conf syntax is ok
configuration file /usr/local/etc/nginx/nginx.conf test is successful

# nginx

 ブラウザーRedmineのログイン画面を表示できれば成功である。

# links http://redmine.example.com:8080/

 次回はHTTPSRedmineにアクセスするための設定を行う。

*1:portsでインストールしたときのデフォルト設定ではwwwアカウントが使われる。