Instalar redmine en Debian 9 con Thin y Nginx

Creamos el usuario redmine en el sistema no sin antes hacer update upgrade de los repositorios de debian:
 

# apt-get update && apt-get upgrade
# adduser redmine

 
Instalamos dependencias:
 

# apt-get install nano dialog wget gem ruby imagemagick rails ruby-dev gcc make pkgconf libmagickcore-dev  libmagickwand-dev liblzma-dev zlib1g-dev build-essential libxml2-dev libxslt-dev git mercurial subversion darcs thin cvs nginx
# apt-get install mariadb-server ruby-mysql2 libmariadbclient-dev-compat default-libmysqlclient-dev 

 
Creamos la base de datos y el usuario y password que tendrá acceso a ella:

# mysql -u root -p

CREATE DATABASE redmine CHARACTER SET utf8;
GRANT ALL PRIVILEGES ON redmine.* TO 'redmine'@'localhost' IDENTIFIED BY 'my_password';
exit

 
Descargamos la versión 3.4.3 de redmine:
 

# mkdir -p /var/www
# cd /var/www
# wget "https://www.redmine.org/releases/redmine-3.4.3.tar.gz"
# tar xfvz redmine-3.4.3.tar.gz 
# chown -R redmine:redmine redmine-3.4.3
# su - redmine
$ cd /var/www/redmine-3.4.3/config/
$ cp -pRv database.yml.example database.yml

 
Editamos el archivo database.yml con por ejemplo nano/vi/emacs/joe/…
 

$ nano database.yml

 
Borramos todo y metemos esto:
 

production:
  adapter: mysql2
  database: redmine
  host: localhost
  username: redmine
  password: "lapassworddeluserredmine"
  encoding: utf8

 
Nos vamos a la raíz del redmine:
 

$ cd ..

 
Y seguimos montando el rollazo así (puede tardar un buen rato):
 

$ exit
# gem update
# gem install bundler
# chown -R redmine:redmine /var/lib/gems/
# chown -R redmine:redmine /usr/local/bin/
# su - redmine
$ cd /var/www/redmine-3.4.3/
$ bundle install --without development test
$ bundle exec rake generate_secret_token
$ RAILS_ENV=production bundle exec rake db:migrate
$ RAILS_ENV=production bundle exec rake redmine:load_default_data

 
Seleccionamos “es” escribiendo es y le damos a Intro.
 
Permisos en directorios:
 

$ mkdir -p tmp tmp/pdf public/plugin_assets
$ chown -R redmine:redmine files log tmp public/plugin_assets
$ chmod -R 755 files log tmp public/plugin_assets

 
Podemos probar que tal va el tema así:
 

bundle exec rails server webrick -e production -b xxx.xxx.xxx.xxx

 
Donde xxx.xxx.xxx.xxx será la IP y el puerto por defecto el 3000. Si no se especifica -b con IP será localhost.
 

 
El usuario por defecto de administración es admin y la password admin.
 

 
Hasta aquí todo bien salvo que webrick no es lo mejor y es mejor usar thin (lo tenemos ya instalado).
 
Podemos probar thin así:
 

# cd /var/www/redmine-3.4.3
# thin config -C /etc/thin2.3/redmine.yml -c /var/www/redmine-3.4.3 --servers 1 -e production -a xxx.xxx.xxx.xxx -p 3000
# thin start -C /etc/thin2.3/redmine.yml -c /var/www/redmine-3.4.3 --servers 1 -e production -a xxx.xxx.xxx.xxx -p 3000
# thin stop -C /etc/thin2.3/redmine.yml -c /var/www/redmine-3.4.3 --servers 1 -e production -a xxx.xxx.xxx.xxx -p 3000

 
Tendríamos que ver redmine en el puerto 3000. http://ip:3000
 
Para reiniciar thin, pararlo o arrancarlo:
 

# service thin start
# service thin stop
# service thin restart

 
o también:
 

