Crmgo Blog

Redmine 3.3 + Unicorn + Nginx na CentOS 7

Redmine 3.3 + Unicorn + Nginx na CentOS 7

Na początek o pułapce: bundle nie instaluje się z MariaDB 10, więc zainstalowałem ponownie wersję 5.5. Przed instalacją MariaDB 5.5 należy usunąć wszystko z /var/lib/mysql. Następnie pobieramy Redmine 3.3.0 i rozpakowujemy go do wygodnego katalogu. Przenosimy pliki do jednego z przeznaczonych katalogów dla aplikacji webowych…

Redmine 3.3 + Unicorn + Nginx na CentOS 7

Najpierw o pułapkach: bundle nie instaluje się z MariaDB 10, zainstalowałem ponownie wersję 5.5

Przed instalacją MariaDB 5.5 należy usunąć wszystko z /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

Po tym pobieramy Redmine 3.3.0 i wypakowujemy do wygodnego katalogu.

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

Przeniesiemy pliki do jednego z przeznaczonych katalogów dla aplikacji webowych i utworzymy konfigurację połączenia z bazą danych:

# 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

Tworzymy w bazie:

# 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

Wróć do katalogu aplikacji i zainstaluj bundler oraz pozostałe gemy.

# 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.
...

Dalej zgodnie z instrukcją należy wygenerować klucz tajny, a także wykonać migrację i wypełnić bazę danymi demonstracyjnymi. Przy instalacji zalecam natychmiast wybrać język rosyjski

# 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.

Sprawdźmy, czy wszystkie komponenty zostały zainstalowane i czy aplikacja będzie mogła działać. Do tego celu można użyć serwera www webrick, który jest dostarczany z gemem 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

Można wejść pod podany adres i zobaczyć główną stronę Redmine.

Następnie tworzenie konfiguracji dla nowego gema

# 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

I próbujemy uruchomić

# bundle exec unicorn_rails -E production -c config/unicorn.rb -D
# ps aux | grep unicorn

Teraz trzeba połączyć unicorn z 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
        }
}

Sprawdzamy konfigurację i stosujemy reguły

# 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

Wejdź na http://redmine.domain.com.ua

Uwaga: wpis mógł powstać z pomocą AI i redakcji. Odpowiedzialny: Dmytro Lomaka, Kaltenkirchen.