Consideraciones sobre este manual de instalación

  1. La instalación se realizará sobre el sistema operativo Linux en su distribución Debian 9.5 (Stretch). En caso de ejecutar la instalación en otra distribución de Linux verifique o cambie los comandos y paquetes de instalación según sea necesario.
  2. Debido a que Debian 9.5 (Stretch) trae por defecto en sus repositorios PHP 7.1 y PostgreSQL 9.6, se realizaran ajustes a los repositorios para instalar PHP 7.2 y PostgreSQL 11
  3. PHP 7.2 y PostgreSQL 11 para la fecha de publicacion de este manual, son versiones estables disponible directamente desde los repositorios oficiales del los mismos.
  4. Los procesos de ejecutan en el terminal o consola.
  5. Se utilizará el editor vim, pudiendo usted utilizar el de su preferencia.
  6. Aunque el sistema se puede instalar en único servidor que aloje el código y la base de datos, en este manual se utilizan dos servidores para procesos de tuneo de Apache2 y PostgreSql, el tuneo que aquí se muestra no es posible aplicar si se tiene un solo servidor.
  7. Las IP, usuarios, claves de acceso, tokens y certificados usados en los servidores de instalación son ejemplos de referencia que usted deberá cambiar al momento de instalar.
  8. Este manual de instalación se ejecuta mediante la descarga del sistema mediante el control de versiones Subversion (SVN).
  9. Aunque el sistema se puede instalar copiando el código fuente (SandBox) se recomienda usar svn para poder descargar las actualizaciones constantes.
  10. La instalación del sistema operativo base no se toma en cuenta. Pero se recomienda firmemente instalarlo sin entorno gráfico para los sistemas de producción.
  11. Todos los comandos del bash se realizarán con el usuario root.
  12. Tenga en cuenta que si esta instalando un servidor de producción, no debería tener varias versiones de las librerías y/o paquetes instalados.
  13. Si es un servidor de producción, instale el SIGLAS en un Debian 9 completamente limpio o recién instalado, no instale entornos gráficos ni paquetes o servicios que no se detallan en este manual.
  14. El código fuente oficial se encuentra en la URL http://svn.siglas.org pudiendo accederlo vía browser para verificar gráficamente los cambios de versión.
  15. Este manual podrá ser modificado según cambie la tecnología.



 


Índice de instalación

  1. Requerimientos
  2. Instalación Servidor de aplicaciones
    • Instalación de paquetes
    • Configuración básica
    • Creación del Virtual Host del SIGLAS
  3. Instalación Servidor de base de datos
    • Instalación de paquetes
    • Crea una base de datos y usuario para la conexión
    • Permitir la conexión remota
  4. Instalación del SIGLAS
    • Instalación del paquete vía Subversion
    • Configuración de conexión
    • Restauración de la base de datos inicial del SIGLAS
 
Requerimientos de servidores (Hardware y Sistema Operativo)
Los requerimientos a continuación son las características mínimas de hardware, pudiendo incrementarlas según su disponibilidad.
Estos requerimientos fueron testeados con 62.000 correspondencias y 60 usuarios conectados simultáneamente
  1. Servidor de Aplicación:
    • Procesador Core 2 Duo 2,8Ghz o superior
    • Memoria RAM 8GB
    • Almacenamiento 100GB
    • Sistema Operativo Debian 9.5 (Stretch) 64bit.
  2. Servidor de Base de Datos:
    • Procesador Core 2 Duo 2,8Ghz o superior
    • Memoria RAM 16GB
    • Almacenamiento 80GB
    • Sistema Operativo Debian 9.5 (Stretch) 64bit.
.- Es importante resaltar que la versión de Debian debe ser 64bit para poder asignar más de 4GB de memoria dedicada a los procesos de postgreSql y Apache.
.- El particionamiento del sistema de archivo, de existir deberá asignar más de 30GB al directorio /var
.- Es obligatorio el uso de la última versión de Debian disponible, por favor descargue una imagen de instalación del día.


Requerimientos de Servicios e Infraestructura
  • El servidor de Aplicaciones debe estar situado en la DMZ con una IP pública o nateado por puerto 80 y 443.
  • Correo electrónico siglas@tudominio.com para el uso del automático y desasistido del SIGLAS.
  • Subdominio público siglas.tudominio.com para poder interoperar con los dispositivos móviles que se conecten a tu servidor.
  • El servidor de Aplicaciones debe poder ingresar a la URL http://svn.siglas.org por puertos 80 y 443 para descargar el SIGLAS
  • Si se tiene un proxy en la LAN, liberar globalmente el acceso hacia los puertos puertos 80 y 443 de la URL http://io.sigl.as y la IP 149.56.13.90, esto con el objetivo del buen funcionamiento de los procesos de firma electrónica desde los emuladores o celulares conectados a Wifi interna.


