Crmgo Блог

Redmine 3.3 + Unicorn + Nginx на CentOS 7

Redmine 3.3 + Unicorn + Nginx на CentOS 7

Сразу о граблях: bundle не инсталится с MariaDB 10, переустановил 5.5 Перед установкой MariaDB 5.5 нужно снести все с /var/lib/mysql После этого скачиваем Redmine 3.3.0 и распаковываю в удобную папку. Переместим файлы в одно из предназначенных каталогов для веб приложений…

Redmine 3.3 + Unicorn + Nginx на CentOS 7

Сразу о граблях: bundle не инсталится с MariaDB 10, переустановил 5.5

Перед установкой MariaDB 5.5 нужно снести все с /var/lib/mysql

# yum install epel-release
# yum install unzip patch ruby freetds-devel ImageMagick-c++-devel mariadb-devel gcc ruby-devel rubygem-json rubygem-psych libyaml

После этого скачиваем Redmine 3.3.0 и распаковываю в удобную папку.

# wget http://www.redmine.org/releases/redmine-3.3.0.zip
# unzip redmine-3.3.0.zip

Переместим файлы в одно из предназначенных каталогов для веб приложений и создадим конфигурацию для соединения с базой данных:

# mv redmine-3.3.0 /var/www/redmine
# cd /var/www/redmine/config 
# cp database.yml.example database.yml 
# vim database.yml
production:
  adapter: mysql2
  database: redmine
  host: localhost
  username: redmine
  password: "xxxxx"
  encoding: utf8

Создаем в базе:

# mysql -p
MariaDB [(none)]> CREATE DATABASE redmine CHARACTER SET utf8 COLLATE utf8_general_ci;
MariaDB [(none)]> grant all privileges on redmine.* to redmine@localhost identified by 'xxxxx';
MariaDB [(none)]> flush privileges;
MariaDB [(none)]> exit

Возвращаемся в каталог с приложением и устанавливаем bundler и остальные гемы.

# cd /var/www/redmine/

# gem install bundler

# vim Gemfile 
gem 'unicorn'

# export PATH='/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/user/.local/bin:/home/user/bin'
# bundle install --without development test
...
Bundle complete! 27 Gemfile dependencies, 46 gems now installed.
...

Далее по инструкции необходимо сгенерировать секретный ключ, а так же выполнить миграцию и наполнить базу демо-данными. При установке рекомендую сразу выбрать русский язык

# rake generate_secret_token
# RAILS_ENV=production rake db:migrate
# RAILS_ENV=production rake redmine:load_default_data
Select language: ar, az, bg, bs, ca, cs, da, de, el, en, en-GB, es, es-PA, et, eu, fa, fi, fr, gl, he, hr, hu, id, it, ja, ko, lt, lv, mk, mn, nl, no, pl, pt, pt-BR, ro, ru, sk, sl, sq, sr, sr-YU, sv, th, tr, uk, vi, zh, zh-TW [en] ru
====================================
Default configuration data loaded.

Проверим все ли компоненты установились и сможет ли приложение работать. Для этого можно использовать веб-сервер webrick который идет в комплекте с гемом rails.

# rails server webrick -e production -b 192.168.0.10
=> Booting WEBrick
=> Rails 4.2.1 application starting in production on http://192.168.0.10:3000 => Run `rails server -h` for more startup options => Ctrl-C to shutdown server [2015-06-13 15:24:41] INFO WEBrick 1.3.1 [2015-06-13 15:24:41] INFO ruby 2.2.1 (2015-02-26) [x86_64-linux] [2015-06-13 15:24:41] INFO WEBrick::HTTPServer#start: pid=27426 port=3000

Можно зайти по указанному адресу и увидеть главную страницу Redmine.

Далее создание конфигурации для нового гема

# vim config/unicorn.rb

worker_processes 1   # Количество процессов: master + 1 дочерний
working_directory "/var/www/redmine/" # Домашний каталог redmine
 
preload_app true
 
timeout 30
 
listen "/var/www/redmine/tmp/sockets/unicorn.sock", :backlog => 64 #путь к unix сокету с которым будет работать nginx
 
pid "/var/www/redmine/tmp/pids/unicorn.pid" # Место хранения PID-файла
 
stderr_path "/war/www/redmine/log/unicorn.stderr.log" # файл логов для ошибок
stdout_path "/war/www/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 aux | grep unicorn

Теперь необходимо подружить unicorn с nginx:

# vim /etc/nginx/conf.d/redmine.conf

upstream redmine {
    server unix:/var/www/redmine/tmp/sockets/unicorn.sock;
}

server {
        listen 80;
        server_name redmine.domain.com.ua;
        client_max_body_size 200m;
        root /var/www/redmine/;

        location / {
                try_files $uri @ruby;
        }

        location ~* \.(jpg|gif|png|js|css|ico)$ {
                root /var/www/redmine/public;
                expires 7d;
                error_page 404 502 504 = @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
        }
}

Проверяем конфигурацию и применяем правила

# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
# nginx -s reload

Заходим http://redmine.domain.com.ua

Примечание: материал мог быть создан с помощью ИИ и затем отредактирован человеком. Ответственный: Dmytro Lomaka, Kaltenkirchen.