-------------------------------------------
| MANUAL DE INSTALACIÓN DE GONG-GOR  v2.x |
-------------------------------------------


################################################################################
 Copyright 2010-2013 Free Software's Seed (Semilla de Software Libre), CENATIC y IEPALA

 Licencia con arreglo a la EUPL, Versión 1.1 o –en cuanto sean aprobadas por la Comisión Europea– 
 versiones posteriores de la EUPL (la «Licencia»);
 Solo podrá usarse esta obra si se respeta la Licencia.
 Puede obtenerse una copia de la Licencia en:

 http://www.osor.eu/eupl/european-union-public-licence-eupl-v.1.1

 Salvo cuando lo exija la legislación aplicable o se acuerde por escrito, 
 el programa distribuido con arreglo a la Licencia se distribuye «TAL CUAL»,
 SIN GARANTÍAS NI CONDICIONES DE NINGÚN TIPO, ni expresas ni implícitas.
 Véase la Licencia en el idioma concreto que rige los permisos y limitaciones que
 establece la Licencia.
################################################################################





La instalación descrita fue efectuada sobre Debian 6.0 (Squeeze) y Ubuntu 11.04 (Natty).
Es posible realizar los mismos pasos en cualquier otro sistema operativo, aunque algunos
detalles es posible que sean distintos.


NOTAS:

- Sobre la versión de GONG-GOR

El presente documento está realizado para la instalación de GONG-GOR en versiones 2.30 en adelante.

Si desea instalar una versión anterior, diríjase al documento de instalación:

https://gong.org.es/svn/gong/tags/gong-gor-2.19/INSTALL

Si desea actualizar GONG-GOR desde una versión < 2.30, póngase en contacto con la comunidad de desarrollo
de GONG en:

gong@gong.org.es


- Sobre el gestor de BBDD

Aunque el proceso es similar utilizando una BBDD sqlite o postgress, este documento se refiere a
la instalación sobre un motor de BBDD MySQL y no incluye los pasos específicos para otros gestores 
de BBDD. Se asume que MySQL está correctamente instalado y configurado, así como el cliente
local de MySQL desde línea de comandos. En la siguiente URL se describe el proceso de instalación:

http://www.debianadmin.com/mysql-database-server-installation-and-configuration-in-debian-2.html


- Sobre el servidor web

Aunque el uso de otro servidor web es posible, en este manual se utiliza Apache2. Se asume que Apache2
está correctamente instalado y configurado. En caso de no ser así, siga la siguiente guía:

https://help.ubuntu.com/12.04/serverguide/httpd.html


Convenciones

  * Una linea que empieza por "$" indica el prompt bash en consola. A no ser que se especifique lo contrario,
    los comandos se ejecutarán como el usuario root.

  * Una linea que empieza por "mysql>" indica el prompt en la consola de mysql.



*********************************************************************************************

Indice
1.- Instalación
  1.1.- Instalación de dependencias
  1.2.- Instalación de GONG-GOR
  1.3.- Instalación del entorno de ejecución
  1.4.- Instalación del generador de PDFs
  1.5.- Instalación de módulos de Apache
2.- Configuración
  2.1.- Configuración de Apache
  2.2.- Creación de la BBDD de GONG-GOR
  2.3.- Configuración de la BBDD en GONG-GOR
  2.4.- Migración inicial
  2.5.- Permisos
  2.6.- Listo para empezar
3.- Multisitio
4.- Problemas conocidos
  4.1.- Passenger y multisitio

*********************************************************************************************

1.- Instalación


1.1.- Instalación de dependencias

Instalaremos las dependencias necesarias:

  $ apt-get install bash curl git build-essential openssl libreadline6 libreadline6-dev \
       curl git-core zlib1g zlib1g-dev libgnutls-dev libyaml-dev libsqlite3-0 libsqlite3-dev \
       sqlite3 libxml2-dev libxslt-dev autoconf libc6-dev ncurses-dev automake libtool \
       libssl-dev bison subversion libmysqlclient-dev subversion imagemagick libmagickwand-dev

