feat: add easy-dataset and mongodb-replicaset-single
This commit is contained in:
77
src/mongodb-replicaset-single/README.zh.md
Normal file
77
src/mongodb-replicaset-single/README.zh.md
Normal file
@@ -0,0 +1,77 @@
|
||||
# MongoDB 单节点副本集
|
||||
|
||||
[English](./README.md) | [中文](./README.zh.md)
|
||||
|
||||
此服务用于搭建一个单节点 MongoDB 副本集,特别适合开发和测试环境。
|
||||
|
||||
## 前提条件
|
||||
|
||||
1. 为副本集生成一个密钥文件:
|
||||
|
||||
```bash
|
||||
openssl rand -base64 756 > ./secrets/rs0.key
|
||||
```
|
||||
|
||||
在 Windows 上,您可以使用 Git Bash 或 WSL,或从 [MongoDB 文档](https://docs.mongodb.com/manual/tutorial/deploy-replica-set/) 下载密钥文件。
|
||||
|
||||
## 初始化
|
||||
|
||||
1. 启动服务:
|
||||
|
||||
```bash
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
这些服务将通过 `mongo-init` init 容器自动初始化副本集。该容器会:
|
||||
- 等待 MongoDB 节点就绪
|
||||
- 连接到该节点
|
||||
- 初始化单节点副本集
|
||||
- 通过容器网络进行通信
|
||||
|
||||
2. 验证副本集状态:
|
||||
|
||||
```bash
|
||||
docker exec -it mongodb-replicaset-single-mongo1-1 mongosh -u root -p password --authenticationDatabase admin --eval "rs.status()"
|
||||
```
|
||||
|
||||
## 服务
|
||||
|
||||
- `mongo1`: 副本集的唯一成员。
|
||||
|
||||
## 配置
|
||||
|
||||
- `TZ`: 容器的时区,默认为 `UTC`。
|
||||
- `MONGO_VERSION`: MongoDB 镜像的版本,默认为 `8.0.13`。
|
||||
- `MONGO_INITDB_ROOT_USERNAME`: 数据库的 root 用户名,默认为 `root`。
|
||||
- `MONGO_INITDB_ROOT_PASSWORD`: 数据库的 root 密码,默认为 `password`。
|
||||
- `MONGO_INITDB_DATABASE`: 要创建的初始数据库,默认为 `admin`。
|
||||
- `MONGO_REPLICA_SET_NAME`: 副本集的名称,默认为 `rs0`。
|
||||
- `MONGO_PORT_OVERRIDE_1`: MongoDB 节点的主机端口,默认为 `27017`。
|
||||
- `MONGO_HOST`: MongoDB 节点的主机名,默认为 `mongo1`。
|
||||
|
||||
## 卷
|
||||
|
||||
- `mongo_data`: 用于 MongoDB 数据持久化的命名卷。
|
||||
- `secrets/rs0.key`: 副本集成员身份验证的密钥文件。
|
||||
|
||||
## 安全性
|
||||
|
||||
副本集密钥文件以只读方式挂载,并在容器内复制到 `/tmp`,权限为 400。这种方法确保跨平台兼容性(Windows/Linux/macOS),同时保持安全要求。密钥文件不会在主机系统上被修改。
|
||||
|
||||
## 使用单节点副本集
|
||||
|
||||
您可以使用任何 MongoDB 客户端连接到 MongoDB 副本集:
|
||||
|
||||
```bash
|
||||
mongosh "mongodb://root:password@localhost:27017/admin?authSource=admin&replicaSet=rs0"
|
||||
```
|
||||
|
||||
或使用 Python 的 PyMongo:
|
||||
|
||||
```python
|
||||
from pymongo import MongoClient
|
||||
|
||||
client = MongoClient("mongodb://root:password@localhost:27017/admin?authSource=admin&replicaSet=rs0")
|
||||
db = client.admin
|
||||
print(db.command("ping"))
|
||||
```
|
||||
Reference in New Issue
Block a user