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:27017sin exponer puertos innecesarios a Internet, o con puerto27017si necesitas conectarte vía MongoDB Compass.
2. Configuración en Coolify (Paso a Paso)
- Ingresar a tu panel de Coolify.
- Ir a tu Proyecto y seleccionar el Ambiente (Environment) de producción.
- Hacer clic en + New Resource ➔ Docker Compose.
- Asignar el nombre:
mongodb-transporte-cali. - 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
-
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 -
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.