Crmgo Blog

Redmine 3.3 + Unicorn + Nginx auf CentOS 7

Redmine 3.3 + Unicorn + Nginx auf CentOS 7

Vorab eine Warnung: Das Bundle lässt sich nicht mit MariaDB 10 installieren; ich habe es auf 5.5 neu installiert. Vor der Installation von MariaDB 5.5 müssen alle Dateien in /var/lib/mysql entfernt werden. Anschließend laden wir Redmine 3.3.0 herunter und entpacken es in einen beliebigen Ordner. Verschieben wir die Dateien in eines der vorgesehenen Verzeichnisse für Webanwendungen…

Redmine 3.3 + Unicorn + Nginx auf CentOS 7

Gleich vorab: Das Bundle lässt sich nicht mit MariaDB 10 installieren, daher habe ich Version 5.5 neu installiert.

Vor der Installation von MariaDB 5.5 müssen alle Daten im Verzeichnis /var/lib/mysql entfernt werden.

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

Anschließend laden wir Redmine 3.3.0 herunter und entpacken es in ein beliebiges Verzeichnis.

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

Wir verschieben die Dateien in eines der für Webanwendungen vorgesehenen Verzeichnisse und erstellen die Konfiguration für die Datenbankverbindung:

# 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

Wir erstellen in der Datenbank:

# 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

Wir kehren in das Anwendungsverzeichnis zurück und installieren bundler sowie die restlichen Gems.

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

Weiterhin gemäß der Anleitung müssen wir einen geheimen Schlüssel generieren, die Migration durchführen und die Datenbank mit Demo-Daten füllen. Bei der Installation empfehle ich, sofort die russische Sprache auszuwählen.

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

Wir prüfen, ob alle Komponenten installiert wurden und ob die Anwendung funktioniert. Dazu können wir den mit dem Rails-Gem ausgelieferten Webserver Webrick verwenden.

# 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

Man kann die angegebene Adresse aufrufen und die Hauptseite von Redmine sehen.

Anschließend erstellen wir die Konfiguration für das neue 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

Und versuchen, es zu starten.

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

Nun müssen wir Unicorn mit nginx verbinden:

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

Wir prüfen die Konfiguration und wenden die Regeln an.

# 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

Wir rufen http://redmine.domain.com.ua auf.

Hinweis: Dieser Beitrag kann KI-unterstützt erstellt und anschließend redaktionell geprüft worden sein. Verantwortlich: Dmytro Lomaka, Kaltenkirchen.