y las que necesitaremos para configurar el servidor web:

  $ apt-get install libcurl4-gnutls-dev apache2-prefork-dev libapr1-dev libaprutil1-dev


1.2.- Instalación de GONG-GOR

El directorio de instalación recomendado para GONG-GOR es bajo /usr/share/gong, aunque es posible otro path
de instalación. En primer lugar lo crearemos:

  $ mkdir -p /usr/share/gong
  $ cd /usr/share/gong

y descargaremos la copia del último tag estable (el indicado aquí puede cambiar desde la realización de este
manual, asegúrese de seleccionar la última versión disponible):

  $ svn export https://gong.org.es/svn/gong/tags/gong-gor-2.30

y renombrándolo a:

  $ mv /usr/share/gong/gong-gor-2.30 /usr/share/gong/gor


1.3.- Instalación del entorno de ejecución

La instalación del entorno de ejecución podemos realizarla para que afecte a todo nuestro sistema
en el caso de vayamos a instalar un servidor dedicado a GONG, o unicamente a un usuario particular
en el caso de que no dispongamos de un servidor dedicado para GONG o queramos desarrollar sobre
GONG.

Para la instalación de un servidor dedicado ejecutaremos los siguientes comandos como el usuario root,
y si queremos una instalación personal, como el usuario que elijamos.

En primer lugar instalaremos RVM (Ruby Version Manager) para gestionar las versiones de ruby y rails:
  
  $ gpg --keyserver hkp://keys.gnupg.net --recv-keys D39DC0E3

  $ curl -sSL https://get.rvm.io | bash -s stable --ruby

si la instalación del entorno es para todo el sistema, además ejecutaremos:

  $ source /etc/profile.d/rvm.sh

y si no lo es, incluimos en el entorno del usuario (fichero ~/.bashrc) las siguientes dos líneas:

  # This loads RVM into a shell session.
  [[ -s "$HOME/.rvm/scripts/rvm" ]] && . "$HOME/.rvm/scripts/rvm" 


Ejecutaremos el siguiente comando para probar que la instalación de RVM funciona y revisar las
dependencias que nos indique la salida de pantalla:

  $ rvm notes

Instalar y configurar ruby:

  $ rvm install 1.9.2
  $ rvm --default ruby-1.9.2
  $ rvm gemset create gor
  $ rvm use 1.9.2@gor --default

y desde el directorio donde hayamos descargado GONG (/usr/share/gong/gor) las gemas necesarias para GONG-GOR:

  $ gem install bundle
  $ RAILS_ENV=production bundle install


1.4.- Instalación del generador de PDFs

Para la generación de algunos informes en PDF, es necesario instalar un generador de PDFs.

En primer lugar, instalaremos los paquetes de fuentes:

  $ apt-get install fontconfig

Luego, si nuestro sistema es de 64bits, el proceso sería

  $ wget https://phantomjs.googlecode.com/files/phantomjs-1.9.2-linux-x86_64.tar.bz2
  $ tar xvjf phantomjs-1.9.2-linux-x86_64.tar.bz2
  $ mv phantomjs-1.9.2-linux-x86_64/bin/phantomjs /usr/local/bin

y si es de 32bits, el siguiente:

  $ wget https://phantomjs.googlecode.com/files/phantomjs-1.9.2-linux-i686.tar.bz2
  $ tar xvjf phantomjs-1.9.2-linux-i686.tar.bz2
  $ mv phantomjs-1.9.2-linux-i686/bin/phantomjs /usr/local/bin

Finalmente, comprobamos que la instalación ha sido correcta:

  $ /usr/local/bin/phantomjs --version


1.5.- Instalación del entorno de ejecución para Apache

Si queremos instalar GONG para utilizarlo y no sólo para desarrollar sobre él, instalaremos el módulo de Apache:

  $ gem install passenger -v=3.0.18

lo compilaremos siguiendo las instrucciones del comando:

  $ passenger-install-apache2-module -a

