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 git
sudo yum install git
Luego cree un directorio y desde ahí clone el repositorio:
git clone https://github.com/LACNIC/elections-open-source
A 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 upgrade
sudo apt-get install unzip maven curl
sudo yum update
sudo yum install unzip curl wget nano
yum
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 /tmp
sudo 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/maven
maven.sh
(sudo nano /etc/profile.d/maven.sh
) y agregar las líneas:export JAVA_HOME=/usr/lib/jvm/jre-openjdk
export M2_HOME=/opt/maven
export MAVEN_HOME=/opt/maven
export PATH=${M2_HOME}/bin:${PATH}
sudo chmod +x /etc/profile.d/maven.sh
source /etc/profile.d/maven.sh
Es 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-jdk
sudo apt-get install gnupg software-properties-common
wget -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 update
sudo apt-get install adoptopenjdk-8-hotspot
sudo yum install openjdk-8-jdk
Como servidor de aplicación se utilizará WildFly 20.0.1. El proceso de instalación es el mismo en todos los casos:
sudo groupadd jboss
sudo useradd -g jboss jboss
wget 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/wildfly
jboss
dueño de la instalación de WildFly: sudo chown -R jboss:jboss /opt/wildfly
sudo cp /opt/wildfly/standalone/configuration/standalone.xml /opt/wildfly/standalone/configuration/standalone.xml.original
sudo nano /etc/systemd/system/jboss.service
ansible/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 jboss
sudo systemctl enable jboss
sudo /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 postgres
sudo useradd -g postgres postgres
wget -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 update
sudo apt-get install postgresql-12 postgresql-client-12 libpq-dev python-psycopg2
sudo su - postgres
createuser <usuario> --password
psql -c "alter user <usuario> with password '<contraseña>'"
sudo groupadd postgres
sudo useradd -g postgres postgres
wget -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 update
sudo apt-get install postgresql-12 postgresql-client-12 libpq-dev python-psycopg2
sudo su - postgres
createuser <usuario> --password
psql -c "alter user <usuario> with password '<contraseña>'"
sudo groupadd postgres
sudo useradd -g postgres postgres
sudo yum -y install https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
sudo yum install postgresql-12 postgresql12-server postgresql12-libs python-psycopg2
sudo /usr/pgsql-12/bin/postgresql-12-setup initdb
sudo cp /var/lib/pgsql/12/data/pg_hba.conf /var/lib/pgsql/12/data/pg_hba.conf.original
ansible/roles/elections/files/db/pg_hba.conf
del repositorio y copiarlo en /var/lib/pgsql/12/data/pg_hba.conf
sudo systemctl start postgresql-12
sudo systemctl enable postgresql-12
sudo su - postgres
createuser <usuario> --password
psql -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.zip
sudo su - postgres
elections
con el usuario <usuario>
como dueño: createdb elections -O <usuario>
psql -U postgres -d elections /opt/dumps/elections.sql
postgres
: 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 start
El Sistema de Elecciones consiste de 3 artefactos a publicar en el servidor WildFly:
elections-ejb.jar
elections-ws.war
elections.war
Los 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=9990
wildfly.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.