objetivo

instalar o redmine 2.x com NGINX 1.3.x e Passenger 3.x.x.

ambiente

Debian Squeeze 6.0 - 64 Bits

instalando

pre-reqs

repos debian

abaixo os repositórios eu que estou usando, edite seu arquivo sources.list e ajuste conforme abaixo

deb http://ftp.br.debian.org/debian/ squeeze main contrib non-free
deb http://security.debian.org/ squeeze/updates main contrib non-free
deb http://ftp.br.debian.org/debian/ squeeze-updates main contrib non-free
 
# para instalar um pacote backports apt-get -t squeeze-backport install package
deb http://backports.debian.org/debian-backports squeeze-backports main

atualize os índices após alterar os repositórios

aptitude update

redmine

pre-reqs

pacotes sql

necessários para o bundle install mysql,pg,sqlite

aptitude install postgresql-server-dev-8.4 libmysqld-dev libsqlite3-dev

imagemagick

necessário para a gem imagemagick

aptitude install install libmagick9-dev

pacotes ruby

instalando dependencias para redmine

apt-get install ruby rubygems rake libcurl3 libcurl4-openssl-dev

gem path

para usar o gems precisamos ajustar o path, antes disso precisamos o EXECUTABLE DIRECTORY do RUBY, use o comando abaixo para descobrir:

gem environment

saída

RubyGems Environment:
  - RUBYGEMS VERSION: 1.3.7
  - RUBY VERSION: 1.8.7 (2010-08-16 patchlevel 302) [x86_64-linux]
  - INSTALLATION DIRECTORY: /var/lib/gems/1.8
  - RUBY EXECUTABLE: /usr/bin/ruby1.8
  - EXECUTABLE DIRECTORY: /var/lib/gems/1.8/bin
  - RUBYGEMS PLATFORMS:
    - ruby
    - x86_64-linux
  - GEM PATHS:
     - /var/lib/gems/1.8
     - /root/.gem/ruby/1.8
  - GEM CONFIGURATION:
     - :update_sources => true
     - :verbose => true
     - :benchmark => false
     - :backtrace => false
     - :bulk_threshold => 1000
  - REMOTE SOURCES:
     - http://rubygems.org/

bacana, o diretório é /var/lib/gems/1.8/bin , vamos adicioná-lo ao path no arquivo /etc/profile

vim /etc/profile

tem que ficar como abaixo, veja no final da linha /var/lib/gems/1.8/bin

if [ "`id -u`" -eq 0 ]; then
  PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/var/lib/gems/1.8/bin"
else
  PATH="/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/var/lib/gems/1.8/bin"
fi

salve arquivo e recarregue

source /etc/profile

pronto, agoamos podemos continuar.

instalando

fazendo o download do redmine 2.0.3

cd /opt/downloads
wget http://rubyforge.org/frs/download.php/76259/redmine-2.0.3.tar.gz

descompactando

tar zxvf redmine-2.0.3.tar.gz

mova o diretório para /opt

mv redmine-2.0.3 ../

crie um link simbólico para facilitar

ln -s redmine-2.0.3 redmine

acesse o diretório

cd redmine

instale o bundle

gem install bundle

rode o bundle install (tem que estar dentro do diretório do redmine)

bundle install

saída

Fetching gem metadata from http://rubygems.org/.......
Using rake (0.9.2.2) 
Using i18n (0.6.0) 
Using multi_json (1.3.6) 
Using activesupport (3.2.6) 
Using builder (3.0.0) 
Using activemodel (3.2.6) 
Using erubis (2.7.0) 
Using journey (1.0.4) 
Using rack (1.4.1) 
Using rack-cache (1.2) 
Using rack-test (0.6.1) 
Using hike (1.2.1) 
Using tilt (1.3.3) 
Using sprockets (2.1.3) 
Using actionpack (3.2.6) 
Using mime-types (1.19) 
Using polyglot (0.3.3) 
Using treetop (1.4.10) 
Using mail (2.4.4) 
Using actionmailer (3.2.6) 
Using arel (3.0.2) 
Using tzinfo (0.3.33) 
Using activerecord (3.2.6) 
Using activeresource (3.2.6) 
Using bundler (1.1.4) 
Using coderay (1.0.7) 
Using fastercsv (1.5.5) 
Using json (1.7.3) 
Using metaclass (0.0.1) 
Using mocha (0.12.0) 
Using mysql (2.8.1) 
Using net-ldap (0.3.1) 
Using pg (0.14.0) 
Using rack-ssl (1.3.2) 
Using rdoc (3.12) 
Using thor (0.15.4) 
Using railties (3.2.6) 
Using rails (3.2.6) 
Using prototype-rails (3.2.1) 
Using ruby-openid (2.1.8) 
Using rack-openid (1.3.1) 
Using rmagick (2.13.1) 
Using shoulda (2.11.3) 
Installing sqlite3 (1.3.6) with native extensions 
Installing yard (0.8.2.1) 
Your bundle is complete! Use `bundle show [gemname]` to see where a bundled gem is installed.

