120 lines
4.2 KiB
Markdown
120 lines
4.2 KiB
Markdown
# 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.
|