Requerimientos de usuarios
  • Navegadores recomendados Firefox 60 o superior, Google Chrome 67 o superior
  • Correo electrónico institucional o personal para recibir las notificaciones o recuperar contraseñas.
  • Dispositivo móvil Android con versión 4.4 (KitKat) o superior. (opcional. solo en caso de usar la versión móvil)
  • Si los usuarios que firmar electrónicamente, no tienen un dispositivo móvil con Android 4.4 o superior, pueden hacer uso del emulador de Android que se descargar directamente desde el SIGLAS. El emulador se instala unicamente en Google Chrome 64bit por lo tanto el PC de los usuarios que firman electrónicamente con el emulador deben tener el sistema operativo en 64bit.
Notas:
La versión de SIGLAS móvil, está disponible para descarga en dispositivo Android directamente desde el Play Store.
Instalación
Las versiones por defecto de PHP y PostgreSQL que vienen en Debian 9.5 seran reemplazadas por las versiones más modernas. Es completamente obligatorio el uso de PHP 7.2 (las versiones 7.0 y 7.1 tienen diferencias de procesos)

Agregar los repositorios de PHP 7.2, postgresql-client 11, Java; Con el usuario root edita el source.list:
vim /etc/apt/sources.list

Agregar al final los repositorios
#Repositorios de Oracle para Java
deb http://ppa.launchpad.net/webupd8team/java/ubuntu precise main
deb-src http://ppa.launchpad.net/webupd8team/java/ubuntu precise main

#Repositorio backports para Debian 9
deb http://ftp.debian.org/debian stretch-backports main

#Repositorio PostgreSql Client 11
deb http://apt.postgresql.org/pub/repos/apt/ stretch-pgdg main

#Repositorio PHP7.2
deb https://packages.sury.org/php/ stretch main
La instalación de Java es requerida para procesos de firma electrónica.

Instalar los paquetes por necesarios para agregar de llaves públicas de los repositorios
apt-get install dirmngr ca-certificates apt-transport-https

Agregar con los siguientes comando las llaves públicas para la instalación del repositorio Oracle, PHP y PostgreSQL Client
wget -q https://packages.sury.org/php/apt.gpg -O- | apt-key add -
wget -q https://www.postgresql.org/media/keys/ACCC4CF8.asc -O- | apt-key add -
gpg --keyserver keyserver.ubuntu.com --recv-keys EEA14886
gpg --export --armor EEA14886 | apt-key add -

Actualizar la lista de paquetes disponibles
apt-get update

Actualizar los paquetes por defecto a las últimas versiones
apt-get upgrade

En el servidor de aplicaciones descargar e instalar los paquetes y librerías de apache2, php7.2, subversión, postgresql-client 10, openssl, java y certbot.

Como usuario root ejecuta el siguiente comando:
apt-get install subversion apache2 memcached php php-cgi php-common php-curl php-gd php-ldap php-pgsql php-xmlrpc php-bz2 php-zip php-apcu php-apcu-bc php-json php-pear php-memcache php-memcached libapache2-mod-php poppler-utils openssl xz-utils python-certbot-apache -t stretch-backports postgresql-client oracle-java8-installer

Configuración básica
Configuración de Apache para ocultar información del servidor

Como usuario root modificar apache2.conf
vim /etc/apache2/apache2.conf

Al final del archivo agregar las siguientes lineas
# Ocultar información del servidor
ServerSignature Off
ServerTokens Prod

Configuración de PHP para aumentar los recursos asignados por defecto

Como usuario root modificar php.ini
vim /etc/php/7.2/apache2/php.ini

Buscar y modificar las variables con los siguientes valores
serialize_precision = -1
max_execution_time = 120
max_input_time = 240
memory_limit = 3072M
display_errors = On # mostrar los errores (“On”) para entornos de desarrollo
post_max_size = 50M # limita los megas de uploads según tus políticas de aplicaciones y espacio disponible
upload_max_filesize = 50M
max_file_uploads = 20
expose_php = Off # Oculta información de tu PHP
session.gc_maxlifetime = 1800

