Architektura
Client
↓
Port 27017 (MongoDB protocol)
↓
FerretDB container
↓
PostgreSQL container (internal Docker network)
↓
Persistent storage directory
FerretDB wewnętrznie tłumaczy żądania protokołu MongoDB wire na zapytania PostgreSQL.
PostgreSQL nie jest publicznie udostępniany.
Porty
- 27017/tcp → Publiczny punkt końcowy kompatybilny z MongoDB
- 5432/tcp → Wewnętrzny PostgreSQL (nieudostępniany na zewnątrz)
Dostęp
Odniesienie do danych uwierzytelniających: /root/ferretdb/.env
Zainstaluj klienta, jeśli to konieczne:
apt install -y mongodb-mongosh
Połącz się z uwierzytelnianiem:
mongosh "mongodb://<USERNAME>:<PASSWORD>@<SERVER_IP>:27017/<DATABASE>?authSource=postgres"
Ważne pliki i katalogi
- Katalog instalacji:
/root/ferretdb - Plik Compose:
/root/ferretdb/docker-compose.yml - Plik środowiska:
/root/ferretdb/.env - Katalog danych PostgreSQL:
/root/ferretdb/data
Zarządzanie usługami
Sprawdź stan:
docker ps
Zobacz logi:
docker compose -f /root/ferretdb/docker-compose.yml logs -f
Uruchom ponownie usługi:
docker compose -f /root/ferretdb/docker-compose.yml restart
Typowe polecenia MongoDB
Wyświetl listę baz danych:
show dbs
Przełącz bazę danych:
use postgres
Wyświetl listę kolekcji:
show collections
Wyświetl dokumenty:
db.collection_name.find()
Wstaw dokument:
db.collection_name.insertOne({ name: "example" })
Wyjdź z powłoki:
exit
Powiąż FerretDB z localhost dla bezpieczeństwa
Uwierzytelnianie jest włączone, ale udostępnione usługi bazy danych nadal stanowią ryzyko.
Edytuj: /root/ferretdb/.env
Zmień HOST=0.0.0.0 to HOST=127.0.0.1
Następnie zastosuj zmiany:
docker compose -f /root/ferretdb/docker-compose.yml up -d
Teraz usługa nie jest dostępna z zewnątrz.
Uzyskaj dostęp za pomocą przekierowania portów SSH.
Z lokalnej maszyny:
ssh -L 27017:localhost:27017 root@<SERVER_IP>
Następnie połącz się lokalnie:
mongosh "mongodb://<USERNAME>:<PASSWORD>@localhost:27017/<DATABASE>?authSource=postgres