Skip to main content

Despliegue en Linux

Para desplegar el sistema en un servidor o equipo con sistema operativo Linux (específicamente en distribuciones basadas en Ubuntu/Debian), es necesario configurar tanto los contenedores como la base de datos geoespacial.

Este proceso garantiza que el entorno de producción esté optimizado, aislando los servicios lógicos en Docker.

Configuración del directorio de trabajo

Lo primero es preparar la estructura de carpetas y descargar el código fuente de la infraestructura y los repositorios de los 3 servicios principales (Frontend, Back Node y Worker) que componen el sistema.

Accede al servidor y ejecuta los siguientes comandos en el directorio principal /home/ubuntu:

mkdir aspa_prod
cd aspa_prod
git clone https://github.com/ASPA-TECH/infra.git

cd infra/
git clone https://github.com/ASPA-TECH/aspa-worker-cpp-prod.git
git clone https://github.com/ASPA-TECH/aspa-back-node-prod.git
git clone https://github.com/ASPA-TECH/aspa-front-next-prod.git

Instalación de Docker y Docker Compose

El sistema utiliza contenedores para orquestar los servicios, por lo que utiliza la herramienta Docker. Para instalar Docker en Ubuntu, configura los repositorios ejecutando este bloque de comandos:

# Añadir la clave GPG oficial de Docker:
sudo apt update
sudo apt install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

# Añadir el repositorio a las fuentes de Apt:
sudo tee /etc/apt/sources.list.d/docker.sources <<EOF
Types: deb
URIs: https://download.docker.com/linux/ubuntu
Suites: $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}")
Components: stable
Architectures: $(dpkg --print-architecture)
Signed-By: /etc/apt/keyrings/docker.asc
EOF

# Actualizar e instalar Docker y sus plugins:
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

Preparación de datos y credenciales

Antes de levantar la infraestructura, es necesario configurar las contraseñas base y transferir los datos pesados para el Worker.

  1. Credenciales de Mongo: Dentro de la carpeta infra, crea el archivo con la contraseña de la base de datos documental:
cd /home/ubuntu/aspa_prod/infra
echo "contraseña_mongo" > password.txt
  1. Datos de accesibilidad del Worker: Debes transferir los archivos base desde tu máquina local al servidor, a la ruta específica de datos del Worker:
# Ejecutar desde tu máquina local donde tengas los archivos:
scp dense_id_map_destination.csv ubuntu@213.32.26.205:/home/ubuntu/aspa_prod/infra/aspa-worker-cpp-prod/ACC/data
scp dense_id_map_origin.csv ubuntu@213.32.26.205:/home/ubuntu/aspa_prod/infra/aspa-worker-cpp-prod/ACC/data
scp dense_tt_u16.bin ubuntu@213.32.26.205:/home/ubuntu/aspa_prod/infra/aspa-worker-cpp-prod/ACC/data

Instalación y configuración de PostgreSQL y PostGIS

Para el entorno Linux, PostgreSQL se instala directamente en el servidor anfitrión.

  1. Instalar el motor de base de datos:
sudo apt install postgresql postgresql-contrib
  1. Crear el usuario y la base de datos: Accede a la consola de PostgreSQL y crea el administrador del sistema:
sudo -u postgres psql
CREATE USER aspa WITH PASSWORD 'aspanohacks';
CREATE DATABASE aspa_db OWNER aspa;
\q
  1. Instalar la extensión PostGIS: Reemplaza tu_version_postgre por la versión instalada:
sudo apt install -y postgresql-tu_version_postgre-postgis-3

Habilita la extensión dentro de la base de datos recién creada:

sudo -u postgres psql -d aspa_db
CREATE EXTENSION IF NOT EXISTS postgis;
\q

Configuración de red y Firewall

Para que los contenedores Docker puedan comunicarse de forma segura con el PostgreSQL instalado en el host, debes habilitar la conexión interna:

  1. Ajustar el Firewall (UFW):
sudo ufw allow from 172.16.0.0/12 to any port 5432
  1. Configurar accesos en PostgreSQL (pg_hba.conf): Edita el archivo de configuración, sustituyendo tu_version_postgre:
sudo nano /etc/postgresql/tu_version_postgre/main/pg_hba.conf

Importante: Añade esta línea al final del archivo para autorizar la red de Docker:

host aspa_db aspa 172.16.0.0/12 scram-sha-256

Ahora para aplicar los cambios, reinicia el servicio de PostgreSQL con este comando:

sudo systemctl restart postgresql

Creación de esquemas y permisos

Antes de importar los datos, crea la estructura de esquemas y asigna la propiedad al usuario aspa:

sudo -u postgres psql -d aspa_db
-- Crear los esquemas
CREATE SCHEMA IF NOT EXISTS derivados;
CREATE SCHEMA IF NOT EXISTS malla;
CREATE SCHEMA IF NOT EXISTS accesibilidad;
CREATE SCHEMA IF NOT EXISTS servicios;

-- Dar permisos al usuario aspa
ALTER SCHEMA derivados OWNER TO aspa;
ALTER SCHEMA malla OWNER TO aspa;
ALTER SCHEMA accesibilidad OWNER TO aspa;
ALTER SCHEMA servicios OWNER TO aspa;

-- Permisos adicionales para crear tablas
GRANT ALL ON SCHEMA derivados TO aspa;
GRANT ALL ON SCHEMA malla TO aspa;
GRANT ALL ON SCHEMA accesibilidad TO aspa;
GRANT ALL ON SCHEMA servicios TO aspa;

\q

Poblar la base de datos (Backups)

Con la conexión lista y los esquemas creados, carga los backups de las tablas geoespaciales. Asegúrate de haber transferido previamente los archivos .backup al servidor, para ello puedes utilizar por ejemplo el comando scp como hiciste anteriormente.

Ejecuta las restauraciones asignando los esquemas correspondientes (ajusta la versión en la ruta de pg_restore):

# 1. Esquema: derivados
sudo -u postgres /usr/lib/postgresql/tu_version_postgre/bin/pg_restore -d aspa_db -n derivados --no-owner --role=aspa malla_origenes_completo_num.backup

# 2. Esquema: malla
sudo -u postgres /usr/lib/postgresql/tu_version_postgre/bin/pg_restore -d aspa_db -n malla --no-owner --role=aspa geom_grid_250m.backup

# 3. Esquema: accesibilidad
sudo -u postgres /usr/lib/postgresql/tu_version_postgre/bin/pg_restore -d aspa_db -n accesibilidad --no-owner --role=aspa correspondencia_id_grid.backup

# 4. Esquema: servicios
sudo -u postgres /usr/lib/postgresql/tu_version_postgre/bin/pg_restore -d aspa_db -n servicios --no-owner --role=aspa geom_servicios_punt.backup

Despliegue y Enrutamiento

Finalmente, debes ajustar la configuración para asegurar el enrutamiento correcto del tráfico y evitar colisiones de puertos:

  1. Configuración de URLs y Puertos: Edita el archivo docker-compose.yml para asegurarte de que las variables de entorno conecten a la IP correcta de los servicios y que los puertos expuestos estén libres, evitando solapamientos.
  2. Caddyfile: Configura el proxy inverso para que gestione los dominios de producción. Puedes consultar los detalles exactos en la Guía de configuración del Caddyfile.

Una vez revisados los archivos, inicia la infraestructura completa:

docker compose up -d --build

Con todo esto, habrás desplegado finalmente, el sistema ASPA en el servidor Linux.