Posts Tagged ‘redmine nginx passenger standalone server’

Instalare+Migrare RedMine (Ruby) cu Nginx, MySQL si Passenger ca stand-alone application server prin reverse proxy (Nginx) in Ubuntu 12.04 LTS

redmine

In Nginx, migrarea sau instalarea unui RedMine nu este atat de simpla precum in Apache cu mod_passenger. De ce nu e asa de simpla ? Nu pentru ca nu ar exista un modul passenger pentru Nginx, ci pentru ca ar presupune (re)compilarea din sursa a pachetului Nginx, ceea ce pentru mine a fost un inconvenient dat fiind faptul ca pe acel server Nginx ruleaza si mai mult decat atat serveste aplicatii php-fpm, iar la un update as putea avea probleme din cauza ca pachetele caure au fost instalate cu apt-get au fost updatate, iar nginx compilat din sursa a ramas la aceeasi versiune. Asadar, am cautat o alta metoda, poate nu cea mai simpla, dar sper ca mai buna pe termen lung. Asdar voi face instalarea RedMine, folosind un Nginx deja instalat si care ruleaza pe server, impreuna cu Passenger, nu ca modul ci ca standalone server, iar intre Nginx si Passenger voi face reverse proxy 80 to 8080. Mai precis Passenger va rula cu portul 8080, iar din VirtualHost-ul de Nginx voi face reverse spre el.

Instalarea pachetelor si a dependintelor:

apt-get install build-essential openssl libcurl4-openssl-dev libreadline6 libreadline6-dev curl mysql-server libmysqlclient-dev git-core zlib1g zlib1g-dev libssl-dev libyaml-dev libsqlite3-dev sqlite3 libxml2-dev libxslt-dev autoconf libc6-dev ncurses-dev automake libtool bison subversion pkg-config imagemagick libmagick-dev

Creem un grup si un user ‘redmine’ cu care vom rula apoi passenger-ul ca si standalone si il vom putea daemoniza.

groupadd redmine

useradd -s /bin/bash -d /var/sites/redmine -m -g redmine redmine

cd /var/sites/redmine

Acum urmeaza instalarea ruby si rubygems. Eu voi merge pe versiunea ruby1.9.3.

apt-get install ruby1.9.3 rubygems

Urmeaza instalarea passenger folosind package managerul pentru Ruby.

gem install passenger –version=”4.0.3″

apoi instalarea Phusion Passenger ca Standalone server:

passenger start

Descarcam Redmine versiunea 2.3 folosind SVN:

svn co http://svn.redmine.org/redmine/branches/2.3-stable /var/sites/redmine

Dupa copierea fisierelor face chown astfel ca ele sa ruleze cu userul si grupul redmine:

chown -R redmine:redmine /var/sites/redmine

Acum creem VirtualHost-ul in Nginx prin care face reverse proxy folosind portul 8080 catre Passenger si bine-nteles declaram root-ul siteului.

vim /etc/nginx/sites-available/redmine

in care adaugam:

upstream redmine {
server 127.0.0.1:8080;
}

server {
listen   80; ## listen for ipv4; this line is default and implied
#       listen   [::]:80 default ipv6only=on; ## listen for ipv6
server_name redmine.example.com;
access_log  /var/log/nginx/redmine.access.log;
error_log  /var/log/nginx/redmine.error.log;

root /var/sites/redmine/public;
index index.html index.htm;

# Make site accessible from http://localhost/

location / {
proxy_pass  http://redmine;
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
proxy_redirect off;
proxy_buffering off;
proxy_set_header        Host            $host;
proxy_set_header        X-Real-IP       $remote_addr;
proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
}
}

si acum bine-nteles il punem pe enable:

ln -s /etc/nginx/sites-available/redmine /etc/nginx/sites-enabled/

Acum creem un user si o baza de date MySQL. In cazul meu, le-am creat si am migrat datele de pe o instanta RedMine deja existenta pe un alt server unde rula cu Apache si mod_passenger, deci aici am facut doar dump la SQL:

mysql -u root -p

mysql> CREATE DATABASE redmine;

mysql> GRANT ALL ON redmine.* TO ‘redmine’@localhost IDENTIFIED BY ‘parola’;

Acum urmeaza sa fac dump la baza de date folosind fisierul .sql descarcat de pe vechiul server si userul si baza de date create adineauri:

mysql -u redmine -pparola redmine < redmine.sql

Acum urmeaza sa declaram conexiunea la baza de date din fisierul de config, si anume database.yml

vim /var/sites/redmine/config/database.yml

Unde adaugam/trebuie sa avem continutul:

# MySQL (default setup).  Versions 4.1 and 5.0 are recommended.
#
# Get the fast C bindings:
#   gem install mysql
#   (on OS X: gem install mysql — –include=/usr/local/lib)
# And be sure to use new-style password hashing:
#   http://dev.mysql.com/doc/refman/5.0/en/old-client.html

production:
adapter: mysql
database: redmine
host: localhost
username: redmine
password: parola
encoding: utf8

Acum ca am fixat si conexiunea la baza de date, mai trebuie sa reglam cateva probleme legate de versiunile de ruby folosite, si asta prin instalarea bundlerului:

apt-get install libmagickwand-dev
gem install bundler

bundle install

Acum va trebui generat un secret_token folosind rake:

rake generate_secret_token

Si pentru ca am trecut la o versiune mai noua de RedMine va trebui sa facem un db migrate intrucat structura s-a modificat putin:

RAILS_ENV=production rake db:migrate

Dupa ce am facut db:migrate urmeaza sa restartam nginx si sa pornim passenger folosind portul 8080 in modul production. Pentru moment eu nu demonizez procesul ca vreau sa vad daca apar unele erori. De asemenea, tot cum spuneam mai sus, Passenger trebuie rulat cu userul redmine, creat adineauri, dar inainte repornim Nginx. Asadar:

/etc/init.d/nginx/restart
sudo -u redmine -i

passenger start -p 8080 -e production      #se poate demoniza procesul adaugand -d la comanda

Cum spuneam la inceput, am pornit passenger pe portul 8080, iar din Nginx facem reverse proxy spre el, 80 to 8080.

Pe parcursul instalarii am intampinat o problema si anume, aparitia erorii „Internal server error” in momentul in care incercam sa accesez un proiect. Am remediat-o instaland gem-ul mysql2 (gem install mysql2) si apoi am modificat in database.yml din mysql in mysql2. Dupa aceasta actiune am rulat comenziule de clear la cache si la sessions: rake tmp:cache:clear si rake tmp:sessions:clear

srv StandDuPp
Articole recente