搭建mongodb
单机部署-认证使用
实现思路
先将配置文件配置好,使用不用认证的启动命令启动docker
,然后创建账号并制定角色。在使用开启认证的命令重新启动容器就好。
这里我并没有说先停止容器,删掉容器重新创建容器。是因为我的启动命令中,第一步就是停止容器、删掉容器、再创建容器的。
后期关于部署方面我会使用docker-compose.yml
容器编排的方式呈现给大伙,因为docker-compose.yml
是真的方便,相当方便,一个命令就能解决所有。
1.5.1、创建文件
创建配置文件保存目录和数据保存目录
mkdir -p /data/mongodb/{/conf,/data,/logs}
1.5.2、配置文件
- 第一台MongoDB配置文件
注意:更改端口号为最终端口号。这里的配置文件里面,不增加任何认证的问题,因为这只是为了集群和创建用户用的,后面需要重新覆盖掉。
vim /data/mongodb/conf/mongod.conf
net:
port: 27017 # 这是启动端口
bindIp: 0.0.0.0 # 允许哪些ip连接(好像和下面的命令参数 --bind_ip_all 相类似的作用)
systemLog:
logAppend: true # 重新启动的mongodb的时候日志拼接在以前的日志文件上,不用新建
1.5.3、创建启动命令
首先不要增加任何认证,先启动不用认证的mongodb
,在里面将需要的集合、副本和用户名密码权限等信息创建好,在使用需要认证的命令重新创建容器。因为配置的信息已经映射到宿主机上了,只要不把宿主机上的数据删除,所有配置都是存在的。
mkdir -p /opt/docker
vi /opt/docker/mongodb.sh
- 不用认证的命令
MONGODB_DIR=/data/mongodb
NAME=mognodb
CONF=/data/mongodb/conf
docker stop ${NAME}
docker rm ${NAME}
docker run --name ${NAME} \
-p 35964:27017 \
-v ${MONGODB_DIR}/data:/data/db \
-v ${CONF}:/data/configdb \
-v ${MONGODB_DIR}/logs:/data/log \
-d mongo:7.0.5
- 启动
sh /opt/docker/mongodb.sh
1.5.4、配置副本
- 连接任意一个节点,进行副本集配置
docker exec -it mognodb /bin/bash
连接三个节点中的任意一个,链接这个就是主节点。
./usr/bin/mongosh
1.5.5、创建用户名和密码
- 切换数据库和创建用户
use userdb
db.createUser({ user: 'oeirnergnekladc', pwd: 'aE3UurXjWtxbHN80RCxL', roles: [ { role: "root", db: "admin" } ] });
db.auth('oeirnergnekladc', 'aE3UurXjWtxbHN80RCxL');
这里需要注意权限的问题,权限给
root
似乎太大了,但是也不能给太小,给太小会发现干啥都没权限。
1.5.6、创建需要认证的启动命令
- 先退出mongodb和容器,回到宿主机
exit
exit
把原来的启动命令删除,重新编辑启动命令。
rm -rf /opt/docker/mongodb.sh
vi /opt/docker/mongodb.sh
- 写入启动命令
MONGODB_DIR=/data/mongodb
NAME=mognodb
CONF=/data/mongodb/conf
docker stop ${NAME}
docker rm ${NAME}
docker run --name ${NAME} \
-p 35964:27017 \
-v ${MONGODB_DIR}/data:/data/db \
-v ${CONF}:/data/configdb \
-v ${MONGODB_DIR}/logs:/data/log \
--restart=always \
-d mongo:7.0.5 \
--auth --bind_ip_all
- 重启mongodb
sh /opt/docker/mongodb.sh
原创不易,转发指明出处。