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.
- 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
- 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.
- Instalar el motor de base de datos:
sudo apt install postgresql postgresql-contrib
- 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
- Instalar la extensión PostGIS: Reemplaza
tu_version_postgrepor 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:
- Ajustar el Firewall (UFW):
sudo ufw allow from 172.16.0.0/12 to any port 5432
- Configurar accesos en PostgreSQL (
pg_hba.conf): Edita el archivo de configuración, sustituyendotu_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:
- Configuración de URLs y Puertos: Edita el archivo
docker-compose.ymlpara 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. - 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.