Crmgo Blog

Redmine 3.3 + Unicorn + Nginx na CentOS 7

Redmine 3.3 + Unicorn + Nginx na CentOS 7

Odmah da napomenem: bundle se ne instalira sa MariaDB 10, pa sam ponovo instalirao verziju 5.5. Pre instalacije MariaDB 5.5 potrebno je obrisati sve iz /var/lib/mysql. Nakon toga preuzimamo Redmine 3.3.0 i raspakujemo ga u pogodan direktorijum. Premestimo fajlove u jedan od predviđenih direktorijuma za web aplikacije…

Redmine 3.3 + Unicorn + Nginx na CentOS 7

Prvo o klopama: bundle se ne instalira sa MariaDB 10, preinstalirao sam 5.5

Pred instalaciju MariaDB 5.5 potrebno je obrisati sve iz /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

Nakon toga preuzimamo Redmine 3.3.0 i raspakujemo ga u pogodan direktorijum.

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

Premestimo fajlove u jedan od namenjenih direktorijuma za web aplikacije i kreiramo konfiguraciju za povezivanje sa bazom podataka:

# 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

Kreiramo u bazi:

# 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

Vraćamo se u direktorijum sa aplikacijom i instaliramo bundler i ostale gemove.

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

Prema uputstvu, potrebno je generisati tajni ključ, izvršiti migraciju i popuniti bazu demo podacima. Prilikom instalacije preporučujem da odmah izaberete ruski jezik.

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

Proverićemo da li su svi komponente instalirani i da li će aplikacija raditi. Za to možemo koristiti web server webrick koji dolazi uz gem 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žete ući na navedenu adresu i videti glavnu stranicu Redmine-a.

Nakon toga kreiramo konfiguraciju za novi gem

# 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 pokušavamo da pokrenemo

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

Sada je potrebno povezati unicorn sa 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
        }
}

Proveravamo konfiguraciju i primenjujemo pravila

# 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

Ulazimo na http://redmine.domain.com.ua

Napomena: tekst može biti uz pomoć AI uz ljudsku proveru. Odgovoran: Dmytro Lomaka, Kaltenkirchen.