На моем сервере был установлен Redmine 2.6 на Apache + Passenger связке. Но учитывая, что у меня наконец-то дошли руки до сервера и я переехал с PHP + Apache на Nginx + PHP-FPM, мне пришлось так же поменять для Redmine сервер на Nginx + Thin. О настройке redmine и thin в этом посте.
Для старта прилагаю ссылку на прошлый пост об установке Redmine.
Установка Redmine 2.6 на Debian 7 Wheezy (Apache + Passenger)
Тут необходимо дойти до заголовка “настройка apache и passenger” и остановиться. Дальше нужно продолжить уже тут.
Настройка nginx и thin
При условии, что на сервере уже настроен и запущен nginx версии не ниже 1.8 (за более старые не ручаюсь), нужно проделать следующие шаги, чтобы запустить thin.
Напоминаю, что у меня установлен ruby и rails при помощи rvm, т.е. никаких deb пакетов нету, и текущая версия ruby у меня 2.1.5
Перво-наперво надо установить thin глобально. Чтобы понимать что и куда ставится, я перешел в текущую папку ruby инсталляции.
1 2 3 4 5 6 |
cd /usr/local/rvm/gems/ruby-2.1.5 gem install thin ls gems thin -v |
Выдаст версию типа thin 1.6.4 codename Gob Bluth
Теперь можно создать конфиг thin для redmine.
1 2 3 4 5 |
mkdir -p /etc/thin touch /etc/thin/redmine.yml thin config -C /etc/thin/redmine.yml -c /opt/redmine/current --servers 2 -e production -a 127.0.0.1 -p 3000 |
Как видно, конфиг предполагает запуск на локальном адресе и порте 3000. После генерации он будет выглядеть так
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
chdir: "/opt/redmine/current" environment: production address: 127.0.0.1 port: 3000 timeout: 30 log: "/var/log/thin.log" pid: tmp/pids/thin.pid max_conns: 1024 max_persistent_conns: 100 require: [] wait: 30 threadpool_size: 20 servers: 2 daemonize: true |
Есть еще вариант запуска thin через socket, тогда вместо разделов address и port будет socket: /tmp/thin.sock
Перед тем, как пробовать запустить redmine на thin, лучше проверить его на webrick.
1 2 3 |
ruby script/rails server webrick -e production -b 127.0.0.1 -p 3000 |
Вместо локального ip можно поставить ip сервера и redmine уже откроется по ip:port адресу на внешку. Для проверки локальных хостов без выхода на внешку я использую консольный браузер lynx.
Теперь надо в Gemfile.lock в /opt/redmine/current добавить строку gem “thin” и обновить бандлы.
1 2 3 4 5 |
nano /opt/redmine/current/Gemfile.lock bundler update bundler install |
Все готово для испытания thin.
1 2 3 |
thin start -C /etc/thin/redmine.yml |
Для проверки, что все работает, можно сделать следующее. Во первых проверить процессы.
1 2 3 |
ps aux | grep thin |
Их должно быть 1-2 как минимум. Далее посмотреть лог
1 2 3 |
cat /var/log/thin.3000.log |
Тут не должно быть ошибок. Ну и конечно же можно проверить наличие pid файлов в tmp директории установки redmine.
1 2 3 |
ls tmp/pids/thin.pid |
Так же можно попробовать открыть redmine в консольном браузере
1 2 3 |
lynx 127.0.0.1:3000 |
Убедившись, что все работает (а если нет, то гуглим), приступаем к настройке nginx хоста. Ну а тут все просто, нужно настроить его как proxy к thin. Вот пример конфига хоста.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
upstream thin_server { #server unix:/tmp/thin.0.sock; server 127.0.0.1:3000; server 127.0.0.1:3001; } server { server_name sub.seyferseed.ru; listen *:80; access_log /var/log/nginx/sub.seyferseed.ru-access.log; error_log /var/log/nginx/sub.seyferseed.ru-error.log; root /opt/redmine/current/public; location / { proxy_redirect off; proxy_set_header Host sub.seyferseed.ru; try_files $uri/index.html $uri.html $uri @thin; } location @thin { proxy_pass http://thin_server; } } |
В моем случае хост у меня sub.seyferseed.ru для примера, т.е. тут надо заменить на свой.
1 2 3 4 5 6 |
nano /etc/nginx/sites-available/sub.seyferseed.conf cd ../sites-enabled/ ln -s ../sites-available/sub.seyferseed.conf ./ service nginx restart |
После чего redmine предстанет во всей красе в браузере по используемому в конфиге адресу хоста.
В качестве дополнения и упрощения жизни я сделал 2 bash скрипта
1 2 3 4 5 6 |
cat ~/thinStart.sh #!/bin/bash thin start -C /etc/thin/redmine.yml |
1 2 3 4 5 6 |
cat ~/thinStop.sh #!/bin/bash thin stop -C /etc/thin/redmine.yml |
И добаил тот, который стартует thin, в crontab
1 2 3 4 5 |
crontab -e === @reboot ~/thinStop.sh |
Теперь при перезагрузке сервера все сразу заведется.
Хотя в посте процесс настройки написан просто и прямолинейно, все же я столкнулся со множеством проблем по ходу. Тут уже выжимка только по работающим шагам.
Мне помогали следующие ссылки:
http://www.redmine.org/boards/2/topics/31291?r=32985
http://www.redmine.org/boards/2/topics/37072
https://mihanentalpo.me/2015/09/%D1%83%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0-redmine-nginx-thin-%D0%BD%D0%B0-debian-8-jessie/
http://www.redmine.org/projects/redmine/wiki/HowTo_configure_Nginx_to_run_Redmine
А так же stackoverflow. :)
Далее я, возможно, буду делать обновление redmine на последнюю версию. Либо откажусь от него полностью в пользу онлайн сервисов, таких как basecamp.