En esta sección se detallan los pasos para la instalación manual del sistema de elecciones. Se detallan instrucciones para los sistemas operativos Ubuntu Server 18, Debian 10 y CentOS/RedHat 7. En los tres casos se asume que partimos de una instalación limpia del sistema operativo. Para ejecutar los pasos se necesario un usuario del sistema con permiso sudo.
Los pasos a ejecutar son los siguientes:
Antes de comenzar, si ya no lo hizo, clone el repositorio git del Sistema de Elecciones:
sudo apt-get install gitsudo yum install gitLuego cree un directorio y desde ahí clone el repositorio:
git clone https://github.com/LACNIC/elections-open-sourceA lo largo de esta guía se hará referencia a muchos recursos (librerías, archivos de configuración, etc) disponibles en el repositorio.
Para el empaquetado y ejecución del sistema es necesario instalar algunos paquetes de software requeridos.
sudo apt-get update && sudo apt-get upgradesudo apt-get install unzip maven curlsudo yum updatesudo yum install unzip curl wget nanoyum instala la versión 3.0 y no es posible compilar el proyecto.
                        sudo wget https://downloads.apache.org/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz -P /tmpsudo tar xf /tmp/apache-maven-3.6.3-bin.tar.gz -C /opt/opt/maven: sudo ln -s /opt/apache-maven-3.6.3 /opt/mavenmaven.sh (sudo nano /etc/profile.d/maven.sh) y agregar las líneas:export JAVA_HOME=/usr/lib/jvm/jre-openjdkexport M2_HOME=/opt/mavenexport MAVEN_HOME=/opt/mavenexport PATH=${M2_HOME}/bin:${PATH}
                            sudo chmod +x /etc/profile.d/maven.shsource /etc/profile.d/maven.shEs importante recalcar que la versión de Java debe ser 8, en versiones posteriores se requiere revisar las dependencias y versiones del compilador de Maven.
sudo apt-get install openjdk-8-jdksudo apt-get install gnupg software-properties-commonwget -qO - https://adoptopenjdk.jfrog.io/adoptopenjdk/api/gpg/key/public | sudo apt-key add -sudo add-apt-repository "deb https://adoptopenjdk.jfrog.io/adoptopenjdk/deb buster main"sudo apt-get updatesudo apt-get install adoptopenjdk-8-hotspotsudo yum install openjdk-8-jdkComo servidor de aplicación se utilizará WildFly 20.0.1. El proceso de instalación es el mismo en todos los casos:
sudo groupadd jbosssudo useradd -g jboss jbosswget https://download.jboss.org/wildfly/20.0.1.Final/wildfly-20.0.1.Final.zip -P /tmp/opt: sudo unzip  /tmp/wildfly-20.0.1.Final.zip -d /opt//opt/wildfly: sudo ln -s /opt/wildfly-20.0.1.Final /opt/wildflyjboss dueño de la instalación de WildFly: sudo chown -R jboss:jboss /opt/wildflysudo cp /opt/wildfly/standalone/configuration/standalone.xml /opt/wildfly/standalone/configuration/standalone.xml.originalsudo nano /etc/systemd/system/jboss.serviceansible/roles/elections/templates del repositorio se encuentran los templates systemd_jboss_debian.j2, systemd_jboss_ubuntu.j2 y systemd_jboss_rh-centos.j2, a los que sólo hay que modificar los valores de mínimo y máximo para el tamaño del heap. Use el que corresponda según su sistema operativo.
                            sudo systemctl start jbosssudo systemctl enable jbosssudo /opt/wildfly/bin/add-user.sh
                    Como servidor de base de datos utilizaremos PostgreSQL 12. A continuación se detallan las actividades para la instalación y configuración.
