Translate

понеділок, 7 жовтня 2013 р.

Установка Redmine (Nginx у якості frontend)

Відносно нещодавно я писав як установити систему управління проектами та відстежування помилок Atlassian Jira. Проте ймовірно вона влаштовує не всіх, адже як кожна річ вона має свої недоліки та і ліцензія на цей програмний продукт коштує зовсім не дешево. Тому як альтернативу я пропоную Redmine, open source рішення на ruby, що є повністю безкоштовним і розповсюджується під ліцензією GPL v2. Варто також зауважити, що Redmine має клієнти під ОС Android та Iphone.

У цій статті піде мова про установку системи управління проектами та відстежування помилок Redmine, що працюватиме під ОС Ubuntu 13.04, у якості веб-серверу будемо використовувати Nginx та Thin (веб-сервер для Ruby).

Почнемо із установки Redmine. Сирці можна скачати багатьма способами: через Git/SVN/Mercurial репозиторій, чи просто як tar.gz чи zip-архів із RubyForge. Подробиці тут http://www.redmine.org/projects/redmine/wiki/Download.

1. Скачаємо Redmine і розпакуємо:

# wget http://rubyforge.org/frs/download.php/77138/redmine-2.3.3.tar.gz
# tar xvfz redmine-2.3.3.tar.gz
# mv redmine-2.3.3 /var/www/

2. У якості бази даних будемо користуватись MySQL. Установлюємо його та переходимо до створення користувача і самої бази:

mysql> CREATE DATABASE redmine CHARACTER SET utf8;
mysql> GRANT ALL PRIVILEGES ON redmine.* TO 'redmine'@'localhost' IDENTIFIED BY 'my_password';


3. Налаштовуємо параметри конекту Redmine із базою данних:

# cd /var/www/redmine-2.3.3
# cp config/database.yml.example config/database.yml
# vim config/database.yml
...
production:
  adapter: mysql
  database: redmine
  host: localhost
  username: redmine
  password: my_password
...

4. Redmine використовує Bundler (менеджер пакетів, щоб трохи зрозуміти як все влаштовано, можна почитати це http://nashbridges.me/gem-for-end-user) для управління gem-ми, тому спершу встановимо його:

# gem install bundler

І встановимо gem-и, що необхідні для роботи Redmine:

# bundle install --without development test

Ймовірно вам необхідно буде встановити також додаткові пакети для успішного закінчення попередньої команди:

http://stackoverflow.com/questions/16376010/ubuntu-cannot-install-rmagick
http://stackoverflow.com/questions/7645918/require-no-such-file-to-load-mkmf-loaderror

5. Генеруємо ключ для збереження cookies та сесій:

# rake generate_secret_token

6. Створюємо структуру та дефолтну конфігурацію бази данних, що буде використовувати Redmine:

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

7. Редагуємо права в директорії /var/www/redmine-2.3.3 та створюємо public/plugin_assets:

# mkdir -p tmp tmp/pdf public/plugin_assets
# sudo chown -R redmine:redmine files log tmp public/plugin_assets
# sudo chmod -R 755 files log tmp public/plugin_assets

8. Стартуємо Redmine:

# ruby script/rails server webrick -e production

І перевіряємо його роботу в браузері http://localhost:3000/.

Сервер Webrick зазвичай використовується у якості тестування ruby-додатків, і не використовується для більш серйозних цілей. Тому надалі ми будемо використовувати зв'язку Nginx + Thin (можна також замість thin встановити Passenger, Puma і т.д.).

1. Будемо встановлювати Thin из Rubygems, тому додамо його в Gemfile і оновимо оточення:

# cd /var/www/redmine-2.3.3
# echo "gem 'thin'" >> Gemfile
# bundle install --without development test mysql

2. Створюємо файл конфігурації для Thin і необхідні диркторії для його роботи:

# mkdir /etc/thin
# mkdir /var/log/thin
# chmod 755 /var/log/thin
# thin config --config /tmp/redmine.yml --chdir /var/www/redmine-2.3.3 \
     --environment production --socket /var/run/redmine/sockets/thin.sock \
     --daemonize --log /var/log/thin/redmine.log --pid /var/run/thin/redmine.pid \
     --user root --group root --servers 1 --prefix
# mv /tmp/redmine.yml /etc/thin/redmine.yml

У моєму випадку остаточний конфіг виглядає так:

# cat /etc/thin/redmine.yml
---
chdir: /var/www/redmine-2.3.3
environment: production
timeout: 30
log: /var/log/thin/redmine.log
pid: /var/run/thin/redmine.pid
max_conns: 1024
max_persistent_conns: 100
require: []
wait: 30
socket: /var/run/redmine/sockets/thin.sock
daemonize: true
user: root
group: root
servers: 1
prefix: /

chdir - директорія з Redmine
prefix - префікс, по якому буде доступним сайт. / - тобто сайт буде доступним без префіксів, типу http://myredmine.com/

Ставимо необхідні права на конфігураційні файли:

# chown root:root /etc/thin/redmine.yml
# chmod 644 /etc/thin/redmine.yml

Можна запускати Thin не від користувача root, але тоді необхідно змінити шлях до сокету/pid-файлу. Також в мене Thin скаржився на права директорії логів, хоча там і стояли рекомендовані 0666. Тому я встановив 0777:

# chmod -R 0777 /var/www/redmine-2.3.3/log/

3. Створюємо скрипт запуску Thin-сервера:

# cat /etc/init.d/thin

#!/bin/sh
### BEGIN INIT INFO
# Provides:          thin
# Required-Start:    $local_fs $remote_fs
# Required-Stop:     $local_fs $remote_fs
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: thin initscript
# Description:       thin
### END INIT INFO

# Original author: Forrest Robertson

# Do NOT "set -e"

DAEMON=/var/lib/gems/1.9.1/gems/thin-1.5.1/bin/thin
SCRIPT_NAME=/etc/init.d/thin
CONFIG_PATH=/etc/thin/redmine.yml

# Exit if the package is not installed
[ -x "$DAEMON" ] || exit 0

case "$1" in
  start)
        $DAEMON start -C $CONFIG_PATH 
        ;;
  stop)
        $DAEMON stop -C $CONFIG_PATH
        ;;
  restart|force-reload|reload)
        $DAEMON restart -C $CONFIG_PATH
        ;;
  *)
        echo "Usage: $SCRIPT_NAME {start|stop|restart}" >&2
        exit 3
        ;;
