В предыдущей статье мы установили Redmine и проверили его работу через встроенный http сервер webric. Webric не самый лучший выбор для http сервера.
По этому мы рассмотрим другой http сервер Unicorn, который является более быстрым и может поддерживать большое количество соединений.
А так же для подстраховки будем использовать god — Фрэймвор на Ruby для мониторинга работы процессов. God будет «воскрешать» наши unicorn процессы если они вдруг внезапно «умрут».
Настройка unicorn
# cd /srv/redmine
# vim Gemfile
#добавим строку
gem 'unicorn'
#установим модуль
# bundle install --without development test
#создадим фаил настроек unicorn.rb
# vim config/unicorn.rb
[ruby]
worker_processes 1 #Количество процессов master + 1 потомок
working_directory "/srv/redmine/" #Домашний каталог redmine
preload_app true
timeout 30
listen "/srv/redmine/tmp/sockets/unicorn.sock", :backlog => 64 #путь до unix сокета к нему будет обращаться nginx
pid "/srv/redmine/tmp/pids/unicorn.pid"
stderr_path "/srv/redmine/log/unicorn.stderr.log"
stdout_path "/srv/redmine/log/unicorn.stdout.log"
before_fork do |server, worker|
defined?(ActiveRecord::Base) and
ActiveRecord::Base.connection.disconnect!
end
after_fork do |server, worker|
defined?(ActiveRecord::Base) and
ActiveRecord::Base.establish_connection
end
[/ruby]
Проверим что все правильно настроено
# bundle exec unicorn_rails -E production -c config/unicorn.rb -D
# ps ax | grep corn
2752 ? Sl 0:03 unicorn_rails master -E production -c config/unicorn.rb -D
2757 ? Sl 0:00 unicorn_rails worker[0] -E production -c config/unicorn.rb -D
2761 pts/0 S+ 0:00 grep --color=auto corn
Настройка god
# gem install god
# vim /etc/redmine.god
[ruby]
RAILS_ROOT = ‘/srv/redmine/’
God.watch do |w|
w.name = ‘redmine’
w.interval = 30.seconds #Интервал проверки
w.log = ‘/var/log/god.log’ #фаил журнала
w.uid = ‘redmine’ #от какого пользователя будет запущен процесс
w.gid = ‘redmine’ #аналогично группа
w.pid_file = File.join(RAILS_ROOT, "tmp/pids/unicorn.pid") #мониторинг PID
w.behavior(:clean_pid_file)
w.dir = RAILS_ROOT
w.env = { ‘PATH’ => ‘/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin’ }
w.start = "bundle exec unicorn_rails -E production -c config/unicorn.rb -D" #команда запуска unicron
w.stop_signal = ‘QUIT’
w.restart = "kill -USR2 `cat #{w.pid_file}`"
w.start_grace = w.restart_grace = 30
w.start_if do |start|
start.condition(:process_running) do |c|
c.running = false
end
end
end
[/ruby]
#Добавим пользователя
# adduser redmine -d /srv/redmine -s /sbin/nologin
#Создадим фаил журнала
# touch /var/log/god.log
#Назначим владельца redmine на фаил журнала
# chown redmine:redmine /var/log/god.log
#Проверим запуск god
# god -c /etc/redmine.god
# ps ax | grep god
2817 pts/0 Sl 0:00 /usr/bin/ruby /usr/local/bin/god -c /etc/redmine.god
2857 pts/0 S+ 0:00 grep --color=auto god
# ps ax | grep corn
2846 ? Sl 0:03 unicorn_rails master -E production -c config/unicorn.rb -D
2851 ? Sl 0:00 unicorn_rails worker[0] -E production -c config/unicorn.rb -D
2864 pts/0 S+ 0:00 grep --color=auto corn
Как видим все прошло успешно, настроим nginx для обработки http запросов от клиентов.
Настрйока nginx
# vim /etc/nginx/conf.d/redmine.conf
[shell]
upstream redmine {
server unix:/srv/redmine/tmp/sockets/unicorn.sock; #путь до unix сокет файла unicorn
}
server {
client_max_body_size 200m;
root /srv/redmine/;
location / {
try_files $uri @ruby;
}
location @ruby {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_read_timeout 300;
proxy_pass http://redmine; #upstream redmine
}
}
[/shell]
Не забудьте закомментировать default сервер в /etc/nginx/nginx.conf
#Запустим nginx
# systemctl start nginx
#Добавим в автозапуск nginx
# systemctl enable nginx
#Добавим в автозапуск god
# echo "god -c /etc/redmine.god" >> /etc/rc.local
Не работает redmine.god из rc.local ( автозагрузка). Руками все без вопросов…
нужно обязательно прописывать в rc.local полный путь к бинарию к примеру
/usr/local/bin/god —/etc/redmine.god
/usr/local/bin/god —config /etc/redmine.god
Это зависит от того подгружается ли PATH переменная при выполнений
После перезагрузки сервера заводится только после команд из директории с Редмайн:
1.bundle exec unicorn_rails -E production -c config/unicorn.rb -D
2.god -c /etc/redmine.god
Не подскажете, что я сделал не так? Мб тогда God а удалить, раз он не запускает unicorn? (См. ниже)
Какую ошибку выдает god при старте ?
unicorn добавили в Gemfile ?
echo $PATH
echo $PATH
/usr/local/rvm/gems/ruby-2.2.1/bin:/usr/local/rvm/gems/ruby-2.2.1@global/bin:/usr/local/rvm/rubies/ruby-2.2.1/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/usr/local/rvm/bin:/root/bin
По GemFile:
cat Gemfile
source ‘https://rubygems.org’
if Gem::Version.new(Bundler::VERSION) 3.1.3″
gem «coderay», «~> 1.1.0»
gem «builder», «>= 3.0.4»
gem «request_store», «1.0.5»
gem «mime-types»
gem «protected_attributes»
gem «actionpack-action_caching»
gem «actionpack-xml_parser»
gem «loofah», «~> 2.0»
gem «unicorn»
# Windows does not include zoneinfo files, so bundle the tzinfo-data gem
gem ‘tzinfo-data’, platforms: [:mingw, :x64_mingw, :mswin, :jruby]
gem «rbpdf», «~> 1.18.6»
God просто не запускается. Не подскажите Ваш полный путь до гема God?
echo $PATH
/usr/local/rvm/gems/ruby-2.1.2/bin:/usr/local/rvm/gems/ruby-2.1.2@global/bin:/usr/local/rvm/rubies/ruby-2.1.2/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/rvm/bin
полный путь до god (/usr/local/rvm/gems/ruby-2.1.2/bin/god)
в redmine god у меня прописан PATH
w.env = { ‘PATH’ => ‘/usr/local/rvm/rubies/ruby-2.1.2/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin’ }
Проверил и сравнил пути. Запускается только после:
1.bundle exec unicorn_rails -E production -c config/unicorn.rb -D
2.god -c /etc/redmine.god
Значит нужно смотреть почему god не может запустит unicorn — он должен писать в лог почему не стартует
может не хватает доступа? или не может его найти?
Поправочка, хватает команды
bundle exec unicorn_rails -E production -c config/unicorn.rb -D
Бандл ставил из под пользователя (не рута). в этом может быть причина?
Может быть в этом, что в логах?
В логах загрузка модулей +
[NOTE]
You may have encountered a bug in the Ruby interpreter or extension libraries.
Bug reports are welcome.
For details: http://www.ruby-lang.org/bugreport.html
I, [2015-10-08T15:02:29.534548 #2278] INFO — : Refreshing Gem list
I, [2015-10-08T15:02:39.096731 #2278] INFO — : unlinking existing socket=/srv/redmine/tmp/sockets/unicorn.sock
I, [2015-10-08T15:02:39.097216 #2278] INFO — : listening on addr=/srv/redmine/tmp/sockets/unicorn.sock fd=12
I, [2015-10-08T15:02:39.099773 #2278] INFO — : master process ready
I, [2015-10-08T15:02:39.106246 #2283] INFO — : worker=0 ready
Это логи unicorn я так полагаю а вам нужен log god’a
Он пустой
Почему не использовать вместо Unicorn -> Puma ?
Честно сказать не знал о Puma. Судя по тестам, которые выложены на сайте, и в правду круто
Посмотрел информацию о puma.
https://github.com/puma/puma: …it is highly recommended that you use a Ruby implementation with real threads like Rubinius or JRuby.
rvm install rubinius: For rbx (Rubinius) more than 500MB of free RAM might be required.
Если коротко, то для запуска только самого Rubinius, на котором (теоретически) puma будет работать лучше, нужно еще 500+МБ свободной RAM, в моих условиях столько выделить памяти невозможно.
Спасибо за ман ,все завелось ок.
Если у кого будут проблемы с gem nokogiri , то это решается yum install patch
Привет! Я опять столкнулся с проблемой. Вот тут по ссылке описание, чтобы не засорять ленту. Подскажешь?
http://ru.stackoverflow.com/questions/459612/redmine-%D0%BD%D0%B5-%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%B0%D1%8E%D1%82-%D0%B2%D0%BA%D0%BB%D0%B0%D0%B4%D0%BA%D0%B8-%D0%97%D0%B0%D0%B4%D0%B0%D1%87%D0%B8-%D0%9A%D0%B0%D0%BB%D0%B5%D0%BD%D0%B4%D0%B0%D1%80%D1%8C-%D0%B8-%D0%B4%D1%80?sem=2
Непонятная ошибка.
Попробуй скачать архив redmine по новой http://www.redmine.org/releases/redmine-3.1.1.tar.gz
Дропни базу и сделай установку заново.
Или же для начала просто дропни базу и установи схему заново.
Посмотри еще лог unicorn может там что есть подробности
Недавно разворачивал — 3.1.1 проблем не возникло.
Переставлю с «0» вместе с ОС.
Вопрос: при установки Бандла пишет, что если установить из под rootа, может некорректно работать из под других пользователей, поэтому я устанавливал от имени другого пользователя.
Вы как устанавливаете обычно?
Я устанавливал из под пользователя root
Тол есть все операции из под пользователя root?
Настройка установка из под пользователя root
Запуск из под пользователя redmine, но вы сначала от root’a запустите чтоб все работало
Добрый.
Подскажите новичку. Если команда ps ax | grep god выводит только одну строчку:
3989 pts/1 R+ 0:00 grep —color=auto god
значит god не работает?
Да, он не запущен. А вывод что вы скинули означает что в списке процессов содержащих слово god был только grep
Куда копать тогда, если god.log пустой?
Можно посмотреть system.log или messages возможно у god недостаточно прав туда писать по этому он пуст
Добрый день. Застрял вот на этом этапе «Настройка unicorn» после:
«bundle install —without development test»
пытаюсь проверить и «bundle exec unicorn_rails -E production -c config/unicorn.rb -D»
и выдаёт вот это:
bundler: failed to load command: unicorn_rails (/usr/local/bin/unicorn_rails)
ArgumentError: config_file=config/unicorn.rb would not be accessible in working_directory=/srv/redmine
/usr/local/share/gems/gems/unicorn-5.1.0/lib/unicorn/configurator.rb:538:in `working_directory’
config/unicorn.rb:2:in `reload’
/usr/local/share/gems/gems/unicorn-5.1.0/lib/unicorn/configurator.rb:72:in `instance_eval’
/usr/local/share/gems/gems/unicorn-5.1.0/lib/unicorn/configurator.rb:72:in `reload’
/usr/local/share/gems/gems/unicorn-5.1.0/lib/unicorn/configurator.rb:65:in `initialize’
/usr/local/share/gems/gems/unicorn-5.1.0/lib/unicorn/http_server.rb:76:in `new’
/usr/local/share/gems/gems/unicorn-5.1.0/lib/unicorn/http_server.rb:76:in `initialize’
/usr/local/share/gems/gems/unicorn-5.1.0/bin/unicorn_rails:209:in `new’
/usr/local/share/gems/gems/unicorn-5.1.0/bin/unicorn_rails:209:in `’
/usr/local/bin/unicorn_rails:23:in `load’
/usr/local/bin/unicorn_rails:23:in `’
master failed to start, check stderr log for details
вы находитесь в /srv/redmine ?
Да
система Centos 7 с последними обновами.
А можете показать содержимое config/unicorn.rb
всё исправил как не спрашивайте хз.
шас ошибка вот такая:
2016/11/02 21:02:57 [crit] 9917#0: *279 connect() to unix:/srv/redmine/tmp/sockets/unicorn.sock failed (13: Permission denied) while connecting to upstream, client: 192.168.1.41, server: , request: «HEAD / HTTP/1.0», upstream: «http://unix:/srv/redmine/tmp/sockets/unicorn.sock:/»
Нужно установить нужные права на фаил
Какие именно ставить у меня щас 777
можно 777 оставить но это не безопасно если все делали верно и redmine работает от пользователя redmine то достаточно назначить владельца redmine на этот файл (chown redmine myfile) и поменять права на 740
Вообшем я уже зае…ся. НЕ хочет nginx запускать редмаин:
nginx error!
The page you are looking for is temporarily unavailable. Please try again later.
Website Administrator
Где можно посмотреть что ешё ему нужно?
2016/11/11 15:01:00 [crit] 31913#0: *19 connect() to unix:/srv/redmine/tmp/sockets/unicorn.sock failed (13: Permission denied) while connecting to upstream, client: 192.168.1.41, server: redmine, request: «GET / HTTP/1.1», upstream: «http://unix:/srv/redmine/tmp/sockets/unicorn.sock:/», host: «redmine.*»
2016/11/11 15:01:00 [error] 31913#0: *19 open() «/srv/redmine/public/nginx-logo.png» failed (13: Permission denied), client: 192.168.1.41, server: redmine, request: «GET /nginx-logo.png HTTP/1.1», host: «redmine.*», referrer: «http://redmine.*/»
2016/11/11 15:01:00 [error] 31913#0: *19 open() «/srv/redmine/public/poweredby.png» failed (13: Permission denied), client: 192.168.1.41, server: redmine, request: «GET /poweredby.png HTTP/1.1», host: «redmine.*.ru», referrer: «http://redmine.*.ru/»
2016/11/11 15:01:01 [error] 31913#0: *19 open() «/srv/redmine/public/favicon.ico» failed (13: Permission denied), client: 192.168.1.41, server: redmine, request: «GET /favicon.ico HTTP/1.1», host: «redmine.*.ru», referrer: «http://redmine.*.ru/»
chmod 777 /srv/redmine/tmp/sockets/unicorn.sock
как быстрый способ решить проблему
Всё сделал забыл пользователя NGINX сделать на каталог редмайна.
это было сделано не не работало всё равно. Пока на весь каталог не сделал не заработало.