Настройка Redmine nginx unicorn god

В предыдущей статье мы установили 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

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

Проверим что все правильно настроено

# 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

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


#Добавим пользователя
# 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

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
        }
}

Не забудьте закомментировать default сервер в /etc/nginx/nginx.conf

#Запустим nginx
# systemctl start nginx
#Добавим в автозапуск nginx
# systemctl enable nginx
#Добавим в автозапуск god
# echo "god -c /etc/redmine.god" >> /etc/rc.local

45 thoughts on “Настройка Redmine nginx unicorn god

  1. нужно обязательно прописывать в rc.local полный путь к бинарию к примеру
    /usr/local/bin/god –/etc/redmine.god

      • После перезагрузки сервера заводится только после команд из директории с Редмайн:
        1.bundle exec unicorn_rails -E production -c config/unicorn.rb -D
        2.god -c /etc/redmine.god

      • Не подскажете, что я сделал не так? Мб тогда God а удалить, раз он не запускает unicorn? (См. ниже)

          • 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

    • Посмотрел информацию о 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, в моих условиях столько выделить памяти невозможно.

  2. Спасибо за ман ,все завелось ок.
    Если у кого будут проблемы с gem nokogiri , то это решается yum install patch

  3. Привет! Я опять столкнулся с проблемой. Вот тут по ссылке описание, чтобы не засорять ленту. Подскажешь?
    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
            Запуск из под пользователя redmine, но вы сначала от root’a запустите чтоб все работало

  4. Добрый.

    Подскажите новичку. Если команда ps ax | grep god выводит только одну строчку:

    3989 pts/1 R+ 0:00 grep –color=auto god

    значит god не работает?

  5. Добрый день. Застрял вот на этом этапе “Настройка 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

    • шас ошибка вот такая:

      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 оставить но это не безопасно если все делали верно и redmine работает от пользователя redmine то достаточно назначить владельца redmine на этот файл (chown redmine myfile) и поменять права на 740

  6. Вообшем я уже зае…ся. НЕ хочет nginx запускать редмаин:

    nginx error!
    The page you are looking for is temporarily unavailable. Please try again later.

    Website Administrator

    Где можно посмотреть что ешё ему нужно?

  7. 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/”

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *