UPD: Доступна инструкция по установке Redmine в Debian 9 Stretch с Nginx в качестве фронт-энда
Эта заметка по большей части копирует мою же заметку об установке redmine в Debian Wheezy, за некоторыми исключениями.
Во-первых, с выходом Debian Jessie успела обновиться версия Redmine.
Во-вторых, в этой версии Debian по-умолчанию стоит Apache 2.4, который заметно отличается от Apache 2.2, что делает их конфигурационные файлы несовместимыми. Наткнувшись на данную проблему, я решил, что это будет отличным поводом полностью и окончательно перейти на Nginx.
Устанавливать будем Redmine в виртуальной машине на хостинге Digital Ocean под управлением ОС Debian GNU/Linux 8.0 Jessie, а также, дополним его парой полезных «в хозяйстве» плагинов и тем оформления.
В интернете масса инструкций об установке редмайна в Debian. Однако с ними всеми возникают какие-то проблемы. Связанные то с различием в версиях Redmine (между той, которую пытаешься установить и той, о которой написан мануал), то с недостатком в системе пакетов, которые были у писателя мануала, и он просто не обратил на них внимания, то с неправильной фазой луны…
Моя предыдущая инструкция — не исключение, попытавшись провернуть её в Debian Jessie я сам же наткнулся на проблемы в настройке сервера Apache.
Обойдёмся без длинного предисловия, объясняющего, почему будем ставить redmine с нуля, а не пользоваться готовым образом, предоставляемым DigitalOcean, я это уже писал 🙂
В ходе этой установки я пользовался официальными мануалами с сайта redmine.org.
Кстати, если у вас нет аккаунта в DigitalOcean вы можете создать его и получить 10 долларов если пройдёте по этой реф-ссылке: https://www.digitalocean.com/?refcode=e5a7f5c338ab
1. Предварительные требования
Нужен дроплет созданный в Digital Ocean с операционной системой Debian 8.0, 64 битной (в моём случае). Для 32-битных систем разницы быть не должно.
Допустим у нас есть недавно созданный дроплет, (либо уже давно, возможно идея установить Redmine пришла когда рабочий сервер уже был). Мощность значения не имеет. Работать будет даже на тарифе в $5, правда чем дешевле — тем медленнее.
Желательно, чтобы к вашему IP-адресу был привязан какой-нибудь домен, а также его поддомены. В моём случае это mihanentalpo.me, а в качестве доменного имени для редмайна я буду использовать redmine.mihanentalpo.me
И еще, для Email-уведомлений, отправляемых Redmine’ом, вам понадобится учетная запись почты, например на Яндекс-почте (в примере я буду рассматривать её).
Кстати, если воспользоваться Яндекс-почтой для доменов, там же в комплекте есть и DNS-сервер, который позволит управлять привязками доменных имен к вашему IP.
2. Установка необходимого ПО
2.1 Установим nginx в качестве фронт-веб-сервера, который будет отображать наш thin-сервер с redmine’ом во внешний мир.
Здесь и далее, все команды выполняются от имени root, если не указано другое.
apt-get update apt-get install nginx |
2.2 Установим MySql в качестве сервера баз данных, его клиент, и заголовочные файлы клиента для компиляции некоторых библиотек необходимых Redmine’у
apt-get install mysql-server mysql-client libmysqlclient-dev |
При установке (если у вас еще не было до этого установленного mysql-сервера), установщик попросит создать пароль для пользователя root mysql-сервер. Очень советую придумать хороший пароль, и где-нибудь записать его, например в KeePassX, ну или просто не забыть.
2.3 Установим еще пару девелоперских пакетов (содержащих заголовочные файлы для компиляции), они потянут за собой еще огромную кучу пакетов — придется согласиться
apt-get install libmagickcore-dev libmagickwand-dev |
2.4 Установим пакет для сборки а также imagemagick (по информации в комментариях, эти пакеты не всегда ставятся автоматически)
apt-get install imagemagick build-essential |
3. Установка самого Redmine
3.1 Зайдем на сайт редмайна
Заглянем на страницу http://www.redmine.org/projects/redmine/wiki/Download и посмотрим там ссылку на последнюю версию. В моём случае это версия 2.6.7, доступная по ссылке https://redmine.org/releases/redmine-2.6.7.tar.gz (нам нужна именно tar.gz)
3.2 Скачаем, распакуем и положим в /usr/local/share
cd /tmp mkdir redmine cd redmine wget https://redmine.org/releases/redmine-2.6.7.tar.gz tar -zxvf ./redmine-2.6.7.tar.gz mv ./redmine-2.5.1 /usr/local/share/redmine |
3.3 Ставим Ruby и всё что нужно для сборки компонентов редмайна (также, потянут за собой много всего):
apt-get install ruby ruby-dev rubygems libruby |
3.4 Устанавливаем bundler — это менеджер зависимостей для приложений ruby, он позволяет для каждого приложения устанавливать из репозитория ruby-пакетов именно те версии, которые нужны приложению.
gem install bundler |
gem — это программа, являющаяся интерфейсом для пакетного менеджера RubyGems. Это примерно тоже самое для ruby, что apt-get для Debian в целом.
3.5 Пришло время установить все ruby-пакеты (в ruby они называются «Gems» — камни самоцветы).
Но прежде чем мы будем это делать, добавим в список пакетов новый пакет — thin — это веб-сервер написанный на Ruby, который мы будем использовать в качестве бэкэнд-сервера.
Итак:
3.5.1 Открываем /usr/local/share/redmine/Gemfile (в нём хранится список gem-ов, которые надо установить).
nano /usr/local/share/redmine/Gemfile |
3.5.2 Добавляем в файл нужную строку
Сначала находим строку с текстом вроде
gem "awesome_nested_set", "2.1.6" |
и сразу за ней добавляем строку:
gem "thin" |
Эта строка позволит при установке автоматически установить и сервер thin
3.5.3 Запускаем установку всех необходимых Redmine’у пакетов-gem’ов:
cd /usr/local/share/redmine bundle install --without development test postgresql sqlite |
Данная команда означает установить все Gem’ы, которые описаны в файле redmine/Gemfile кроме «test», «postresql», «sqlite». Если вы хотите использовать в качестве базы данных PostgreSql или Sqlite — соответственно, нужно будет написать —without mysql, а вашу базу как раз оставить.
В конце установки должно появиться сообщение:
Your bundle is complete!
Если не появилось, придётся читать ошибки и разбираться что явилось их причиной.
3.6 Создаём базу данных для редмайна
Подключаемся к mysql:
mysql -uroot -p |
Создаём базу:
CREATE DATABASE redmine CHARACTER SET utf8; |
Создаём пользователя, и даём ему все права на базу:
CREATE USER 'redmine'@'localhost' IDENTIFIED BY 'ДлИнНыЙиСлОжНыЙпАрОлЬ'; GRANT ALL PRIVILEGES ON redmine.* TO 'redmine'@'localhost'; |
Отключаемся:
exit; |
3.7 Настроим редмайн на созданную нами базу данных:
(предполагается что мы всё еще в папке /usr/local/share/redmine)
cp config/database.yml.example config/database.yml |
В папке config/ лежал файл с примерами настройки, мы взяли его за основу.
Открываем файл простейшим редактором:
Внимание! Если вы еще не знаете, что это за формат такой «yml», вот здесь можно про него узнать: http://ru.wikipedia.org/wiki/YAML, а пока скажу лишь главное — пробелы и табуляции имеют значение!
# nano config/database.yml |
Находим такие вот примерно строчки:
production: adapter: mysql2 database: redmine host: localhost username: root password: "" encoding: utf8
и соответственно меняем их, в данном случае, так как база у нас и правда называется redmine, сервер и правда называется localhost, а тип сервера и правда mysql, нужно вписать только username: redmine и password: «ваш сложный пароль для пользователя redmine».
3.8 Сгенерируем секретный ключ для хэширования сессий:
# rake generate_secret_token |
При этом выскакивает ошибка:
Could not find gem ‘mysql2 (~> 0.3.11) ruby’ in the gems available on this machine.
Run `bundle install` to install missing gems.
Это означает, что нет пакета-Gem’а «mysql2». Установим его отдельно:
# gem install mysql2 |
После чего повторим:
# rake generate_secret_token |
rake — это «Ruby make», то есть утилита аналогичная make. Также как make использует для работы Makefile, также rake использует Rakefile. То есть это — интерпретатор Rakefile, содержащий скрипты установки (и возможно, удаления) программ написанных на Ruby.
3.9 Выполним набор миграций, создающих базу данных
Перед запуском rake мы запишем в переменную окружения RAILS_ENV значение production, чтобы rake знал, о каком окружении идёт речь. Ведь у редмайна их целых 3 — development, production, и test.
# RAILS_ENV=production rake db:migrate |
Если всё верно — покажется множество надписей символизирующих изменения, вносимые в базу данных миграциями.
После этого запустим миграцию, заполняющую базу начальными данными (ведь база то еще пустая)
# RAILS_ENV=production rake redmine:load_default_data |
При запуске скрипт попросит выбрать язык, для русского выбираем «ru».
Выполняем шифрацию паролей, хранящихся в базе данных (хотя их там пока не много, только один)
rake db:encrypt RAILS_ENV=production |
4. Проверяем, работает ли редмайн с помощью тестового веб-сервер webrick:
Из той же папки /usr/local/share/redmine запускаем:
# ruby script/rails server webrick -e production |
После этого появятся сообщения вроде этих:
=> Booting WEBrick
=> Rails 3.2.17 application starting in production on http://0.0.0.0:3000
=> Call with -d to detach
=> Ctrl-C to shutdown server
[2014-06-26 18:59:41] INFO WEBrick 1.3.1
[2014-06-26 18:59:41] INFO ruby 1.9.3 (2012-04-20) [x86_64-linux] [2014-06-26 18:59:41] INFO WEBrick::HTTPServer#start: pid=27676 port=3000
Это будет означать что сервер запустился на вашем IP-адресе на 3000-м порту.
Пробуем открыть в браузере:
http://domain.com:3000 или http://123.123.123.123:3000 где domain.com — это имя вашего домена, а «123.123.123.123» — это ваш IP адрес. Работать должно и так и эдак — должна открыться синяя страничка редмайна практически без ничего.
После этого в консоли с сервером нажимаем Ctrl+C и больше никогда так не делаем, так как webrick — это сервер исключительно для тестирования, он не выдержит никакой нагрузки, и вполне вероятно имеет уязвимости, которые для тестового сервера не важны, а вот на боевом могут причинить вам ущерб.
5. Настраиваем сервер Thin
5.1 Создадим init-скрипт для thin:
# thin install |
эта команда заставляет thin создать скрипт /etc/init.d/thin
5.2 Создадим специального пользователя для Redmine’а и передадим папку редмайна в его пользование:
# adduser redmine # chown -hR redmine:redmine /usr/local/share/redmine |
5.3 Создадим конфигурационный файл для запуска Redmine:
Создадим файл /etc/thin/redmine.yml и запишем в него:
--- pid: tmp/pids/thin.pid group: redmine wait: 30 timeout: 30 log: log/thin.log max_conns: 1024 require: [] environment: production max_persistent_conns: 512 servers: 1 daemonize: true user: redmine socket: /tmp/thin.sock chdir: /usr/local/share/redmine
этот файл заставляет thin запустить сервер приложения Redmine но подключений ожидать не на каком-то сетевом адресе, а в файле-сокете. К этому файлу мы будем подключать Nginx в качестве фронтэнд-сервера.
5.4 Проверим работоспособность thin-севрера
Запустим сервер командой:
# /etc/init.d/thin start |
Посмотрим, что появилось в лог-файле thin’a:
# cat /usr/local/share/redmine/logs/thin.0.log |
В результате должно появиться что-то вроде:
Writing PID to tmp/pids/thin.0.pid Changing process privilege to redmine:redmine Using rack adapter Thin web server (v1.6.3 codename Protein Powder) Maximum connections set to 1024 Listening on /tmp/thin.0.sock, CTRL+C to stop |
что означает, что всё в порядке, и сервер работает.
5.5 Добавить thin в автозапуск
Чтобы thin запускался при старте системы, добавим его в автозапуск командой (от рута):
update-rc.d -f thin defaults |
(Спасибо за напоминание об этом tolik777)
6. Настраиваем сервер Nginx
6.1 Создаём файл виртуального хоста:
# nano /etc/nginx/sites-available/redmine.mihanentalpo.me
Имя файла лучше сделать соответствующим вашему домену, а он у вас врядли называется как у меня 🙂
В файле помещаем следующие настройки:
# Настраиваем upstream на сокет нашего "слушающего" сервера thin upstream thin_server { server unix:/tmp/thin.0.sock; } # Веб-сервер видимый из вне server { #имя сервера server_name redmine.mihanentalpo.me; #НЕ Используем HTTPS(SSL) listen *:80; #логи access_log /var/log/nginx/redmine.mihanentalpo.me-access.log; error_log /var/log/nginx/redmine.mihanentalpo.me-error.log; #Папка public редмайна root /usr/local/share/redmine/public; # Основной location. Он отдаёт все статические файлы "как следует", а все # нестатические адреса редиректит на прокси-сервер, которым и является thin location / { proxy_redirect off; proxy_set_header Host redmine.mihanentalpo.me; try_files $uri/index.html $uri.html $uri @thin; } # Именованый Location для того, чтобы было куда сослаться location @thin { proxy_pass http://thin_server; } } |
Соответственно, директива server_name должна указывать на ваш домен третьего уровня, который вы назначили на Redmine
6.2 «Включаем» сайт:
Для того чтобы указанный выше конфигурационный файл заработал, необходимо чтобы он лежал в папке /etc/nginx/sites-enabled/. Добьемся этого при помощи символической ссылки:
# ln -s /etc/nginx/sites-available/redmine.mihanentalpo.me /etc/nginx/sites-enabled/redmine.mihanentalpo.me и перезапустим nginx: # /etc/init.d/nginx restart |
Проверяем сайт:
Открываем http://redmine.mihanentalpo.me и ….. видим содержимое папки /usr/share/redmine/public, а вовсе не редмайн 🙁 продолжаем битву:
Забыли переименовать файл:
# mv public/dispatch.fcgi.example public/dispatch.fcgi |
Вот теперь всё должно работать. Адрес http://redmine.mihanentalpo.me отлично показывает редмайн! Ура!
Поясню, что это такое сейчас было: Для работы приложения нужно, чтобы в папке сервера лежал файл dispatch.fcgi начинающийся с #!/bin/ruby
7. «Готовим» Redmine
Для того, чтобы начать работать с редмайном, осталось всего ничего. Последние настройки.
7.0 Дадим доступ к папкам tmp и files, иначе редмайн откажется редактировать пользователей, загружать файлы (и много чего еще):
# chmod -R 0777 /usr/local/share/redmine/tmp # chmod -R 0777 /usr/local/share/redmine/files |
7.1 Сменим пароль админа
У администратора по умолчанию логин admin и пароль admin. Нужно сменить пароль раньше чем ваш сервер обнаружит какой-нибудь сетевой искатель приключений, знающий о стандартном пароле redmine.
Нажимаем «Вход», логинимся под admin/admin, после чего переходим по ссылке «Администрирование», а оттуда в пользователей, где и можно сменить пароль админа, и все остальные его настройки:
- Рекомендую задать правильный почтовый адрес — пригодится для уведомлений
- В блоке «Уведомления по email» поставить галку «Не извещать об изменениях, которые я сделал сам», чтобы не доставать самого себя
- Также желательно выбрать правильный часовой пояс, на случай, если сервер находится не в одном часовом поясе с вами.
7.2 Настроим почту для отправки уведомлений
В моём случае почта находится на Яндекс-почте для доменов, параметры её таковы:
почта: redmine@mihanentalpo.me
логин: redmine@mihanentalpo.me
пароль: большой и сложный 🙂
сервер: smtp.yandex.ru
порт: 25
Итак, для настройки почты используется файл config/configuration.yml, который, опять же, копируем из файла-примера:
cp config/configuration.yml.example config/configuration.yml nano config/configuration.yml |
В файле много разных примеров настройки почты, какой из них нам подходит я уже не вспомню, но главное, что в случае Яндекс-почты, должно получиться что-то вроде: (отступы важны!)
default: email_delivery: delivery_method: :smtp smtp_settings: address: "smtp.yandex.ru" port: 25 authentication: :login user_name: "redmine@mihanentalpo.me" password: "SuperPassword"
7.3 Теперь выполним настройки приложения Redmine (В разделе «администрирование» ссылка «Настройки» на правой вкладке)
На какие настройки стоит обратить внимание:
Вкладка «Общее»
- Имя компьютера — его редмайн будет использовать при генерации ссылок в письмах. Надо написать доменное имя, на котором редмайн работает. В моём случае это redmine.mihanentalpo.me
Вкладка «Отображение»
- Тема — это внешний вид редмайна, сюда мы еще вернёмся
- Язык по умолчанию — русский, если, конечно, вы не ставите редмайн для нерусских пользователей.
Вкладка «Аутентификация»
- Необходима аутентификация — если вы настраиваете редмайн для каких-то частных проектов (а не для публичного OpenSource проекта) то эта опция поможет сделать так, чтобы любого неавторизованного пользователя «встречала» форма авторизации, и дальше не пускала.
- Автоматический вход — позволяет задать время которое будут храниться Куки. От этого зависит, с одной стороны, безопасность, с другой — комфорт работы. Если поставить время больше — реже надо будет вводить логин/пароль, однако увеличивается риск потерять аккаунт в случае, если у вас утащат куки.
Вкладка «Проекты»
- Главный плюс — позволяет задать для всех проектов функционал по умолчанию.
- Также можно выбрать трекеры по умолчанию для новых проектов (это «ошибка», «улучшение», «поддержка»)
Вкладка «Уведомления по email»
Её содержимое появляется только если заданы настройки отправки почты, которые были описаны ранее. Если их не задать — данная вкладка будет пуста.
- Исходящий email-адрес задаём таким же каким задавали его в конфигурации (в моём случае redmine@mihanentalpo.me)
- Следует выбрать «Способ уведомления по умолчанию»
- Также, стоит отметить галками те события, о которых нужно уведомлять
- В блоке «Подстрочные примечания письма» можно написать русское пояснение, с указанием правильной ссылки, в моём случае это выглядит так:
Вы получили это письмо, поскольку данное уведомление разрешено в настройках вашего аккаунта Redmine. Чтобы сменить эти настройки вы можете перейти по адресу: http://redmine.mihanentalpo.me/my/account
При это часть ссылки «/my/account» ведет на страницу аккаунта текущего пользователя.
Вкладка «Хранилище» позволяет подключить git-репозиторий (или другой репозиторий исходного кода), который может позволить «красиво» просматривать дерево коммитов, а также закрывать задачи путём дописывания в названиях коммитов определенных ключевых слов. Однако эта настройка выходит за рамки данной статьи, просто потому что мне в моей задаче не требуется привязка репозитория. Может быть в другой раз.
7.4 Установим пару полезных плагинов
Для более удобного использования Redmine я пользуюсь двумя плагинами, без которых жить довольно печально.
1) Плагин, автоматически выставляющий 100% завершенность задачи когда ей выставляется статус «Готово». В противном случае, проценты придется каждый раз выставлять вручную, иначе суммарный процент выполненных задач не будет подсчитываться правильно.
2) Плагин, автоматически сохраняющий редактируемые задачи в виде черновика. Это помогает в том случае, если вы долго писали текст задачи, и случайно нажали комбинацию кнопок переносящих вас на страницу назад, или на одну из ваших закладок. В этом случае, открыв страницу редактор вновь, вы увидите спасительную надпись «Черновик сохранён. Восстановить?»
Приступим:
1) Плагин автоматических ста процентов:
Находится по адресу http://www.redmine.org/plugins/redmine_auto_percent, а его репозиторий на Гитхабе: https://github.com/escline/redmine-auto-percent
Перейдём в папку с плагинами:
# cd /usr/local/share/redmine/plugins |
Склонируем репозиторий плагина:
# git clone https://github.com/escline/redmine-auto-percent.git |
Запускаем миграции необходимые для установки плагина:
# rake redmine:plugins:migrate RAILS_ENV=production |
2) Плагин черновика:
Находится он здесь: http://www.redmine.org/boards/3/topics/13930, а его репозиторий здесь: https://github.com/jbbarth/redmine_drafts
Мы и так находимся в папке с плагинами, но а вдруг нет?
# cd /usr/local/share/redmine/plugins |
Клонируем репозиторий:
# git clone https://github.com/jbbarth/redmine_drafts.git |
Запускаем миграции плагина:
# rake redmine:plugins:migrate RAILS_ENV=production |
3) После установки модулей перезапускаем веб-сервер:
/etc/init.d/nginx restart |
Теперь можно зайти в админ панель → администрирование → модули, и убедиться в том, что плагины установлены.
7.5 Установим «красивую» тему
Стандартный внешний вид Redmine довольно минималистичен, и для тех кто хочет сделать его чуть «красивее», есть множество тем, и лежат они здесь: http://www.redmine.org/projects/redmine/wiki/Theme_List
Я установлю тему «basecamp-with-icon» чтобы показать как это вообще делается, ну а еще и потому что считаю её одной из неплохих, наряду с темой «A1» и еще некоторыми.
Данная тема доступна в репозитории https://github.com/lqez/redmine-theme-basecamp-with-icon
Переходим в папку с темами
# cd /usr/local/share/redmine/public/themes |
Клонируем репозиторий:
# git clone https://github.com/lqez/redmine-theme-basecamp-with-icon.git |
Перезапускаем вебсервер thin командой /etc/init.d/thin restart, после чего можно зайти в админ панель → администрирование → настройки, выбрать там вкладку «Отображение» и из выпадающего списка «Тема» выбрать свежеустановленную тему, после чего, сохранив изменения, получить желаемую тему на своём экране.
Доброго времени суток!
Занялся установкой redmine по вашей инструкции.
Единственное отличие — более новые версии всех пакетов.
В процессе установки я столкнулся с рядом трудностей, некоторые не могу решить. Буду очень благодарен, если вы окажете посильную помощь советами.
1) Первый затык возник на шаге №4, проверка работоспособности редмайна.
По команде uby script/rails server webrick -e production
выдало script/rails no longer exists, please use bin/rails instead
Решил запустить командой rails s или bundle exec rails server webrick -e production (не знаю правильно или нет, обе сработали, тестовый локальный сервак заводится).
2)Вторая не стыковка была на этапе 5.4, проверка thin сервера.
в лог файле echo /usr/local/share/redmine/logs/thin.0.log — нечего не появилось. На это сильно внимания не обратил, так как остальное отрабатывало.
3)Последняя, самая критичная проблема, над которой бьюсь уже 5 дней — шаг 6.2, nginx поставил, конфиг вбил, ссылку сделал, перезапустил, файлы переименовал. Сайт не открывается. 502 Bad Gateway (nginx/1.6.2). Хотя заголовок, судя по всему, загружается, так как значок редмайна во вкладке браузера появился.
Прошу вашей подсказки!
Привет.
1) На счёт «script/rails no longer exists» надо будет проверить самому, установить заново redmine, так как уже полгода прошло с написания статьи. Спасибо за указание на этот момент.
2) Вот то что thin.0.log не появился — это и есть основная проблема, это скорее всего означает, что сервер thin не работает, или работает не так как надо.
3) Ошибка 502 Bad Gateway означает (в случае с проксированием запросов), что сервер, которому nginx пытается передать запрос — не принимает их, или вообще не работает. В данном случае, это скорее всего означает что thin не запустился (на что есть подозрения из пункта 2), и nginx не может к нему подключиться и передать запрос от браузера.
Тот факт, что иконка загрузилась — ничего не значит, потому что когда первый раз загружается редмайн в тестовом режиме, у него уже есть иконка, и браузер её кэширует. А когда вылетает 502-я ошибка, браузер поискав файл favicon.ico в корне сервера, и не найдя его, просто взял иконку из кэша.
Да, а ещё 502-я ошибка может значит что thin работает, но вот nginx ищет его не там, где он есть.
Таким образом, чтобы решить проблему, нужно:
1. Проверить все шаги, которые делались для настройки thin
2. Убедиться что у nginx конфигурация сделана верно.
Можно скинуть сюда конфигурацию nginx и thin, желательно через pastebin.ru, а не в чистом виде.
Вот конфиги.
http://pastebin.ru/ARaLGcx3#
http://pastebin.ru/yzg2PEpD
Ниже выводы команд service thin status и service nginx status
Как будто все нормально.
http://pastebin.ru/IPRDWg6q
В твоих конфигах вижу 2 проблемы:
1) В nignx в блоке upstream thin_server у тебя указано целых 4 сервера, тогда как на самом деле у тебя только один.
2) В thin у тебя указано socket: /tmp/thin.0.sock, что неверно. Нужно писать /tmp/thin.sock, а thin сам уже додумается что файл надо называть /tmp/thin.0.sock. Сделано это для того, чтобы ты мог указать в том же конфиге servers:4 и он тебе создаст файлы /tmp/thin.0.sock, /tmp/thin.1.sock, /tmp/thin.2.sock и /tmp/thin.3.sock
Кстати nginx у тебя настроен как раз на случай с четырьмя серверами.
Пока ждал ответа уже поправил недочеты, но все равно не заводится.
Про servers:4 в том же конфиге — можно подробнее в какую секцию вставлять данный параметр.
И что еще можно посмотреть, дабы определить в чем кроется проблема, так как после всех описанных манипуляций все равно не работает. Уже проделывал все сначала.
Про servers:4 вставлять туда где у тебя написано servers: 1 (в redmine.yml)
Когда запускаешь thin-сервер, создаются ли файлы /tmp/thin.*.sock ?
Немного не могу разобраться, по какому полному пути должен создаваться данный файл?
По адресу /usr/local/share/redmine/tmp данных файлов нет, подозреваю что либо не создаются, либо я в чем-то не до конца разобрался.
Посмотри в твоём же конфиге redmine.yml, у тебя указано socket: /tmp/thin.0.sock (хотя должно быть socket: /tmp/thin.sock, но это уже другая история).
Следовательно, путь абсолютный. /tmp/thin.*.sock
redmine.yml я уже поправил. Файлы /tmp/thin.*.sock не создаются.
Сервер то запускаешь? /etc/init.d/thin start ?
Перезапускать пробовал? /etc/init.d/thin restart?
Что в логах пишет? (cat /usr/local/share/redmine/log/thin.0.log , вместо нуля можно подставить другие цифры, если у тебя серверов больше 1)
И запускал и перезапускал. В thin.0.log пустота, в thin.log видимо записи от запуска rails s http://pastebin.ru/n2vHmVU3
В логах nginx строки типа connect() to unix:/tmp/thin.4.sock failed (2: No such file or directory) while connecting to upstream.
Ответил тебе на почту, здесь уже максимальная вложенность комментов достигнута.
Для тех, кому будет интересно, в чём была проблема у Семёна:
Она была в конфиг-файле redmine.yml. Когда я только выложил его в блоге, не работала подсветка синтаксиса, и вместе с содержимым файла были видны тэги [yml] и [/yml], которые и попали в конфиг-файл redmine.yml при копировании с сайта. В них и была проблема. Сейчас подсветка синтаксиса работает нормально, и такой проблемы ни у кого возникнуть не должно.
Кстати, возможно, что проблема с thin у тебя возникла из-за того, что пример конфиг-файла, который я привел (/etc/thin/redmine.yml) плохо отформатировался, а ведь там должны быть отступы состоящие из пробелов. Сейчас поправлю…
Нет, всё правильно. Отступов там нет.
Hi,
i would very thank you!
After a week or so, your description is the best i can find to bring redmine on jessie to live.
Your example is a great Job!
Thank you!
Dieter
Hello.
I’m glad, that my experience helped somebody 🙂
Спасибо за инструкцию, всё прошло до конца.
Единственное, с чем ещё мучусь — установка в субпапке http://www.server.net/pm
Довёл почти всё до ума. вот только ресурсы грузит постоянно с рута /[dir] а не с /pm/[dir]
Это какая-то установка в redmine должна быть, не знаете случайно какая?
В config/environment.rb уже добавил RedmineApp::Application.routes.default_scope = «/pm»
Но JS и CSS всё-равно запрашивает с /
Спасибо заранее
По идее редмайн должен работать из той папки, откуда к нему обращаются из браузера. И все адреса должен выставлять относительными.
Можно посмотреть ту часть конфига nginx которая отвечает за папку /pm ?
Ставил все по вашей инструкции. Тестовый веб-сервер также не запустился, но он и не обязателен.
В общем все заработало. Но есть проблемка — после ребута сервера, thin не запускается, т.к. не может приконнектится к базе MySQL. При этом вручную все ок.
Есть подозрение, что база просто не успевает запустится, т.е. сервер thin стартует раньше БД. Как это посмотреть не приложу ума, т.к. Ruby и Gem для меня темный лес, там я так понял thin работает не как обычный демон linux, и нигде в логах syslog, daemon log я упоминания thin не нашел…
Привет!
«thin не запускается, т.к. не может приконнектится к базе MySQL»
Откуда это удалось выяснить? Можно логи из которых это следует?
Возможно thin вообще не запускается при старте системы, ввиду того, что не настроен.
1) Логи должны лежать в папке /usr/local/share/redmine/log, там должны быть файлы thin*.log — нужно посмотреть.
2) thin install запускал? файл /etc/init.d/thin появился?
3) Уверен что thin добавлен в автозапуск? Для этого в папке /etc/rc2.d/ должна быть символическая ссылка на /etc/init.d/thin, вида S05thin (начинаться имя должно с буквы S для автозапуска), либо команда /etc/init.d/thin start должна быть прописана в rc.local. Признаю, что об этом я написать в инструкции забыл, и, возможно, дело у тебя именно в этом.
thin вручную запускается без проблем и отлично работает. Не запускается он только после ребута сервера. Выяснить это удалось с логов
1. Там и лежит
2. Да конечно. Файл /etc/init.d/thin есть. И вручную ./thin start/stop/restart работает отлично
3. /etc/rc2.d — пусто и вообще во всех /etc/rc* нигде нет thin.
Получается у меня нет thin в автозапуске? А как его прописать? Что-то нигде не могу найти инфу
Но если в автозапуске нет, но как же в логах появляется запись об ошибке mysql?
Часть логов:
Writing PID to tmp/pids/thin.0.pid
Exiting!
Changing process privilege to redmine:redmine
Using rack adapter
Exiting!
/var/lib/gems/2.1.0/gems/mysql2-0.3.21/lib/mysql2/client.rb:70:in `connect’: Can’t connect to local MySQL server through socket ‘/var/run/my
sqld/mysqld.sock’ (2) (Mysql2::Error)
from /var/lib/gems/2.1.0/gems/mysql2-0.3.21/lib/mysql2/client.rb:70:in `initialize’
from /var/lib/gems/2.1.0/gems/activerecord-4.2.6/lib/active_record/connection_adapters/mysql2_adapter.rb:18:in `new’
from /var/lib/gems/2.1.0/gems/activerecord-4.2.6/lib/active_record/connection_adapters/mysql2_adapter.rb:18:in `mysql2_connection’
……….
Все решил проблему. Надо было еще выполнить команду
sudo /usr/sbin/update-rc.d -f thin defaults
Все появилось в автозагрузке и после ребута нормально работает! Спасибо за наводку
На здоровье. Тебе спасибо что выявил дефект в моей инструкции.
Добавлю туда про добавление thin в автозагрузку
Дай бог вам здоровья, добрый человек.
И вам не хворать 🙂
Добрый день, аналогичная проблема, ошибка 502
thin запускается, но при попытке зайти на сайт — падает
что может быть? скинуть логи или еще что-то?
логи thin при попытке загрузить страницу
Exiting!
/var/lib/gems/2.1.0/gems/thin-1.7.0/lib/thin/connection.rb:31:in `post_init’: cannot load such file — thin/request (LoadError)
from /var/lib/gems/2.1.0/gems/eventmachine-1.2.1/lib/em/connection.rb:58:in `block in new’
from /var/lib/gems/2.1.0/gems/eventmachine-1.2.1/lib/em/connection.rb:49:in `instance_eval’
from /var/lib/gems/2.1.0/gems/eventmachine-1.2.1/lib/em/connection.rb:49:in `new’
from /var/lib/gems/2.1.0/gems/eventmachine-1.2.1/lib/eventmachine.rb:1514:in `event_callback’
from /var/lib/gems/2.1.0/gems/eventmachine-1.2.1/lib/eventmachine.rb:194:in `run_machine’
from /var/lib/gems/2.1.0/gems/eventmachine-1.2.1/lib/eventmachine.rb:194:in `run’
from /var/lib/gems/2.1.0/gems/thin-1.7.0/lib/thin/backends/base.rb:73:in `start’
from /var/lib/gems/2.1.0/gems/thin-1.7.0/lib/thin/server.rb:162:in `start’
from /var/lib/gems/2.1.0/gems/thin-1.7.0/lib/thin/controllers/controller.rb:87:in `start’
from /var/lib/gems/2.1.0/gems/thin-1.7.0/lib/thin/runner.rb:200:in `run_command’
from /var/lib/gems/2.1.0/gems/thin-1.7.0/lib/thin/runner.rb:156:in `run!’
from /var/lib/gems/2.1.0/gems/thin-1.7.0/bin/thin:6:in `’
from /usr/local/bin/thin:23:in `load’
from /usr/local/bin/thin:23:in `’
Привет!
Как устанавливал thin ? Добавляя его в Gemfile или как-то отдельно?
В интернете пишут что подобные ошибки являются результатом того, что thin установлен не с помощью bundler’а будучи добавленным в Gemfile.
Примеры:
https://groups.google.com/forum/#!topic/thin-ruby/HkFjJfKyoVA
https://thin.lighthouseapp.com/projects/7212/tickets/162-centos-54-thin-cannot-connect-to-rails
https://github.com/macournoyer/thin/issues/115
1) покажи свой Gemfile
2) как устанавливал thin? Как в моей инструкции? Или как-то иначе?
2) как запускаешь thin? Как в инструкции или как-то иначе?
Добрый день.
Thin устанавливал сам через gem install thin.
Gemfile
source ‘https://rubygems.org’
if Gem::Version.new(Bundler::VERSION) < Gem::Version.new('1.5.0')
abort "Redmine requires Bundler 1.5.0 or higher (you're using #{Bundler::VERSION}).\nPlease update with 'gem update bundler'."
end
gem "rails", "4.2.7.1"
gem "addressable", "2.4.0" if RUBY_VERSION 3.1.4″
gem «coderay», «~> 1.1.0»
gem «builder», «>= 3.0.4»
gem «request_store», «1.0.5»
gem «mime-types», (RUBY_VERSION >= «2.0» ? «~> 3.0» : «~> 2.99»)
gem «protected_attributes»
gem «actionpack-action_caching»
gem «actionpack-xml_parser»
gem «roadie-rails»
gem «mimemagic»
# Request at least nokogiri 1.6.7.2 because of security advisories
gem «nokogiri», «>= 1.6.7.2»
# Request at least rails-html-sanitizer 1.0.3 because of security advisories
gem «rails-html-sanitizer», «>= 1.0.3»
# Windows does not include zoneinfo files, so bundle the tzinfo-data gem
gem ‘tzinfo-data’, platforms: [:mingw, :x64_mingw, :mswin, :jruby]
gem «rbpdf», «~> 1.19.0»
# Optional gem for LDAP authentication
group :ldap do
gem «net-ldap», «~> 0.12.0»
end
# Optional gem for OpenID authentication
group :openid do
gem «ruby-openid», «~> 2.3.0», :require => «openid»
gem «rack-openid»
end
platforms :mri, :mingw, :x64_mingw do
# Optional gem for exporting the gantt to a PNG file, not supported with jruby
group :rmagick do
gem «rmagick», «>= 2.14.0»
end
# Optional Markdown support, not for JRuby
group :markdown do
gem «redcarpet», «~> 3.3.2»
end
end
platforms :jruby do
# jruby-openssl is bundled with JRuby 1.7.0
gem «jruby-openssl» if Object.const_defined?(:JRUBY_VERSION) && JRUBY_VERSION 1.3.2″
end
# Include database gems for the adapters found in the database
# configuration file
require ‘erb’
require ‘yaml’
database_file = File.join(File.dirname(__FILE__), «config/database.yml»)
if File.exist?(database_file)
database_config = YAML::load(ERB.new(IO.read(database_file)).result)
adapters = database_config.values.map {|c| c[‘adapter’]}.compact.uniq
if adapters.any?
adapters.each do |adapter|
case adapter
when ‘mysql2’
gem «mysql2», «~> 0.3.11», :platforms => [:mri, :mingw, :x64_mingw]
gem «activerecord-jdbcmysql-adapter», :platforms => :jruby
when ‘mysql’
gem «activerecord-jdbcmysql-adapter», :platforms => :jruby
when /postgresql/
gem «pg», «~> 0.18.1», :platforms => [:mri, :mingw, :x64_mingw]
gem «activerecord-jdbcpostgresql-adapter», :platforms => :jruby
when /sqlite3/
gem «sqlite3», :platforms => [:mri, :mingw, :x64_mingw]
gem «jdbc-sqlite3», «>= 3.8.10.1», :platforms => :jruby
gem «activerecord-jdbcsqlite3-adapter», :platforms => :jruby
when /sqlserver/
gem «tiny_tds», «~> 0.6.2», :platforms => [:mri, :mingw, :x64_mingw]
gem «activerecord-sqlserver-adapter», :platforms => [:mri, :mingw, :x64_mingw]
else
warn(«Unknown database adapter `#{adapter}` found in config/database.yml, use Gemfile.local to load your own database gems»)
end
end
else
warn(«No adapter found in config/database.yml, please configure it first»)
end
else
warn(«Please configure your config/database.yml first»)
end
group :development do
gem «rdoc», «~> 4.3»
gem «yard»
end
group :test do
gem «minitest»
gem «rails-dom-testing»
gem «mocha»
gem «simplecov», «~> 0.9.1», :require => false
# For running UI tests
gem «capybara»
gem «selenium-webdriver», «~> 2.53.4»
end
local_gemfile = File.join(File.dirname(__FILE__), «Gemfile.local»)
if File.exists?(local_gemfile)
eval_gemfile local_gemfile
end
# Load plugins’ Gemfiles
Dir.glob File.expand_path(«../plugins/*/{Gemfile,PluginGemfile}», __FILE__) do |file|
eval_gemfile file
end
3, Запускаю Thin как в инструкции
В файле Gemfile после строчки
[ruby]
gem "mimemagic"
[/ruby]
добавь строчку
[ruby]
gem "thin"
[/ruby]
После этого из папки с Gemfile запусти команду
[bash]
bundle install —without development test postgresql sqlite
[/bash]
бандлер установит thin ПРАВИЛЬНЫМ способом 🙂
Добрый день.
Проблема с thin решилась.
но заходя на адрес машины на которой я его(редмайн) развернул
получаю
Welcome to nginx on Debian!
If you see this page, the nginx web server is successfully installed and working on Debian. Further configuration is required.
For online documentation and support please refer to nginx.org
Please use the reportbug tool to report bugs in the nginx package with Debian. However, check existing bug reports before reporting a new bug.
Thank you for using debian and nginx.
Что не так настроил? спасибо
Уже исправил. проблема была в конфиге нджинкса
Кто-нибудь подскажите, уже все перерыл, но не понятно…
Ставил и настраивал redmine по этой инструкции. Все вроде работает, но на странице просмотра вложения (https://redmine.macroplus.ru/attachments/1/logo.png) картинка не выводится, т.к. у нее src странный «http://thin_server/attachments/download/1/logo.png»
В остальных местах все норм, превьюшки показываются, сами вложения тоже.
Как это побороть, может кто сталкивался?
Привет. Похоже на неверную конфигурацию домена.
Покажи настройку nginx и thin (желательно через pastebin.ru или gist.github.com)
Редмайн установлен в локальной сети, как сделать прозрачную авторизацию с вашей инструкцией ?
Что имеется ввиду под «прозрачной авторизацией» ? Вход в редмайн снаружи локальной сети? Или что-то ещё?
Имеется ввиду: все в локальной сети (сотрудник «Новый» стучиться в редмайн, а тут бац, если сотрудника нету в ActiveDirectory то доступ запрещен.) Т.е при таком подходе не нужно вводить логин и пароль.
И по вашей инструкции пункт 7.4 вы делаете : service apache2 restart
Зачем его перезапускать если вы устанавливали nginx и на нем у вас крутиться redmine
Я через ActiveDirectory авторизацию не настраивал, но в первой же десятке ответов яндекса есть вот такая статья https://habrahabr.ru/post/245661/ где люди даже поделились самодельным плагином для SSO (т.е. авторизации совсем без ввода логина-пароля)
На счёт apache — спасибо, поправил.
Добрый день.
Сделал все по инструкции (спасибо, кстати, очень все доступно). Отображается все в спартанском виде, никаких стилей, ничего http://redmine.schoolarlife.ru/
Конфиги все как в статье.
Прикол в том, что если запустить так:
ruby bin/rails server webrick -e production
то все работает просто отлично. А в связке с nginx и thin, вот такая вон неприятность. 🙁
Привет. Я зашёл по указанному адресу, и там отображается Redmine примерно так как он должен выглядеть, а именно вот так: https://mihanentalpo.me/wp-content/uploads/2017/07/redmine_screenshot.jpeg
Если это и есть «спартанский вид», то я не соглашусь, здесь есть стили, и всё выглядит примерно как и должно.
Судя по заголовкам, сервер используется nginx/1.10.3, поэтому рискну предположить, что с момента написания корментария уже удалось всё заставить работать.
Если же нет, и за nginx’ом сейчас находится webrick, а с thin’ом подружиться не удалось — тогда пришли конфиг-файл thin’а и его логи.
Кстати, обращаю твоё внимание на то, что все проекты открыты для просмотра каждому прохожему, система не треубет логин и пароль при входе, как например здесь: redmine.mihanentalpo.me. Если это именно то, что тебе нужно, тогда всё в порядке.
Если происходит доустановка:
gem install mysql2
то после неё необходимо ещё раз выполнить:
bundle install —without development test postgresql sqlite
В команде
cat /usr/local/share/redmine/logs/thin.0.log
ошибка: директория log, а не logs.
На счёт того, что нужно повторно выполнить bundle install — согласен, но мне казалось что это очевидно из текста статьи.
На счёт logs, действительно опечатка, спасибо, исправлю.
При старте nginx открывается приветственная страница. Разворачивал локально, доступ хотел через localhost, что не так в конфиге?
# Настраиваем upstream на сокет нашего «слушающего» сервера thin
upstream thin_server {
server unix:/tmp/thin.0.sock;
}
# Веб-сервер видимый из вне
server
{
#имя сервера
server_name localhost;
#НЕ Используем HTTPS(SSL)
listen *:80;
#логи
access_log /var/log/nginx/localhost.log;
error_log /var/log/nginx/localhost.log;
#Папка public редмайна
root /usr/local/share/redmine/public;
# Основной location. Он отдаёт все статические файлы «как следует», а все
# нестатические адреса редиректит на прокси-сервер, которым и является thin
location / {
proxy_redirect off;
proxy_set_header Host localhost;
try_files $uri/index.html $uri.html $uri @thin;
}
# Именованый Location для того, чтобы было куда сослаться
location @thin
{
proxy_pass http://thin_server;
}
}
Возможно в папке /etc/nginx/sites-enabled/ есть ещё стандартный конфиг default, и он как раз открывает приветственную страницу.
Я бы порекомендовал использовать не localhost, а какой-нибудь выдуманный локальный домен, например reemine.loc,
Прописать его в nginx, а в /etc/hosts указать что этот домен должен соответствовать адресу 127.0.0.1
Это позволит открывать редмайн по адресу http://redmine.loc/ а адрес localhost останется нетронутым для чего-нибудь ещё
.
Спасибо огромное. Всё заработало.