vamos criar o banco de dados, mude para o usuário postgres

su postgres

acesse o banco

psql
psql (8.4.12)
Type "help" for help.

crie a role redmine

postgres=# CREATE ROLE redmine LOGIN ENCRYPTED PASSWORD '4linux' NOINHERIT VALID UNTIL 'infinity';
CREATE ROLE

crie o banco

postgres=# CREATE DATABASE redmine WITH ENCODING='UTF8' OWNER=redmine;
CREATE DATABASE

saia do banco

postgres=# \q
postgres@infra-java:/opt/redmine$ exit

agora vamos configurar a parte de banco do redmine

cd /opt/redmine/configs

copie o arquivo

cp database.yml.example database.yml

edite o arquivo e insira apenas o conteúdo abaixo

vim database.yml
production:
  adapter: postgresql
  database: redmine
  host: localhost
  username: redmine
  password: 4linux
  encoding: utf8
:wq

salve e retorno ao diretório raiz do redmine, agora precisamos rodar o comando rake generatesecrettoken

rake generate_secret_token

saída

(in /opt/redmine-2.0.3)
rake aborted!
uninitialized constant Rake::DSL
/opt/redmine-2.0.3/Rakefile:7
(See full trace by running task with --trace)

veja que deu um erro ai, pesquisando cai em uma página na stackoverflow que ajudou a resolver o problema, basicamente vamos remover o rake atual que não compatível com o redmine-2.0.3 e instalar um mais novo.

gem uninstall rake

saída

Remove executables:
	rake

in addition to the gem? [Yn]  y
Removing rake

You have requested to uninstall the gem:
	rake-0.9.2.2
treetop-1.4.10 depends on [rake (>= 0)]
sprockets-2.1.3 depends on [rake (>= 0)]
rack-1.4.1 depends on [rake (>= 0)]
multi_json-1.3.6 depends on [rake (~> 0.9)]
mocha-0.12.0 depends on [rake (>= 0)]
railties-3.2.6 depends on [rake (>= 0.8.7)]
thor-0.15.4 depends on [rake (~> 0.9)]
If you remove this gems, one or more dependencies will not be met.
Continue with Uninstall? [Yn]  y
Successfully uninstalled rake-0.9.2.2

instale o novo rake

gem install rake

saída

Successfully installed rake-0.9.2.2
1 gem installed
Installing ri documentation for rake-0.9.2.2...
Building YARD (yri) index for rake-0.9.2.2...
Installing RDoc documentation for rake-0.9.2.2...

mesmo assim ainda estaremos vendo o rake velho

rake --version
rake, version 0.8.7

passa a faca nele

aptitude remove rake

se nao encontrar o rake, logue novamente para recarregar o PATH, se preferir pode passar o path absoluto do rake novo

/var/lib/gems/1.8/bin/rake generatesecrettoken

pronto agora vamos popular a base (antes dê uma checadinha)

rake --version
rake, version 0.9.2.2

legal, tá certinho

rake db:migrate RAILS_ENV="production"

você vai ter uma longa saída que vai acabar nisso

...
==  ChangeRepositoriesToFullSti: migrating ====================================
==  ChangeRepositoriesToFullSti: migrated (0.0003s) ===========================

agora vamos acertar as permissÕes

chown www-data. redmine-2.0.3/ -R

bacana, agora vamos configurar o nginx

passenger

vamos instalar o passenger

gem install passenger

assim que instalado, configura se o diretório abaixo existe

cd /var/lib/gems/1.8/gems/passenger-3.0.13/ext/nginx

liste o conteúdo

ls

saída

config           Configuration.h   ContentHandler.h  ngx_http_passenger_module.c  ScgiRequestParser.h     StaticContentHandler.h
Configuration.c  ContentHandler.c  HelperAgent.cpp   ngx_http_passenger_module.h  StaticContentHandler.c