Creación del Virtual Host del SIGLAS
Por medidas de seguridad y protección de rutas en Symfony es necesario crear una ruta virtual para acceder al sistema cuando los usuarios ingresen en subdominio del SIGLAS

Notas:
En caso de tener un ambiente de desarrollo no es necesario crear un subdominio pero debemos simularlo, basta modificar el archivo de host con el usuario root
vim /etc/hosts
Agregar al final
127.0.0.1 siglas.local # cambia este nombre según tus preferencias

Ingresar en el directorio de sitios disponibles de apache
cd /etc/apache2/sites-available/

Crear el archivo de host virtual con nombre sin espacios en blanco siendo recomendable llamarlo con el nombre de la carpeta del proyecto y con extensión .conf
vim /etc/apache2/sites-available/siglas.conf

Agregar configuración básica del virtualhost y guardar
<VirtualHost *:80>
        ServerName siglas.tu_dominio.com
        ServerAlias 1.1.1.1
        DocumentRoot "/var/www/siglas/web"
        DirectoryIndex index.php

        <Directory "/var/www/siglas/web">
                AllowOverride All
                Allow from All
        </Directory>

        ErrorLog /var/log/apache2/error_siglas.www.log
        LogLevel warn
        CustomLog /var/log/apache2/access_siglas.www.log combined
</VirtualHost>
La variable ServerAlias modifica el 1.1.1.1 coloca la IP del servidor web para así garantizar que los usuarios que intenten ingresar mediante IP en el browser, igualmente se re-direccionen al directorio del proyecto /var/www/siglas/web

Active el VirtualHost creado desde el directorio de sitios disponibles
cd /etc/apache2/sites-available/
a2ensite siglas.conf

Para desactivar ejecutar
a2dissite siglas.conf

Reinicia el servicio de Apache
/etc/init.d/apache2 restart
Instalación
En el servidor de base de datos descargar e instalar los paquetes y librerías de PostgreSql 11.

Agregar los repositorios de PostgreSQL 11; Con el usuario root edita el source.list:
vim /etc/apt/sources.list

Agregar al final los repositorios
#Repositorio PostgreSql Server 11
deb http://apt.postgresql.org/pub/repos/apt/ stretch-pgdg main

Instalar los paquetes por necesarios para agregar de llaves públicas de los repositorios
apt-get install dirmngr ca-certificates apt-transport-https

Agregar con el siguiente comando la llave pública para la instalación del repositorio PostgreSQL
wget -q https://www.postgresql.org/media/keys/ACCC4CF8.asc -O- | apt-key add -

Actualizar la lista de paquetes disponibles
apt-get update

Actualizar los paquetes por defecto a las últimas versiones
apt-get upgrade

Como usuario root ejecuta el siguiente comando:
apt-get install postgresql postgresql-contrib
La versión mínima requerida de PostgreSQL es 11

Crea una base de datos y usuario para la conexión
Desde el terminal con el usuario root del sistema operativo cámbiate al usuario postgres
su postgres

Ingresar a la consola de PostgreSql (PSQL)
psql

Crea la base de datos vacia que se usara para el SIGLAS
create database siglas;

Crea el usuario, asígnale una clave de ingreso segura
create user siglas;
alter user siglas with password '123456';

Cambia el propietario de la base de datos siglas del usuario postgres al usuario siglas
alter database siglas owner to siglas;

Cierra la consola PSQL
\q

Permitir la conexión desde el servidor de aplicaciones mediante las listas de acceso de PostgreSql
Cambiate al usuario root para usar los permisos de superusuario
exit

Con el usuario root edita el archivo pg_hba.conf
vim /etc/postgresql/11/main/pg_hba.conf

Buscar la secion del archivo referente a conexiones IPv4 o IPv6 según sea el caso
# IPv4 local connections: host all all 127.0.0.1/32 md5

Agregar la linea siguiente con la IP del servidor de aplicaciones
host siglas siglas 1.1.1.1/32 trust
Donde el primer “siglas” se refiere al nombre de la base de datos, el segundo “siglas” el nombre del usuario y 1.1.1.1 es la IP de tu servidor de aplicaciones y trust que es una conexión de confianza.

Guardar y cierra el archivo pg_hba.conf

Por medidas de seguridad postgresql no acepta por defecto conexiones remotas; Si tenemos el servidor de bases de datos aparte del servidor web, debemos permitir las conexiones remotas de la siguiente manera:
Editar archivo postgresql.conf
vim /etc/postgresql/11/main/postgresql.conf

