Архитектура
Client
↓
Port 27017 (MongoDB protocol)
↓
FerretDB container
↓
PostgreSQL container (internal Docker network)
↓
Persistent storage directory
FerretDB внутренне преобразует запросы протокола MongoDB wire в запросы PostgreSQL.
PostgreSQL не доступен публично.
Порты
- 27017/tcp → Публичная конечная точка, совместимая с MongoDB
- 5432/tcp → Внутренний PostgreSQL (не доступен извне)
Доступ
Справка по учётным данным: /root/ferretdb/.env
Установите клиент при необходимости:
apt install -y mongodb-mongosh
Подключитесь с аутентификацией:
mongosh "mongodb://<USERNAME>:<PASSWORD>@<SERVER_IP>:27017/<DATABASE>?authSource=postgres"
Важные файлы и директории
- Директория установки:
/root/ferretdb - Compose-файл:
/root/ferretdb/docker-compose.yml - Файл окружения:
/root/ferretdb/.env - Каталог данных PostgreSQL:
/root/ferretdb/data
Управление сервисами
Проверить статус:
docker ps
Посмотреть логи:
docker compose -f /root/ferretdb/docker-compose.yml logs -f
Перезапустить службы:
docker compose -f /root/ferretdb/docker-compose.yml restart
Основные команды MongoDB
Список баз данных:
show dbs
Переключить базу данных:
use postgres
Список коллекций:
show collections
Просмотр документов:
db.collection_name.find()
Вставить документ:
db.collection_name.insertOne({ name: "example" })
Выйти из оболочки:
exit
Привяжите FerretDB к localhost для безопасности
Аутентификация включена, но открытые службы базы данных всё равно представляют риск.
Отредактируйте: /root/ferretdb/.env
Замените HOST=0.0.0.0 to HOST=127.0.0.1
Затем примените изменения:
docker compose -f /root/ferretdb/docker-compose.yml up -d
Теперь служба недоступна извне.
Доступ через проброс портов SSH.
На вашей локальной машине:
ssh -L 27017:localhost:27017 root@<SERVER_IP>
Затем подключитесь локально:
mongosh "mongodb://<USERNAME>:<PASSWORD>@localhost:27017/<DATABASE>?authSource=postgres