# /etc/init.d/thin start|stop|restart

 
Para probar es bueno pero ahora vamos a ponerlo en el 127.0.0.1 y para ello modificamos la IP guardando cambios en el archivo /etc/thin2.3/redmine.yml . Tras eso reiniciamos thin.
 
Ahora borramos el interior de default que vendrá con configuración por defecto de nginx y le calzamos esto:
 

server {
    listen 80;
    server_name redmine.dominio.com;

    access_log /var/log/nginx/redmine.dominio.com.access.log;
    error_log /var/log/nginx/redmine.dominio.com.error.log;

    root /var/www/redmine-3.4.3;

    error_page 404 404.html;
    error_page 500 502 503 504 500.html;

    location / {
        try_files $uri @thin;
    }

    location = /favicon.ico {
        expires 30d;
        try_files /favicon.ico @empty;
    }

    location @empty {
        expires 30d;
        empty_gif;
    }

    location @thin {
        proxy_http_version 1.1;
        proxy_set_header Connection '';
        proxy_pass http://127.0.0.1:3000;
    }

    location ^~ /.git {
        return 404;
    }

}

 

Reiniciamos nginx y tendría que ir todo bien.
 
Esto nos dejaría el tinglado ready para usarlo vía puerto 80. Si queremos usar https eso es ya otro post pero basicamente sería tocar la configuración de nginx.
 
Otra opción es lanzar thin en cluster con 3 servicios:
 

thin config -C /etc/thin2.3/redmine.yml -c /var/www/redmine-3.4.3 --servers 4 -e production -a 127.0.0.1 -p 3000 --socket /tmp/thin.sock

 
y luego una configuración en nginx como esta:
 

upstream thin_cluster {
    server unix:/tmp/thin.0.sock;
    server unix:/tmp/thin.1.sock;
    server unix:/tmp/thin.2.sock;
    server unix:/tmp/thin.3.sock;
}

server {
    listen 80;
    server_name redmine.dominio.com;
    access_log /var/log/nginx/redmine.dominio.com.access.log;
    error_log /var/log/nginx/redmine.dominio.com.error.log;
    root /var/www/redmine-3.4.3;
    location / {
        try_files $uri @thin_cluster;
    }

    location @thin_cluster {
        proxy_redirect off;
        proxy_pass http://thin_cluster;
    }
}

 

NO OBSTANTE Y MUY IMPORTANTE.

 
Esas configuraciones pueden darte de vez en cuando un 404. Tras horas mirando como solucionarlo di con una configuración guay que hace que se quede redmine funcionando genial.
No he borrado las anteriores configuraciones de nginx ya que en cierto modo sirven para entender como podemos adaptar la que voy a poner como definitiva:
 

upstream thin_cluster {
    server unix:/tmp/thin.0.sock;
}

server {

  listen   80;

  server_name redmine.dominio.com;
  server_name_in_redirect off;

  access_log  /var/log/nginx/redmine.access.log;
  error_log  /var/log/nginx/redmine.error.log;

  include /etc/nginx/proxy_opts;
  proxy_redirect off;

  location / {
    root   /var/www/redmine-3.4.3/public;

  error_page 404  404.html;
  error_page 500 502 503 504  500.html;
  try_files $uri/index.html $uri.html $uri @redmine_thin_servers;
  }

  location @redmine_thin_servers {
	chunked_transfer_encoding on;
    proxy_pass http://thin_cluster;
  }
}

 
Para que esto chute es vital crear el archivo /etc/nginx/proxy_opts
 

proxy_set_header        Host $http_host;
proxy_set_header        X-Real-IP $remote_addr;
proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header        X-Forwarded-Proto $scheme;

 
Y en la configuración de thin en /etc/thin2.3/redmine.yml
 

chdir: "/var/www/redmine-3.4.3/"
environment: production
address: 127.0.0.1
port: 3000
timeout: 30
log: "/var/log/thin/thin.log"
pid: tmp/pids/thin.pid
max_conns: 1024
max_persistent_conns: 512
require: []
wait: 30
servers: 1
socket: "/tmp/thin.sock"
daemonize: true
group: www-data
user: www-data

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *