前提准备
由于采用的docker安装, 需要安装docker以及docker-compose, 可以查看其他文章,也可点击查看该系列docker安装章节内容
配置文件
关于下列配置文件,全部来源于上述连接中个人查看后自行编写的内容,因此仅供参考
systemLog:
destination: file
path: "/var/log/mongodb/mongod.log" # 日志目的地,注意这是文件不是目录。Linux 包 init 脚本不希望 systemLog.path 改变默认值。如果使用 Linux 包并更改 systemLog.path,则必须使用自己的 init 脚本并禁用内置脚本。
logAppend: true
quiet: true # 以一种安静的模式运行 mongos 或 mongod,试图限制输出的数量,静音不推荐用于生产系统, 但有些地方使用可以决定是否使用
storage:
dbPath: /etc/mongo/db/ # Mongod 实例存储其数据的目录。Dbpath 设置仅对 mongod 可用,注意这里是目录不是文件。
engine: wiredTiger # Mongod 数据库的存储引擎 wiredTiger inMemory 指定内存中存储引擎
wiredTiger:
engineConfig:
# 将用于所有数据的内部缓存的最大大小 如果您在一个无法访问系统中所有可用内存的容器(例如 lxc、 cgroups、 Docker 等)中运行 mongod,
# 则必须将 storage.wiredTiger.engineConfig.cacheSizeGB,单位为GB, 设置为小于容器中可用内存总量的值。确切的数量取决于容器中运行的其他进程。参见 memLimitMB
cacheSizeGB: 0.25
journal:
enabled: true # 启用或禁用持久性日志,以确保数据文件仍然有效且可恢复
net:
bindIp: 0.0.0.0 # 绑定服务器, 0.0.0.0 允许所有机器访问, 127.0.0.1仅允许当前机器访问
port: 27017 # 服务端口
maxIncomingConnections: 65536 # 同时接受的最大关系数。如果此设置高于操作系统配置的最大连接跟踪阈值,则不会产生任何影响。不要将太低的值赋给此选项,否则在正常应用程序操作期间将遇到错误。
wireObjectCheck: true # 防止客户机将格式不正确或无效的 BSON 插入 MongoDB 数据库
serviceExecutor: adaptive # 用新的实验性异步联网模式,具有自适应的线程池,该线程池根据每个请求管理线程
setParameter:
enableLocalhostAuthBypass: false # 禁用本机身份验证
cloud:
monitoring:
free:
state: runtime
security:
# 启用或禁用以角色为基础的存取控制访问控制(RBAC)来管理每个用户对数据库资源和操作的访问。
# enable 用户只能访问被授予特权的数据库资源和操作, disabled 用户可以访问所有的数据库并执行任何操作
authorization: disabled
# 慢操作监控
operationProfiling:
mode: slowOp
slowOpThresholdMs: 10000
slowOpSampleRate: 0.5
单机
docker-compose
准备事项
# 创建目录
mkdir -p /opt/mongo/config && mkdir -p /opt/mongo/logs/ && mkdir -p /opt/mongo/db
cd /opt/mongo/config
# 创建配置文件,将上面的配置文件内容放进来
vim mongod.conf
# 创建pid文件,配合processManagement.fork=true时使用
touch /opt/mongo/config/mongod.pid
# 创建日志文件
cd /opt/mongo/logs
touch mongod.log
# 整个目录赋权
chmod -R 777 /opt/mongo
# 创建dockerc-compose文件
cd /opt/mongo
vim docker-compose.yaml
docker-compose.yaml
mongo: https://hub.docker.com//mongo
mongo-express: https://hub.docker.com//mongo-express?tab=description
虽然从官方找的配置文件不建议修改日志目录,但是用docker安装的时候,发现还是要提前创建好,然后给与权限才行。
按需修改mongod.conf
上面配置部分内容:
- systemLog.path:/etc/mongo/logs/mongod.log
- storage.dbPath:/etc/mongo/db/
注意
docker-express不要在生产环境中使用
下面docker-compose文件中引用了外部网络且指定了ip,这个是需要提前创建网络的,在docker安装篇中已经创建过
docker network create --driver=bridge --subnet=172.20.12.0/16 mynet
version: '3.1'
services:
mongo:
image: mongo:4.4.2
container_name: mongo
restart: always
environment:
# mongo的用户名和密码
MONGO_INITDB_ROOT_USERNAME: develop
MONGO_INITDB_ROOT_PASSWORD: 12345678
ports:
- 27020:27017
volumes:
- /etc/localtime:/etc/localtime
- /opt/mongo/config/mongod.conf:/etc/mongo/mongod.conf:rw
- /opt/mongo/config/mongod.pid:/etc/mongo/mongod.pid
- /opt/mongo/db:/etc/mongo/db:rw
- /opt/mongo/logs/:/etc/mongo/logs:rw
command: "mongod --config /etc/mongo/mongod.conf"
networks:
default:
ipv4_address: 172.20.0.13
mongo-express:
image: mongo-express:0.54.0
container_name: mongo-express
restart: always
ports:
- 8802:8081
environment:
# 具体全量的含义可以看上面dockerhub中mongo-express中的列表有详细解释
# mongo的服务地址,可以配置容器名也可以用ip
ME_CONFIG_MONGODB_SERVER: mongo
# mongo服务的端口
ME_CONFIG_MONGODB_PORT: 27017
# mongo的admin用户名
ME_CONFIG_MONGODB_ADMINUSERNAME: develop
# mongo的admin密码
ME_CONFIG_MONGODB_ADMINPASSWORD: 12345678
# 编辑主题
ME_CONFIG_OPTIONS_EDITORTHEME: ambiance
# 是否可以执行全部操作
ME_CONFIG_MONGODB_ENABLE_ADMIN: "true"
networks:
default:
ipv4_address: 172.20.0.14
networks:
default:
external:
name: mynet
访问mongo-express
按照docker-compose
映射的端口,如上,则为8802, 然后ip:8802访问
创建用户授权
# mongo --help 查看帮助
mongo -u develop -p xxxx --authenticationDatabase admin
# authSource db, 名字按需取
use test_auth
# 对应连接地址mongodb://admin:123456@${host}:27017/?authSource=test_auth
# 或者指定默认数据库,没有会创建
# 对应连接地址# mongodb://admin:123456@${host}:27017/${数据库名}?authSource=test_auth
db.createUser( {user: "admin", pwd: "123456",roles: [ { role: "dbOwner", db: "test_auth" } ]})