sudo groupadd postgressudo useradd -g postgres postgreswget -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -sudo add-apt-repository "deb http://apt.postgresql.org/pub/repos/apt bionic-pgdg main"sudo apt-get updatesudo apt-get install postgresql-12 postgresql-client-12 libpq-dev python-psycopg2sudo su - postgrescreateuser <usuario> --passwordpsql -c "alter user <usuario> with password '<contraseña>'"sudo groupadd postgressudo useradd -g postgres postgreswget -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -sudo add-apt-repository "deb http://apt.postgresql.org/pub/repos/apt buster-pgdg main"sudo apt-get updatesudo apt-get install postgresql-12 postgresql-client-12 libpq-dev python-psycopg2sudo su - postgrescreateuser <usuario> --passwordpsql -c "alter user <usuario> with password '<contraseña>'"sudo groupadd postgressudo useradd -g postgres postgressudo yum -y install https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpmsudo yum install postgresql-12 postgresql12-server postgresql12-libs python-psycopg2sudo /usr/pgsql-12/bin/postgresql-12-setup initdbsudo cp /var/lib/pgsql/12/data/pg_hba.conf /var/lib/pgsql/12/data/pg_hba.conf.originalansible/roles/elections/files/db/pg_hba.conf del repositorio y copiarlo en /var/lib/pgsql/12/data/pg_hba.confsudo systemctl start postgresql-12sudo systemctl enable postgresql-12sudo su - postgrescreateuser <usuario> --passwordpsql -c "alter user <usuario> with password '<contraseña>'"A continuación se detallan las tareas para levantar un dump inicial de la base de datos del sistema. El proceso es el mismo en todos los casos:
ansible/roles/elections/files/db/elections.zip) a /opt/dumps/sudo unzip elections.zipsudo su - postgreselections con el usuario <usuario> como dueño: createdb elections -O <usuario>psql -U postgres -d elections /opt/dumps/elections.sqlpostgres: psql -d elections. Ejecutar las siguientes sentencias:GRANT USAGE ON SCHEMA public TO <usuario>;GRANT ALL PRIVILEGES ON DATABASE elections TO <usuario>;GRANT SELECT, USAGE ON ALL SEQUENCES IN SCHEMA public TO <usuario>;GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO <usuario>;Para que la aplicación se pueda conectar a la base de datos, es necesario instalar el driver de PostgreSQL y crear el datasource en WildFly. El procedimiento es el mismo en todos los casos:
sudo service jboss stop.ansible/roles/elections/files/postgresql-42.2.16.jar) a /opt/wildfly/standalone/deployments/.jxl, ipresource y commons-validator del repositorio (ansible/roles/elections/files/modules/) a /opt/wildfly/modules/system/layers/base/ (copiar la estructura de directorios tal cual está en el repositorio)./opt/wildfly/standalone/configuration/standalone.xml, puede basarse en el archivo ansible/roles/elections/templates/standalone.xml.j2 del repositorio.sudo service jboss startEl Sistema de Elecciones consiste de 3 artefactos a publicar en el servidor WildFly:
elections-ejb.jarelections-ws.warelections.warLos procedimientos para empaquetado y publicación son los mismos en todos los casos.
En el directorio ansible/roles/elections/files/deployments del repositorio se encuentran los artefactos ya generados.
También puede generarlos a partir del código fuente. Para esto, desde el directorio raíz del repositorio ejecute el siguiente comando Maven: sudo mvn clean package
Esto generará los 3 artefactos en los directorios <artefacto>/target.
Para publicarlos, alcanza con copiarlos al directorio /opt/wildfly/standalone/deployments/ y WildFly hace el despliegue automáticamente.
También puede usar Maven para la publicación. Para eso el procedimiento es el siguiente:
sudo nano /etc/maven/settings.xml y agregar el servidor WildFly. Para esto, dentro del tag <servers> agregar:
                        <server>
                          <id>wildfly-elections</id>
                          <username>usuario</username>
                          <password>contraseña</password>
                        </server>
                        
                        sudo mvn wildfly:deploy-only -Dwildfly.id=wildfly-elections -Dwildfly.hostname=localhost -Dwildfly.port=9990wildfly.id se corresponde con el <id> del paso anterior.
                    Luego de publicados los artefactos, el sistema ya está operativo y accesible en http://<ip-servidor>:8080/elections.
Antes de comenzar a usar el sistema, son necesarias algunas tareas iniciales de configuación.
Estas tareas se detallan en el siguiente documento.
Luego de completar la instalación, el sistema es accesible directamente contra el servidor de aplicaciones. Para un ambiente de desarrollo o testeo esto no es un problema, pero para ambientes de producción se recomienda la instalación y configuración de un servidor web (por ej. Apache o Nginx) que actúe como reverse proxy.
Las ventajas de usar reverse proxy son, entre otras, evitar el acceso directo contra el sevidor de backend, cacheo y compresión de contenidos y logging HTTP.