almeira-web/transporte-cali-buenaventura/docs/COOLIFY_MONGODB_DEPLOY.md

4.2 KiB

Despliegue de MongoDB Propio (Self-Hosted) en Coolify

Este documento describe el procedimiento exacto para desplegar el servidor propio de MongoDB en Coolify para la plataforma de transporte y mensajería Cali - Buenaventura, asegurando soporte completo para índices geoespaciales 2dsphere, persistencia de datos y compatibilidad con Traefik.


1. Arquitectura de Despliegue en Coolify

  • Motor: MongoDB Community 7.0 (WiredTiger Engine).
  • Límites de Recursos: Asignación fija de caché (--wiredTigerCacheSizeGB 1.5) y memoria máxima (2GB) para prevenir saturación de RAM en el VPS.
  • Seguridad: Autenticación obligatoria con usuario root y base de datos transporte_cali_buenaventura.
  • Persistencia: Volúmenes Docker gestionados por Coolify (coolify_mongodb_cali_data).
  • Enrutamiento: Red interna de Docker. El backend de Node.js se conecta internamente a través del nombre de servicio mongodb-cali-buenaventura:27017 sin exponer puertos innecesarios a Internet, o con puerto 27017 si necesitas conectarte vía MongoDB Compass.

2. Configuración en Coolify (Paso a Paso)

  1. Ingresar a tu panel de Coolify.
  2. Ir a tu Proyecto y seleccionar el Ambiente (Environment) de producción.
  3. Hacer clic en + New Resource ➔ Docker Compose.
  4. Asignar el nombre: mongodb-transporte-cali.
  5. En el campo de configuración Compose, pegar el contenido del archivo coolify-mongodb.docker-compose.yml:
version: '3.8'

services:
  mongodb-transporte:
    image: mongo:7.0-jammy
    container_name: mongodb-cali-buenaventura
    restart: always
    environment:
      MONGO_INITDB_ROOT_USERNAME: ${MONGO_ROOT_USER:-admin_transporte}
      MONGO_INITDB_ROOT_PASSWORD: ${MONGO_ROOT_PASSWORD:-InnovaTransporte2026!*}
      MONGO_INITDB_DATABASE: ${MONGO_DATABASE:-transporte_cali_buenaventura}
    command: >
      mongod
      --bind_ip_all
      --wiredTigerCacheSizeGB 1.5
      --nounixsocket
      --oplogSize 1024      
    volumes:
      - mongodb_cali_data:/data/db
      - mongodb_cali_config:/data/configdb
    ports:
      - "27017:27017"
    healthcheck:
      test: ["CMD-SHELL", "mongosh --quiet --eval 'db.adminCommand(\"ping\").ok' || exit 1"]
      interval: 10s
      timeout: 5s
      retries: 5
      start_period: 20s
    deploy:
      resources:
        limits:
          memory: 2048M

volumes:
  mongodb_cali_data:
    name: coolify_mongodb_cali_data
    driver: local
  mongodb_cali_config:
    name: coolify_mongodb_cali_config
    driver: local
  1. Variables de Entorno en Coolify: Configurar en la pestaña Environment Variables:

    MONGO_ROOT_USER=admin_transporte
    MONGO_ROOT_PASSWORD=TuPasswordSuperSeguro2026!*
    MONGO_DATABASE=transporte_cali_buenaventura
    
  2. Desplegar: Hacer clic en Deploy. Coolify levantará el contenedor de manera aislada y segura.


3. String de Conexión para el Backend

Una vez desplegado en Coolify, la variable MONGODB_URI en tu backend de Node.js debe configurarse como:

Conexión Interna (si el backend corre en Coolify):

MONGODB_URI=mongodb://admin_transporte:TuPasswordSuperSeguro2026!*@mongodb-cali-buenaventura:27017/transporte_cali_buenaventura?authSource=admin

Conexión Externa (VPS IP):

MONGODB_URI=mongodb://admin_transporte:TuPasswordSuperSeguro2026!*@161.97.93.156:27017/transporte_cali_buenaventura?authSource=admin

4. Verificación de Índices Geoespaciales 2dsphere

El backend ejecuta autoIndex: true de forma predeterminada. Puedes comprobar que los índices estén activos conectándote a mongosh:

docker exec -it mongodb-cali-buenaventura mongosh -u admin_transporte -p TuPasswordSuperSeguro2026!* --authenticationDatabase admin

Ejecutar dentro de la base de datos:

use transporte_cali_buenaventura;
db.users.getIndexes();
db.driverprofiles.getIndexes();
db.trips.getIndexes();

Debes observar el índice:

{ "coordenadasDomicilio": "2dsphere" }
{ "coordenadasActuales": "2dsphere" }
{ "origen.ubicacion": "2dsphere" }

Con esto, las consultas $near, $geoWithin y $nearSphere operarán con máxima velocidad milimétrica.