# 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`](file:///c:/Users/Carlos/dev/almeira-web/transporte-cali-buenaventura/coolify-mongodb.docker-compose.yml): ```yaml 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 ``` 6. **Variables de Entorno en Coolify:** Configurar en la pestaña *Environment Variables*: ```env MONGO_ROOT_USER=admin_transporte MONGO_ROOT_PASSWORD=TuPasswordSuperSeguro2026!* MONGO_DATABASE=transporte_cali_buenaventura ``` 7. **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): ```env MONGODB_URI=mongodb://admin_transporte:TuPasswordSuperSeguro2026!*@mongodb-cali-buenaventura:27017/transporte_cali_buenaventura?authSource=admin ``` ### Conexión Externa (VPS IP): ```env 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`: ```bash docker exec -it mongodb-cali-buenaventura mongosh -u admin_transporte -p TuPasswordSuperSeguro2026!* --authenticationDatabase admin ``` Ejecutar dentro de la base de datos: ```javascript use transporte_cali_buenaventura; db.users.getIndexes(); db.driverprofiles.getIndexes(); db.trips.getIndexes(); ``` Debes observar el índice: ```json { "coordenadasDomicilio": "2dsphere" } { "coordenadasActuales": "2dsphere" } { "origen.ubicacion": "2dsphere" } ``` Con esto, las consultas `$near`, `$geoWithin` y `$nearSphere` operarán con máxima velocidad milimétrica.