esac

І надаємо йому права на запуск:

# chmod ug+x /etc/init.d/thin

4. Переходимо до налаштування веб-серверу Nginx, який виступатиме фронтендом. Встановлюємо, якщо цього ще не було зроблено.

5. Створюємо віртуалхост. Nginx взаємодіятиме із Thin-сервером за допогою локального сокета thin.0.sock:

# vim /etc/nginx/sites-available/redmine.conf

upstream redmine_thin_servers {
  server unix:/var/run/redmine/sockets/thin.0.sock;
}

server {

  listen   80; ## listen for ipv4

  server_name myredmine.com;
  server_name_in_redirect off;

  proxy_set_header        Host $http_host;
  proxy_set_header        X-Real-IP $remote_addr;
  proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
  proxy_set_header        X-Forwarded-Proto $scheme;
  proxy_redirect off;

  location / {
    root   /var/www/redmine-2.3.3/;

    error_page 404  404.html;
    error_page 500 502 503 504  500.html;

    try_files $uri/index.html $uri.html $uri @redmine_thin_servers;
  }

  location @redmine_thin_servers {
    proxy_pass http://redmine_thin_servers;
  }
}

За необхідності також можна створити секцію https.
Активуємо віртуалхост, створивши лінку:

# ln -s /etc/nginx/sites-available/redmine.conf /etc/nginx/sites-enabled/redmine.conf

6. Додаємо тестовий доменейм в /etc/hosts:

# vim /etc/hosts
...
10.224.53.135 myredmine.com
...

7. Запускаємо thin, (пере)запускаємо nginx:

# /etc/init.d/thin start

# ps aux | grep thin
root 28839  5.8  1.1 315868 89944 ?        Sl   07:07   0:02 thin server (/var/run/redmine/sockets/thin.0.sock)

# /etc/init.d/nginx start

Читаємо логи, коли щось пішло не за планом.
Трохи власних скріншотів під кінець:





http://www.redmine.org/projects/redmine/wiki/RedmineInstall
http://www.redmine.org/projects/redmine/wiki/HowTo_configure_Nginx_to_run_Redmine
http://www.redmine.org/projects/redmine/wiki/HowTo_configure_Apache_to_run_Redmine
http://doomatel.web-profile.org/entries/show/razvertyivanie-debian--redmine--nginx--postgresql/
http://patttern.blogspot.ie/2012/06/redmine-centos-62-1.html
http://wiki.nginx.org/Redmine

Немає коментарів:

Дописати коментар