y lo configuraremos en apache, creando como root el fichero /etc/apache2/mods-available/passenger.load con el contenido:

   LoadModule passenger_module /usr/local/rvm/gems/ruby-1.9.2-p320@gor/gems/passenger-3.0.18/ext/apache2/mod_passenger.so
   PassengerRoot /usr/local/rvm/gems/ruby-1.9.2-p320@gor/gems/passenger-3.0.18
   PassengerRuby /usr/local/rvm/wrappers/ruby-1.9.2-p320@gor/ruby

si estábamos instalándolo en todo el sistema, o con el contenido:

   LoadModule passenger_module /home/USUARIO/.rvm/gems/ruby-1.9.2-p320@gor/gems/passenger-3.0.18/ext/apache2/mod_passenger.so
   PassengerRoot /home/USUARIO/.rvm/gems/ruby-1.9.2-p320@gor/gems/passenger-3.0.18
   PassengerRuby /home/USUARIO/.rvm/wrappers/ruby-1.9.2-p320@gor/ruby

si estábamos instalando el entorno de ejecución anterior sólo para el usuario USUARIO (sustituya en las líneas anteriores esa
cadena por el nombre real del usuario).


Por último, como usuario root, active el módulo y reinicie Apache:

  $ a2enmod passenger && /etc/init.d/apache2 restart



2.- Configuración 


2.1.- Configuración de Apache

Generamos un nuevo virtual-host en apache copiando el siguiente contenido en el fichero
/etc/apache2/sites-available/gong-gor :

<VirtualHost *:80>
  ServerName gong.miong.org
  DocumentRoot /usr/share/gong/gor/public
  <Directory /usr/share/gong/gor/public>
    AllowOverride all
    Options -MultiViews
  </Directory>

  PassengerDefaultUser www-data
  RailsEnv production
</VirtualHost>

Y lo activamos:

  $ a2ensite gong-gor

NB: hay que reemplazar el nombre del servidor ("ServerName gong.miong.org") bien por
"ServerName localhost" si se trata de una instalación para testear (entonces la
aplicación será visible en "http://localhost") o bien por un nombre internet válido
y entonces la aplicación será visible en "http://gong.miong.org" por ejemplo.


2.2.- Creación de la BBDD de GONG-GOR.

Crearemos la BBDD 'gong_gor' y el usuario 'gong_gor_user' con password 'gong_gor_user_pass' (todos estos valores
se pueden cambiar por los que elijamos para nuestra instalación):

    mysql> create DATABASE gong_gor DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
    mysql> grant ALL ON gong_gor.* TO gong_gor_user@'localhost' IDENTIFIED BY 'gong_gor_user_pass';
    mysql> grant CREATE VIEW ON gong_gor.* to gong_gor_user@'localhost';


2.3.- Configuración de la BBDD en GONG-GOR

Copiamos el fichero de ejemplo de definición de conexiones a BBDD:

  $ cp /usr/share/gong/gor/config/database.yml.example /usr/share/gong/gor/config/database.yml

Editaremos en el fichero recién copiado (/usr/share/gong/gor/config/database.yml) los parámetros
correctos de BBDD para el entorno de producción (production) según los definidos en el punto anterior
anterior de forma que quede algo similar a:

production:
  adapter: mysql2
  socket: /var/run/mysqld/mysqld.sock
  database: gong_gor
  username: gong_gor_user 
  password: gong_gor_user_pass
  encoding: utf8


2.4.- Migración de Datos inicial

Hacemos la carga inicial de la BBDD ejecutando:

  $ LANG=es_ES RAILS_ENV=production rake db:migrate

cargamos los datos preeliminares de BBDD:

  $ LANG=es_ES RAILS_ENV=production rake db:seed

Cambiando el idioma definido en LANG los datos iniciales cargados en BBDD estarán en el idioma elegido.
Actualmente, sólo están disponibles español (es) y portugués (pt).


2.5.- Permisos

Cambiamos el propietario de los directorios escribibles por el navegador web según el indicado en el punto 2.1 :

  $ chown -R www-data.www-data /usr/share/gong/gor/files
  $ chown -R www-data.www-data /usr/share/gong/gor/logs
  $ chown -R www-data.www-data /usr/share/gong/gor/tmp


2.6.- Listo para comenzar

