Т.к. схема Apache+Passenger мне не сильно нравилась всегда, решил я поднять Remine в связке с Nginx.
- Устанавливаем необходимые пакеты и их -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
- Устанавливаем сам Ruby 1.9.3 (т.к. именно он необходим для корректной работы Redmine 3.0.1):
apt-get install ruby1.9.3
- Скачиваем Redmine:
svn co https://svn.redmine.org/redmine/branches/3.0-stable redmine-3.0
- В каталоге, куда мы выкачали 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"
- Создаем БД. Я ее привык у себя подниматьв PostgreSQL:
CREATE ROLE redmine LOGIN ENCRYPTED PASSWORD 'my_password' NOINHERIT VALID UNTIL 'infinity'; CREATE DATABASE redmine WITH ENCODING='UTF8' OWNER=redmine;
- Устанавливаем gem-файлы:
echo -e "# Gemfile.local\ngem 'puma'" >> Gemfile.local gem install bundler bundle install --without development test
- Выполняем преднастройку Redmine:
rake generate_secret_token RAILS_ENV=production rake db:migrate RAILS_ENV=production rake redmine:load_default_data
- Создаем файл /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
- Настраиваем 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!!!