Architektur
Client
↓
Port 27017 (MongoDB protocol)
↓
FerretDB container
↓
PostgreSQL container (internal Docker network)
↓
Persistent storage directory
FerretDB übersetzt MongoDB-Wire-Protocol-Anfragen intern in PostgreSQL-Abfragen.
PostgreSQL ist nicht öffentlich exponiert.
Häfen
- 27017/tcp → Öffentlicher MongoDB-kompatibler Endpunkt
- 5432/tcp → Internes PostgreSQL (nicht extern exponiert)
Zugriff
Anmeldedaten-Referenz: /root/ferretdb/.env
Installieren Sie den Client bei Bedarf:
apt install -y mongodb-mongosh
Verbinden Sie sich mit Authentifizierung:
mongosh "mongodb://<USERNAME>:<PASSWORD>@<SERVER_IP>:27017/<DATABASE>?authSource=postgres"
Wichtige Dateien und Verzeichnisse
- Installationsverzeichnis:
/root/ferretdb - Compose-Datei:
/root/ferretdb/docker-compose.yml - Environment-Datei:
/root/ferretdb/.env - PostgreSQL-Datenverzeichnis:
/root/ferretdb/data
Service-Management
Status prüfen:
docker ps
Logs ansehen:
docker compose -f /root/ferretdb/docker-compose.yml logs -f
Dienste neu starten:
docker compose -f /root/ferretdb/docker-compose.yml restart
Häufige MongoDB-Befehle
Datenbanken auflisten:
show dbs
Datenbank wechseln:
use postgres
Collections auflisten:
show collections
Dokumente anzeigen:
db.collection_name.find()
Dokument einfügen:
db.collection_name.insertOne({ name: "example" })
Shell beenden:
exit
FerretDB aus Sicherheitsgründen an Localhost binden
Die Authentifizierung ist aktiviert, aber exponierte Datenbankdienste sind weiterhin ein Risiko.
Bearbeiten: /root/ferretdb/.env
Ändere HOST=0.0.0.0 to HOST=127.0.0.1
Wenden Sie dann die Änderungen an:
docker compose -f /root/ferretdb/docker-compose.yml up -d
Jetzt ist der Dienst extern nicht mehr erreichbar.
Zugriff über SSH-Portweiterleitung.
Auf deinem lokalen Rechner:
ssh -L 27017:localhost:27017 root@<SERVER_IP>
Verbinden Sie sich dann lokal:
mongosh "mongodb://<USERNAME>:<PASSWORD>@localhost:27017/<DATABASE>?authSource=postgres