bacana, isso será usado para compilação do nginx com suporte a passenger

nginx

pre-reqs

vamos compilar a ultima versão do nginx, para isso precisamos de algumas coisas, vamos instalar

aptitude install libpcre3 libpcre3-dev libpcrecpp0 libssl-dev zlib1g-dev

instalando

baixando o nginx ultima versao

wget  http://nginx.org/download/nginx-1.3.3.tar.gz

descompactando

tar zxvf nginx-1.3.3.tar.gz

entre no diretório

cd nginx-1.3.3 

configurando

configure os sources para instalação

./configure --sbin-path=/usr/sbin --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --pid-path=/var/run/nginx.pid --lock-path=/var/lock/nginx.lock --http-log-path=/var/log/nginx/access.log --http-client-body-temp-path=/var/lib/nginx/body --http-proxy-temp-path=/var/lib/nginx/proxy --http-fastcgi-temp-path=/var/lib/nginx/fastcgi --with-debug --with-http_stub_status_module --with-http_flv_module --with-http_ssl_module --with-http_dav_module --with-ipv6 --add-module=/var/lib/gems/1.8/gems/passenger-3.0.11/e^C/nginx --with-poll_module --with-pcre --with-http_gzip_static_module

se você teve uma saída como abaixo pode prosseguir, se não corrija os problemas que o configure apontou

Configuration summary
  + using system PCRE library
  + using system OpenSSL library
  + md5: using OpenSSL library
  + sha1: using OpenSSL library
  + using system zlib library

  nginx path prefix: "/usr/local/nginx"
  nginx binary file: "/usr/sbin"
  nginx configuration prefix: "/etc/nginx"
  nginx configuration file: "/etc/nginx/nginx.conf"
  nginx pid file: "/var/run/nginx.pid"
  nginx error log file: "/var/log/nginx/error.log"
  nginx http access log file: "/var/log/nginx/access.log"
  nginx http client request body temporary files: "/var/lib/nginx/body"
  nginx http proxy temporary files: "/var/lib/nginx/proxy"
  nginx http fastcgi temporary files: "/var/lib/nginx/fastcgi"
  nginx http uwsgi temporary files: "uwsgi_temp"
  nginx http scgi temporary files: "scgi_temp"

compilando

bora compilar

make

se tudo deu certo, você deve ver a linha abaixo

make[1]: Leaving directory `/opt/downloads/nginx-1.3.3'

instalando

hora de instalar

make install

se tudo deu certo, você deve ver a linha baixo

make[1]: Leaving directory `/opt/downloads/nginx-1.3.3'

testando

testando nginx

mkdir -p /var/lib/nginx/body

rode o nginx

nginx

veja se aporta abriu

netstat -ntpl|grep nginx
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      5255/nginx: master

o louco, abriu, vamos testar acesse http://localhost

It works!
This is the default web page for this server.
The web server software is running but no content has been added, yet.

bacana, carregou geral.

configurando

nginx.conf

salve uma cópia do nginx.conf

cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.original

substitua o conteúdo do nginx.conf por esse aqui

vim

/etc/nginx.conf
user  nobody;
worker_processes  1;
 
#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;
 
#pid        logs/nginx.pid;
 
 
events {
    worker_connections  1024;
}
 
http {
 
    passenger_root /var/lib/gems/1.8/gems/passenger-3.0.13;
    passenger_max_pool_size 4;
    passenger_max_instances_per_app 1;
    passenger_pool_idle_time 3600;
 
    include       mime.types;
    default_type  application/octet-stream;
 
    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';
 
    #access_log  logs/access.log  main;
 
    sendfile        on;
    #tcp_nopush     on;
 
    #keepalive_timeout  0;
    keepalive_timeout  65;
 
    gzip  on;
 
    server {
        listen       80;
        server_name  localhost;
 
        passenger_enabled on;
        rails_env production;
 
        root /opt/redmine-2.0.3/public;
 
        error_page   500 502 503 504  /50x.html;
        location = /50x.html { root   html; }
    }
 
}

pronto, agora vamos fazer o script de init.

init

script

tomei a liberdade de copiar o script de init do pacote NGINX oficial do site, serve como uma luva.

crie um arquivo em /etc/init.d/nginx e insira o conteúdo abaixo

