Debian 7.8 + Redmine 3.0.1 + Nginx

Т.к. схема Apache+Passenger мне не сильно нравилась всегда, решил я поднять Remine в связке с Nginx.

1) Устанавливаем необходимые пакеты и их -dev сателиты:

apt-get install autoconf git subversion curl bison \
    imagemagick libmagickwand-dev build-essential libmariadbclient-dev libssl-dev \
    libreadline-dev libyaml-dev zlib1g-dev python-software-properties

2) Устанавливаем сам Ruby 1.9.3 (т.к. именно он необходим для корректной работы Redmine 3.0.1):

apt-get install ruby1.9.3

3) Скачиваем Redmine:

svn co https://svn.redmine.org/redmine/branches/3.0-stable redmine-3.0

4) В каталоге, куда мы выкачали Redmine, создаем файл config/puma.rb со следующим содержимым:

#!/usr/bin/env puma

# start puma with:
# RAILS_ENV=production bundle exec puma -C ./config/puma.rb

application_path = '/home/redmine/redmine'
directory application_path
environment 'production'
daemonize true
pidfile "#{application_path}/tmp/pids/puma.pid"
state_path "#{application_path}/tmp/pids/puma.state"
stdout_redirect "#{application_path}/log/puma.stdout.log", "#{application_path}/log/puma.stderr.log"
bind "tcp://127.0.0.1:8080"

5) Создаем БД. Я ее привык у себя подниматьв  PostgreSQL:

CREATE ROLE redmine LOGIN ENCRYPTED PASSWORD 'my_password' NOINHERIT VALID UNTIL 'infinity';
CREATE DATABASE redmine WITH ENCODING='UTF8' OWNER=redmine;

6) Устанавливаем gem-файлы:

echo -e "# Gemfile.local\ngem 'puma'" >> Gemfile.local
gem install bundler
bundle install --without development test

7) Выполняем преднастройку Redmine:

rake generate_secret_token
RAILS_ENV=production rake db:migrate
RAILS_ENV=production rake redmine:load_default_data

8) Создаем файл /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: Starts redmine with puma
# Description:       Starts redmine from /home/redmine/redmine.
### END INIT INFO

# Do NOT "set -e"

APP_USER=<redmine_user>
APP_NAME=redmine-3.0
APP_ROOT="<path_to_redmine_directory>/$APP_NAME"
RAILS_ENV=production

RBENV_ROOT="<path_to_redmine_directory>/.rbenv"
PATH="$RBENV_ROOT/bin:$RBENV_ROOT/shims:$PATH"
SET_PATH="cd $APP_ROOT; rbenv rehash"
DAEMON="bundle exec puma"
DAEMON_ARGS="-C $APP_ROOT/config/puma.rb -e $RAILS_ENV"
CMD="$SET_PATH; $DAEMON $DAEMON_ARGS"
NAME=redmine
DESC="Redmine Service"
PIDFILE="$APP_ROOT/tmp/pids/puma.pid"
SCRIPTNAME="/etc/init.d/$NAME"

cd $APP_ROOT || exit 1

sig () {
        test -s "$PIDFILE" && kill -$1 `cat $PIDFILE`
}

case $1 in
  start)
        sig 0 && echo >&2 "Already running" && exit 0
        su - $APP_USER -c "$CMD"
        ;;
  stop)
        sig QUIT && exit 0
        echo >&2 "Not running"
        ;;
  restart|reload)
        sig USR2 && echo "Restarting" && exit 0
        echo >&2 "Couldn't restart"
        ;;
  status)
        sig 0 && echo >&2 "Running " && exit 0
        echo >&2 "Not running" && exit 1
        ;;
  *)
        echo "Usage: $SCRIPTNAME {start|stop|restart|status}" >&2
        exit 1
        ;;
esac

:

Выставляем необходимые права доступа и настраиваем порядок загрузки демона с системой:

sudo chmod +x /etc/init.d/redmine
sudo update-rc.d redmine defaults

9) Настраиваем Nginx /etc/nginx/sites-available/redmine:

upstream puma_redmine {
  server 127.0.0.1:8080;
}

server {
  server_name <redmine.ourhost.com>;
  listen 80;
  root /home/redmine/redmine/public;

  location / {
    try_files $uri/index.html $uri.html $uri @ruby;
  }

  location @ruby {
    proxy_set_header Host $http_host;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-Real-IP  $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_redirect off;
    proxy_read_timeout 300;
    proxy_pass http://puma_redmine;
  }
}

Включаем этот конфиг в настройки Nginx и стартуем все демоны.

 

Profit!!!

 
comments powered by Disqus