Rearrancamos apache:

  $ /etc/init.d/apache2 restart

y probamos la instalación accediendo con el usuario "admin" y la password "admin".



3.- Multisitio

GONG-GOR permite la ejecución multisitio (varias instancias corriendo en la misma máquina) de dos formas:

A.- Instalando GONG-GOR en distintos paths como si fueran aplicaciones distintas y configurándolos
adecuadamente en los hosts virtuales de apache

B.- Configurando la variable de entorno GOR_SITEID

Para la segunda posibilidad y suponiendo que queramos instalar las instancias ONG1 y ONG2:

Seguir el paso 1 del manual integramente.

Crear para cada instancia a instalar una BBDD (con nombre de usuario y password distinta para cada BBDD)
tal y como se indica en el punto 2.2.

Crear los directorios de logs y configuración:

  $ mkdir -p /etc/gong
  $ mkdir -p /var/log/gong

Crear el directorio de cache y asignar permisos:

  $ mkdir -p /var/cache/gong/ong1 && chown www-data.www-data /var/cache/gong/ong1
  $ mkdir -p /var/cache/gong/ong2 && chown www-data.www-data /var/cache/gong/ong2

Crear los directorios de datos y asignar permisos:

  $ mkdir -p /var/lib/gong/ong1 && chown www-data.www-data /var/lib/gong/ong1
  $ mkdir -p /var/lib/gong/ong2 && chown www-data.www-data /var/lib/gong/ong1
  
y hacer enlaces simbólicos del código compartido en ellos (ver punto 4.1):

  $ ln -s /usr/share/gong/gor /var/lib/gong/ong1/passenger
  $ ln -s /usr/share/gong/gor /var/lib/gong/ong2/passenger

Configurar en apache cada host virtual. En /etc/apache2/sites-available/ong1.miong.org :

<VirtualHost *:80>
  ServerName ong1.miong.org 
  DocumentRoot /usr/share/gong/gor/public
  <Directory /usr/share/gong/gor/public>
    AllowOverride all
    Options -MultiViews
  </Directory>

  SetEnv GOR_SITEID "ong1"
  PassengerAppRoot /var/lib/gong/ong2/passenger
  PassengerDefaultUser www-data
  RailsEnv production
</VirtualHost>

y en /etc/apache2/sites-available/ong2.miong.org :

<VirtualHost *:80>
  ServerName ong1.miong.org
  DocumentRoot /usr/share/gong/gor/public
  <Directory /usr/share/gong/gor/public>
    AllowOverride all
    Options -MultiViews
  </Directory>

  SetEnv GOR_SITEID "ong2"
  PassengerAppRoot /var/lib/gong/ong2/passenger
  PassengerDefaultUser www-data
  RailsEnv production
</VirtualHost>

Creamos los ficheros de configuración de BBDD tal y como se describe en el punto 2.3
pero cambiando sus ubicaciones por /etc/gong/ong1.database.yml y /etc/gong/ong2.database.yml

Hacemos la carga inicial de cada BBDD ejecutando:

  $ cd /usr/share/gong/gor
  $ LANG=es_ES RAILS_ENV=production GOR_SITEID=ong1 rake db:migrate
  $ LANG=es_ES RAILS_ENV=production GOR_SITEID=ong2 rake db:migrate

cargamos los datos preeliminares de BBDD:

  $ LANG=es_ES RAILS_ENV=production GOR_SITEID=ong1 rake db:seed
  $ LANG=es_ES RAILS_ENV=production GOR_SITEID=ong2 rake db:seed

activamos las instancias de apache y rearrancamos:

  $ a2ensite ong1.miong.org
  $ a2ensite ong2.miong.org
  $ /etc/init.d/apache2 restart



4.- Problemas conocidos:


4.1 Passenger y multisitio

Passenger interpreta una instancia de aplicación según el AppRoot de esta:
  http://www.redmine.org/boards/1/topics/16647

por lo tanto y de momento es necesario hacer enlaces simbólicos del código
para cada instancia a ejecutar y referirlos como PassengerAppRoot en cada
instancia virtual de apache.

