아키텍처
Client
↓
Port 27017 (MongoDB protocol)
↓
FerretDB container
↓
PostgreSQL container (internal Docker network)
↓
Persistent storage directory
FerretDB는 MongoDB 와이어 프로토콜 요청을 내부적으로 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