Arquitetura
Client
↓
Port 27017 (MongoDB protocol)
↓
FerretDB container
↓
PostgreSQL container (internal Docker network)
↓
Persistent storage directory
O FerretDB traduz internamente as requisições do protocolo de rede do MongoDB em consultas PostgreSQL.
O PostgreSQL não é exposto publicamente.
Portas
- 27017/tcp → Endpoint público compatível com MongoDB
- 5432/tcp → PostgreSQL interno (não exposto externamente)
Acesso
Referência de credenciais: /root/ferretdb/.env
Instale o cliente se necessário:
apt install -y mongodb-mongosh
Conecte-se com autenticação:
mongosh "mongodb://<USERNAME>:<PASSWORD>@<SERVER_IP>:27017/<DATABASE>?authSource=postgres"
Ficheiros e diretórios importantes
- Diretório de instalação:
/root/ferretdb - Arquivo de composição:
/root/ferretdb/docker-compose.yml - Ficheiro de ambiente:
/root/ferretdb/.env - Diretório de dados do PostgreSQL:
/root/ferretdb/data
Gestão de serviços
Verificar o status:
docker ps
Ver registos:
docker compose -f /root/ferretdb/docker-compose.yml logs -f
Reiniciar os serviços:
docker compose -f /root/ferretdb/docker-compose.yml restart
Comandos comuns do MongoDB
Listar bancos de dados:
show dbs
Trocar de banco de dados:
use postgres
Listar coleções:
show collections
Visualizar documentos:
db.collection_name.find()
Inserir documento:
db.collection_name.insertOne({ name: "example" })
Sair do shell:
exit
Vincule o FerretDB ao Localhost por segurança
A autenticação está ativada, mas serviços de banco de dados expostos ainda representam um risco.
Editar: /root/ferretdb/.env
Alterar HOST=0.0.0.0 to HOST=127.0.0.1
Em seguida, aplique as alterações:
docker compose -f /root/ferretdb/docker-compose.yml up -d
Agora o serviço não é acessível externamente.
Acesse usando o encaminhamento de porta SSH.
Na sua máquina local:
ssh -L 27017:localhost:27017 root@<SERVER_IP>
Em seguida, conecte-se localmente:
mongosh "mongodb://<USERNAME>:<PASSWORD>@localhost:27017/<DATABASE>?authSource=postgres