Arquitectura
Client
↓
Port 27017 (MongoDB protocol)
↓
FerretDB container
↓
PostgreSQL container (internal Docker network)
↓
Persistent storage directory
FerretDB traduce internamente las solicitudes del protocolo wire de MongoDB en consultas PostgreSQL.
PostgreSQL no está expuesto públicamente.
Puertos
- 27017/tcp → Endpoint público compatible con MongoDB
- 5432/tcp → PostgreSQL interno (no expuesto externamente)
Acceso
Referencia de credenciales: /root/ferretdb/.env
Instale el cliente si es necesario:
apt install -y mongodb-mongosh
Conéctese con autenticación:
mongosh "mongodb://<USERNAME>:<PASSWORD>@<SERVER_IP>:27017/<DATABASE>?authSource=postgres"
Archivos y directorios importantes
- Directorio de instalación:
/root/ferretdb - Archivo Compose:
/root/ferretdb/docker-compose.yml - Archivo de entorno:
/root/ferretdb/.env - Directorio de datos de PostgreSQL:
/root/ferretdb/data
Gestión de servicios
Comprobar el estado:
docker ps
Ver registros:
docker compose -f /root/ferretdb/docker-compose.yml logs -f
Reiniciar los servicios:
docker compose -f /root/ferretdb/docker-compose.yml restart
Comandos comunes de MongoDB
Listar bases de datos:
show dbs
Cambiar de base de datos:
use postgres
Listar colecciones:
show collections
Ver documentos:
db.collection_name.find()
Insertar documento:
db.collection_name.insertOne({ name: "example" })
Salir del shell:
exit
Vincule FerretDB a Localhost por seguridad
La autenticación está habilitada, pero los servicios de base de datos expuestos siguen siendo un riesgo.
Edita: /root/ferretdb/.env
Cambia HOST=0.0.0.0 to HOST=127.0.0.1
Luego aplique los cambios:
docker compose -f /root/ferretdb/docker-compose.yml up -d
Ahora el servicio no es accesible externamente.
Acceda mediante reenvío de puertos SSH.
Desde tu máquina local:
ssh -L 27017:localhost:27017 root@<SERVER_IP>
Luego conéctese localmente:
mongosh "mongodb://<USERNAME>:<PASSWORD>@localhost:27017/<DATABASE>?authSource=postgres