MongoDB 安装、配置与应用指南 · Dylan AI Agent Nexus

Install, Configure and Apply MongoDB for Local AI and Enterprise Apps

定位与应用场景

MongoDB 是文档型数据库,适合半结构化数据、事件日志、配置元数据、会话与缓存、素材与工作流记录等。与我们的本地 AI 平台配合,可作为业务数据与生成记录的高效存储。

快速安装(推荐优先 Docker)

docker run -d --name mongo -p 27017:27017 -v mongo_data:/data/db --restart unless-stopped mongo:7

如果需要账户认证:

docker run -d --name mongo -p 27017:27017 -v mongo_data:/data/db -e MONGO_INITDB_ROOT_USERNAME=admin -e MONGO_INITDB_ROOT_PASSWORD=changeit --restart unless-stopped mongo:7

Linux 原生(概念):使用官方源安装 mongodmongosh,并通过 systemctl 管理服务。

生产建议使用有持久卷的容器或原生安装;勿把数据目录放在临时卷。

基础配置(mongod.conf 关键项)

  • 网络:net.port: 27017;net.bindIp: 127.0.0.1 或 私网地址。
  • 认证:security.authorization: enabled(开启基于用户/角色的访问控制)。
  • 存储:storage.dbPath: /data/db;storage.journal.enabled: true。
  • 引擎:storage.engine: wiredTiger(默认);可配置 cache 大小。
  • 日志:systemLog.destination: file;systemLog.path: /var/log/mongodb/mongod.log。

Docker 可通过挂载自定义配置:-v /path/mongod.conf:/etc/mongod.conf 并以 --config /etc/mongod.conf 启动。

账户与权限(首次创建)

mongosh --port 27017
use admin; db.createUser({user:"admin",pwd:"changeit",roles:[{role:"userAdminAnyDatabase",db:"admin"},{role:"readWriteAnyDatabase",db:"admin"}]})
db.auth("admin","changeit")
use appdb; db.createUser({user:"appuser",pwd:"StrongPass123",roles:[{role:"readWrite",db:"appdb"}]})

启用认证后,客户端连接需带上用户名/密码与 authSource=admin

常用运维命令

systemctl status mongod
systemctl restart mongod
mongosh "mongodb://admin:changeit@127.0.0.1:27017/?authSource=admin"
mongodump --uri "mongodb://admin:changeit@127.0.0.1:27017/?authSource=admin" --db appdb --out ./backup_appdb
mongorestore --uri "mongodb://admin:changeit@127.0.0.1:27017/?authSource=admin" --db appdb ./backup_appdb/appdb
mongosh --eval "db.getSiblingDB('appdb').collection.createIndex({created_at:1})" "mongodb://admin:changeit@127.0.0.1:27017/?authSource=admin"

数据建模与索引

  • 文档设计:围绕查询路径优化结构;避免过深嵌套与超大文档。
  • 索引策略:高频查询字段建立复合索引;谨慎使用通配与 $regex 前缀。
  • TTL/归档:对短期日志使用 TTL 索引;历史数据分集合归档。
  • 写策略:写 Concern/Read Preference 基于一致性与延迟权衡。

高可用(副本集)与扩展(分片)

生产应使用三节点副本集(Primary/Secondary/Arbiter 或三个数据节点)。

mongosh --eval "rs.initiate({_id:'rs0',members:[{_id:0,host:'host1:27017'},{_id:1,host:'host2:27017'},{_id:2,host:'host3:27017'}]})"

分片(Sharding)用于水平扩展超大数据集;需规划分片键、均衡与路由。

监控与排障

  • 内置工具:mongostat、mongotop 快速观察。
  • 指标采集:导出节点指标至 Prometheus/Grafana;收集慢查询日志。
  • 常见问题:连接超时(网络/鉴权/白名单)、锁竞争(索引缺失/大文档)、磁盘 IOPS 瓶颈。

安全与合规

  • 网络边界:仅绑定内网地址;外网访问需网关与 TLS。
  • 账户策略:最小权限角色;定期轮换强密码与禁用默认账户。
  • 数据保护:开启 Journal;制定冷/热备份计划与演练恢复。
  • 合规:记录访问审计;敏感数据加密或脱敏存储。

PHP 应用接入示例

composer require mongodb/mongodb