/etc/init.d/nginx
#!/bin/sh
### BEGIN INIT INFO
# Provides:          nginx
# Required-Start:    $network $remote_fs $local_fs 
# Required-Stop:     $network $remote_fs $local_fs
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Stop/start nginx
### END INIT INFO
 
# Author: Sergey Budnevitch <sb@nginx.com>
 
PATH=/sbin:/usr/sbin:/bin:/usr/bin
DESC=nginx
NAME=nginx
CONFFILE=/etc/nginx/nginx.conf
DAEMON=/usr/sbin/nginx
DAEMON_ARGS="-c $CONFFILE"
PIDFILE=/var/run/$NAME.pid
SCRIPTNAME=/etc/init.d/$NAME
 
[ -x $DAEMON ] || exit 0
 
[ -r /etc/default/$NAME ] && . /etc/default/$NAME
 
. /lib/init/vars.sh
 
. /lib/lsb/init-functions
 
do_start()
{
    start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON -- \
        $DAEMON_ARGS
    RETVAL="$?"
    return "$RETVAL"
}
 
do_stop()
{
    # Return
    #   0 if daemon has been stopped
    #   1 if daemon was already stopped
    #   2 if daemon could not be stopped
    #   other if a failure occurred
    start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE --name $NAME
    RETVAL="$?"
    rm -f $PIDFILE
    return "$RETVAL"
}
 
do_reload() {
    #
    start-stop-daemon --stop --signal HUP --quiet --pidfile $PIDFILE --name $NAME
    RETVAL="$?"
    return "$RETVAL"
}
 
do_configtest() {
    if [ "$#" -ne 0 ]; then
        case "$1" in
            -q)
                FLAG=$1
                ;;
            *)
                ;;
        esac
        shift
    fi
    $DAEMON -t $FLAG -c $CONFFILE
    RETVAL="$?"
    return $RETVAL
}
 
do_upgrade() {
    OLDBINPIDFILE=$PIDFILE.oldbin
 
    do_configtest -q || return 6
    start-stop-daemon --stop --signal USR2 --quiet --pidfile $PIDFILE --name $NAME
    RETVAL="$?"
    sleep 1
    if [ -f $OLDBINPIDFILE -a -f $PIDFILE ]; then
        start-stop-daemon --stop --signal QUIT --quiet --pidfile $OLDBINPIDFILE --name $NAME
        RETVAL="$?"
    else
        echo $"Upgrade failed!"
        RETVAL=1
        return $RETVAL
    fi
}
 
case "$1" in
    start)
        [ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC " "$NAME"
        do_start
        case "$?" in
            0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
            2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
        esac
        ;;
    stop)
        [ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME"
        do_stop
        case "$?" in
            0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
            2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
        esac
        ;;
  status)
        status_of_proc "$DAEMON" "$NAME" && exit 0 || exit $?
        ;;
  configtest)
        do_configtest
        ;;
  upgrade)
        do_upgrade
        ;;
  reload|force-reload)
        log_daemon_msg "Reloading $DESC" "$NAME"
        do_reload
        log_end_msg $?
        ;;
  restart|force-reload)
        log_daemon_msg "Restarting $DESC" "$NAME"
        do_configtest -q || exit $RETVAL
        do_stop
        case "$?" in
            0|1)
                do_start
                case "$?" in
                    0) log_end_msg 0 ;;
                    1) log_end_msg 1 ;; # Old process is still running
                    *) log_end_msg 1 ;; # Failed to start
                esac
                ;;
            *)
                # Failed to stop
                log_end_msg 1
                ;;
        esac
        ;;
    *)
        echo "Usage: $SCRIPTNAME {start|stop|status|restart|reload|force-reload|upgrade|configtest}" >&2
        exit 3
        ;;
esac
 
exit $RETVAL

permissões

precisamos colocar permissão de execução nos cript

chmod 755 /etc/init.d/nginx

inicialização

colocando script na inicialização

update-rc.d -f nginx defaults

conferindo

ls /etc/rc2.d/ |grep nginx
S17nginx

bacana, vamos testar.

testando

primeiro vamos matar o processo nginx que está rodando

killall nginx
killall nginx

agora vamos iniciar pelo script

/etc/init.d/nginx start

confere

netstat -ntpl|grep nginx
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      5920/nginx.conf

acesse http://localhost, usuário admin, senha admin

referencias



instalando_redmine_2.x_com_nginx_e_passenger.txt · Last modified: 2012/07/17 14:59 by gutocarvalho
CC Attribution-Share Alike 4.0 International
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0