Delirios de un Informático

Cómo instalar Redmine 2.2 con Apache en subdirectorio

En 2011 ya comenté cómo instalar Redmine con Apache en subdirectorio pero se trataba de versión 1.2. Hace unos días recurrí a estas instrucciones para instalar la reciente versión 2.2 pero la cosa se complicó un poco: se proporcionan instrucciones oficiales para instalar en un subdirectorio pero aquí, aquí y aquí se habla largo y tendido de que no funciona correctamente.

El problema parece estar en que al indicar el subdirectorio mediante el archivo environment.rb las direcciones de los archivos estáticos se generan correctamente pero no los enlaces de la interfaz. Modificando la configuración para que se generen correctamente, dejan de funcionar los archivos estáticos. Tras probar mil y una opciones, al final acabé haciendo una instalación híbrida: configurar Apache para que sirva los estáticos y realice las llamadas a Redmine mediante un proxy, utilizando el servidor webrick.

Las instrucciones de instalación sugieren instalar una cantidad de dependencias que no es normal (¿para qué demonios necesito compilar una extensión nativa de PostgreSQL si no lo voy a usar?) por lo que mejor realizar una instalación básica en Debian:

apt-get install ruby rubygems
apt-get install libmagick9-dev libmysqlclient-dev libsqlite3-dev libpq-dev ruby-dev
gem install rails --include-dependencies
gem install rake --version=0.8.7
gem install builder --version=3.0.0
gem install bundler coderay fastercsv jquery-rails json mysql2 net-ldap
gem install pg rack-openid rmagick sqlite3 test-unit yard
gem install jquery-rails --version=2.0.2
gem install mocha --version=0.12.3
gem install mysql --version=2.8.1
gem install shoulda --version=2.11
gem install ruby-openid --version=2.1.8
apt-get remove --purge libmagick9-dev libmysqlclient-dev libsqlite3-dev libpq-dev ruby-dev
apt-get autoremove --purge

Una vez instaladas las dependencias, la instalación de Redmine se realiza con los siguientes comandos:

/var/lib/gems/1.8/bin/rake generate_secret_token --trace
RAILS_ENV=production /var/lib/gems/1.8/bin/rake db:migrate
RAILS_ENV=production /var/lib/gems/1.8/bin/rake redmine:load_default_data
ruby script/rails server webrick -e production

Para que los enlaces de la interfaz se generen con el correspondiente subdirectorio hay que modificar el archivo config/environment.rb cambiando la última línea por lo siguiente:

RedmineApp::Application.routes.default_scope = {:path=>'/redmine', :shallow_path=>'/redmine'}
RedmineApp::Application.initialize!
Redmine::Utils::relative_url_root = '/redmine'

Para que los archivos estáticos se carguen correctamente, es necesario modificar el archivo config/environments/production.rb añadiendo la siguiente línea:

config.action_controller.asset_host = "http://ejemplo.com/estaticos"

Habrá que copiar la carpeta public de Redmine para que sea accesible desde http://ejemplo.com/estaticos/redmine, ya que todas las llamadas se realizarán añadiendo el subdirectorio. Por último, la configuración para que Apache realice las llamadas a webrick sería la siguiente:

<Location /redmine>
	ProxyPass http://localhost:3000/redmine
	ProxyPassReverse http://localhost:3000/redmine
</Location>

Después de realizar todos estos pasos, resulta evidente que un proyecto de la talla de Redmine debería simplificar el proceso para una instalación tan común como esta y tener una documentación más completa al respecto.