Kiến trúc
Client
↓
Port 27017 (MongoDB protocol)
↓
FerretDB container
↓
PostgreSQL container (internal Docker network)
↓
Persistent storage directory
FerretDB dịch nội bộ các yêu cầu theo giao thức MongoDB wire protocol thành truy vấn PostgreSQL.
PostgreSQL không được phơi bày công khai.
Cổng
- 27017/tcp → Điểm cuối công khai tương thích MongoDB
- 5432/tcp → PostgreSQL nội bộ (không phơi bày ra bên ngoài)
Truy cập
Tham chiếu thông tin đăng nhập: /root/ferretdb/.env
Cài đặt client nếu cần:
apt install -y mongodb-mongosh
Kết nối có xác thực:
mongosh "mongodb://<USERNAME>:<PASSWORD>@<SERVER_IP>:27017/<DATABASE>?authSource=postgres"
File và thư mục quan trọng
- Thư mục cài đặt:
/root/ferretdb - Soạn tệp:
/root/ferretdb/docker-compose.yml - File environment:
/root/ferretdb/.env - Thư mục dữ liệu PostgreSQL:
/root/ferretdb/data
Quản lý dịch vụ
Kiểm tra trạng thái:
docker ps
Xem log:
docker compose -f /root/ferretdb/docker-compose.yml logs -f
Khởi động lại các dịch vụ:
docker compose -f /root/ferretdb/docker-compose.yml restart
Các lệnh MongoDB thông dụng
Liệt kê các cơ sở dữ liệu:
show dbs
Chuyển cơ sở dữ liệu:
use postgres
Liệt kê các collection:
show collections
Xem các document:
db.collection_name.find()
Chèn document:
db.collection_name.insertOne({ name: "example" })
Thoát shell:
exit
Gán FerretDB vào Localhost để bảo mật
Xác thực đã được bật, nhưng các dịch vụ cơ sở dữ liệu bị phơi bày vẫn là một rủi ro.
Chỉnh sửa: /root/ferretdb/.env
Thay đổi HOST=0.0.0.0 to HOST=127.0.0.1
Sau đó áp dụng thay đổi:
docker compose -f /root/ferretdb/docker-compose.yml up -d
Bây giờ dịch vụ không thể truy cập được từ bên ngoài.
Truy cập bằng SSH port forwarding.
Từ máy của bạn:
ssh -L 27017:localhost:27017 root@<SERVER_IP>
Sau đó kết nối cục bộ:
mongosh "mongodb://<USERNAME>:<PASSWORD>@localhost:27017/<DATABASE>?authSource=postgres