Buscar la linea
#listen_addresses = 'localhost'
Descomentar (elimina el # al principio de la linea) y modificar 'localhost' por '*'
listen_addresses = '*'

Buscar la linea
#password_encryption = md5
Descomentar
password_encryption = md5

Guarda los cambios de postgresql.conf y reiniciar el servicio de PostgreSql
/etc/init.d/postgresql restart
Instalación del paquete vía Subversion
Para instalar el SIGLAS solo necesita descargar el código del repositorio oficial y configurar algunos parámetros.

Antes de:
Para la instalación mediante Subversion tenga en cuenta si servidor se encuentra protegido mediante un proxy, de ser así configure el subversion con las siguientes instrucciones.

Editar archivo servers
vim /etc/subversion/servers

Buscar la sección [global] y dentro buscar la linea
# http-proxy-host=proxyhost
descomentar y modificar por
http-proxy-host=1.0.0.1
donde: 1.0.0.1 es la IP del servidor proxy.

Buscar la línea
# http-proxy-port=3128
descomentar
http-proxy-host=3128
donde: 3128 es el puerto del servidor proxy.

Guardar y salir.

Para instalar el SIGLAS, ingrese al directorio www de apache2
cd /var/www

Descargue el proyecto desde el repositorio oficial con el siguiente comando (La clave del repositorio es “siglas”)
svn co --username siglas --password siglas http://svn.siglas.org/PSISiglas/siglas

Al finalizar la descarga del código, cree los directorios de cache y log del sistema
mkdir /var/www/siglas/cache
mkdir /var/www/siglas/log

Configure la conexión a Base de datos ingresando mediante consola al archivo databases.yml
vim /var/www/siglas/config/databases.yml

Modificamos las variables siguientes
host: IP del servidor de base de datos (1.1.1.2)
dbname: nombre de la base de datos (siglas)
username: usuario de base de datos (siglas)
password: clave de usuario de base de datos (123456)

Cambia el propietario del directorio del SIGLAS de root para el usuario de apache www-data
chown -R www-data:www-data /var/www/siglas

Ingresa al directorio raiz del SIGLAS
cd /var/www/siglas

Da los permisos necesarios para que el usuario www-data ejecute el código del sistema
Dentro del directorio del SIGLAS ejecuta
php symfony project:permissions

Activa los plugins de symfony
Dentro del directorio del SIGLAS ejecuta
php symfony plugin:publish-assets

Genera cache inicial del sistema
Dentro del directorio del SIGLAS ejecuta
php symfony cc

Restauración de la base de datos inicial del SIGLAS
En el código fuente del sistema descargado por subversion, se encuentra el respaldo de la base de datos el cual debemos enviar al servidor de base de datos. Este respaldo se encuentra en formato .sql y .backup según tus necesidades y será nombrado siglas_YYYY_MM_DD lo cual denota la fecha el cual se creó.

Ingresa en el directorio que contiene el respaldo
cd /var/www/siglas/data/

Envía el respaldo al servidor de base de datos
scp siglas_YYYY_MM_DD.sql root@IP_SERVIDOR_BD:/ruta

Ingresa como root> a la consola del servidor de base de datos y conéctate a la consola PSQL con el usuario de base de datos anteriormente creado
psql -h localhost -d siglas -U siglas -W
Donde –d siglas es la base del sistema y –U siglas es el usuario

Para restaurar la base de datos ejecuta el comando con la ruta y nombre correcto del archivo de respaldo .sql
\i /ruta/siglas_YYYY_MM_DD.sql

Ya con esto tienes tu sistema en modo PRUEBAS, pero para finalizar debes obligatoriamente activar Hyper Text Transfer Protocol Secure (HTTPS) en el SIGLAS con el siguiente paso y de esta manera poder activar el modo PRODUCCIÓN del sistema.
Puesta en PRODUCCIÓN del SIGLAS bajo HTTPS
Para la versión SIGLAS 2018, es necesario utilizar https para poder hacer uso de la Interoperabilidad con otros SIGLAS, asi como tambien poder firmar electronicamente.

Los certificados SSL/TLS implementados en este tutorial para el servidor web donde aloja la copia de su SIGLAS, son generados por el servicio Certbot el cual fue desarrollado y es mantenido por la Electronic Frontier Foundation (EFF). Puedes leer mas acerca del proyecto en https://certbot.eff.org

Para implementar en Apache certificados SSL/TLS, ingrese como root al Servidor de Aplicaciones y ejecute el siguiente comando
certbot --authenticator webroot --installer apache
Este comando obtendrá un certificado válido para su servidor y le pedirá a Certbot que edite la configuración de Apache de forma automatica.

A continuación se muestran los pasos a seguir para que Certbot procese y configure su certificado.

1.- En este primer mensaje, se listan todos los dominios y subdominios configurados en el servidor. Si siguió el tutorial correctamente, solo aparecerá el subdominio asignado al SIGLAS
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator webroot, Installer apache

Which names would you like to activate HTTPS for?
-------------------------------------------------------------------------------
1: www.siglas-project.com
-------------------------------------------------------------------------------
Select the appropriate numbers separated by commas and/or spaces, or leave input
blank to select all options shown (Enter 'c' to cancel):
Selecciona/Escribe el número 1 el cual identifica el subdominio del SIGLAS, para este ejemplo www.siglas-project.com

2.- El mensaje a continuación solicita que escribas la ruta adsoluta del directorio raiz del SIGLAS.
Obtaining a new certificate
Performing the following challenges:
http-01 challenge for www.siglas-project.com
Input the webroot for www.siglas-project.com: (Enter 'c' to cancel):
Escribe /var/www/siglas/web/


3.- El tercer mensaje muestra que se ha creado e implementado el VirtualHost del SIGLAS para SSL.
Asi mismo pregunta si desea redireccionar todo el trafico HTTP a HTTPS, donde la opción 1 es NO Redireccionar y la opción 2 es SI Redireccionar
Waiting for verification...
Cleaning up challenges
Created an SSL vhost at /etc/apache2/sites-available/siglas-le-ssl.conf
Deploying Certificate to VirtualHost /etc/apache2/sites-available/siglas-le-ssl.conf
Enabling available site: /etc/apache2/sites-available/siglas-le-ssl.conf

Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
-------------------------------------------------------------------------------
1: No redirect - Make no further changes to the webserver configuration.
2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for
new sites, or if you're confident your site works on HTTPS. You can undo this
change by editing your web server's configuration.
-------------------------------------------------------------------------------
Select the appropriate number [1-2] then [enter] (press 'c' to cancel):
Selecciona NO Redireccionar escribiendo el número 1, ya que el SIGLAS se encargará de este redireccionamiento del trafico HTTP o HTTPS según estatus del sistema.

4.- Este último mensaje muestra que se ha activado correctamente HTTPS para acceder al SIGLAS. Para este ejemplo https://www.siglas-project.com.
-------------------------------------------------------------------------------
Congratulations! You have successfully enabled https://www.siglas-project.com

You should test your configuration at:
https://www.ssllabs.com/ssltest/analyze.html?d=www.siglas-project.com
-------------------------------------------------------------------------------

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/www.siglas-project.com/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/www.siglas-project.com/privkey.pem
   Your cert will expire on 2018-11-20. To obtain a new or tweaked
   version of this certificate in the future, simply run certbot again
   with the "certonly" option. To non-interactively renew *all* of
   your certificates, run "certbot renew"
 - If you like Certbot, please consider supporting our work by:

   Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
   Donating to EFF: https://eff.org/donate-le

Ahora bien, para finalizar ejecutamos con el usuario root el siguiente comando, el cual se encargará de renovar constantemente el certificado TSL/SSL de nuestro servidor
certbot renew --dry-run

El resultado de esta solicitud de renovación automatica es el siguiente mensaje:
Saving debug log to /var/log/letsencrypt/letsencrypt.log

-------------------------------------------------------------------------------
Processing /etc/letsencrypt/renewal/www.siglas-project.com.conf
-------------------------------------------------------------------------------
Cert not due for renewal, but simulating renewal for dry run
Plugins selected: Authenticator webroot, Installer apache
Renewing an existing certificate
Performing the following challenges:
http-01 challenge for www.siglas-project.com
Waiting for verification...
Cleaning up challenges

-------------------------------------------------------------------------------
new certificate deployed with reload of apache server; fullchain is
/etc/letsencrypt/live/www.siglas-project.com/fullchain.pem
-------------------------------------------------------------------------------

Ya con esto tienes tu sistema web funcional y podrás ingresar mediante el subdominio configurado tanto por HTTP como por HTTPS según el estatus configurado en el SIGLAS.
La base de datos tiene un usuario inicial de nombre root y clave root.