建築
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