Architettura
Client
↓
Port 27017 (MongoDB protocol)
↓
FerretDB container
↓
PostgreSQL container (internal Docker network)
↓
Persistent storage directory
FerretDB traduce internamente le richieste del protocollo wire di MongoDB in query PostgreSQL.
PostgreSQL non è esposto pubblicamente.
Porti
- 27017/tcp → Endpoint pubblico compatibile con MongoDB
- 5432/tcp → PostgreSQL interno (non esposto esternamente)
Accesso
Riferimento delle credenziali: /root/ferretdb/.env
Installa il client se necessario:
apt install -y mongodb-mongosh
Connettiti con l'autenticazione:
mongosh "mongodb://<USERNAME>:<PASSWORD>@<SERVER_IP>:27017/<DATABASE>?authSource=postgres"
File e directory importanti
- Directory di installazione:
/root/ferretdb - File di composizione:
/root/ferretdb/docker-compose.yml - File di environment:
/root/ferretdb/.env - Directory dei dati di PostgreSQL:
/root/ferretdb/data
Gestione del servizio
Verifica lo stato:
docker ps
Visualizza i log:
docker compose -f /root/ferretdb/docker-compose.yml logs -f
Riavvia i servizi:
docker compose -f /root/ferretdb/docker-compose.yml restart
Comandi comuni di MongoDB
Elenca i database:
show dbs
Cambia database:
use postgres
Elenca le collezioni:
show collections
Visualizza i documenti:
db.collection_name.find()
Inserisci un documento:
db.collection_name.insertOne({ name: "example" })
Esci dalla shell:
exit
Associa FerretDB a Localhost per la sicurezza
L'autenticazione è abilitata, ma i servizi di database esposti rappresentano comunque un rischio.
Modifica: /root/ferretdb/.env
Cambia HOST=0.0.0.0 to HOST=127.0.0.1
Poi applica le modifiche:
docker compose -f /root/ferretdb/docker-compose.yml up -d
Ora il servizio non è accessibile dall'esterno.
Accedi usando il port forwarding SSH.
Dalla tua macchina locale:
ssh -L 27017:localhost:27017 root@<SERVER_IP>
Poi connettiti localmente:
mongosh "mongodb://<USERNAME>:<PASSWORD>@localhost:27017/<DATABASE>?authSource=postgres