本次使用的环境 centos 7, mongodb 3.4 的环境
也可以使用本地环境,没有多大影响。
使用docker的原因: 安装mongodb太麻烦了, 要下载包,然后又要配置各类文件, 要重启,关键经常出来问题。最TMD的操蛋就是的 我的mongodb 数据库 最近老是被攻击,删除我的数据,害得每次都要重新操作,近尔引起一系列的问题。
1. 安装docker 与 docker-compose 的环境。
2. 编写文件docker-compose.yml
(文件位置:随便创建名为mongodb一个文件,里面放上 .yml 的文件, 切记不要放桌面)
- 本次创建的账号密码:root/123456
- ./data/mongo 这是当前mongodb文件里文件,无需手动创建, ./data/mongo-entrypoint/ 同理
- /data/db 这个为docker 里面的文件,它们俩个关系是映射的关系。
version: '2'
services:
mongo-container:
image: mongo:3.4
container_name: mongodb
environment:
- MONGO_INITDB_ROOT_USERNAME=root
- MONGO_INITDB_ROOT_PASSWORD=123456
ports:
- "27017:27017"
volumes:
- "./data/mongo:/data/db"
- "./data/mongo-entrypoint/:/docker-entrypoint-initdb.d/"
command: mongod
3. 开启docker
systemctl start docker // 当前为centos 环境下启动方式, 如果本地则为自行查阅资料启动。
4. 下载image并执行mongodb程序, 执行docker-compose up -d
位置在 上面创建mongodb 的位置。
4. 查看docker 运行情况
docker ps
好了。mongodb 已经安装完成了。
下面 mongodb 的客户端【mongodb compass】验证 mongodb的是否运行良好?
5. 开启mongodb compass 软件
登录进入去可以看到
6. 使用node 写入数据
app.js 其他代码省略, 只显示核心代码
mongoose.set('useFindAndModify', false)
const connectionStr = 'mongodb://root:123456@你的ip或localhost:27017/可以为admin也可以为其他database?authMechanism=SCRAM-SHA-1'
mongoose.connect(connectionStr, { useNewUrlParser: true, useUnifiedTopology: true }, () => console.log('MongoDB 连接成功了!'));
mongoose.connection.on('error', console.error);
执行接口参数调用,查看mongodb compass 的数据变化。我的例子如下:
ok了,
最后:
这边我们创建了一个admin用户权限, 然后我们需要去重启的docker,然后用身份校验的方式登录。
1. docker-compose down
2. docker-compose up -d
docker 的 mongodb 已经启动ok。
3. 查看docker容器 docker ps
4. docker exec -it [容器id] bash
5. auth 的身份登录 mongo admin -u 'root' -p '123456'
- A 创建给 admin 创建 用户
db.createUser({
user: 'root',
pwd: '123456',
roles: [{role: 'readWrite', db: 'admin'}]
})
- B 验证用户成功
db.auth('root','123456') // 返回1 则代表ok
- C 查询用户
show users // 结果返回用户信息
ps: ABC 的三个步骤不能颠倒。
到此我们连接 admin的db 已经完成了,但是我们的业务都不是在admin 上操作了,此时我们创建一个的databae。
修改node代码
mongoose.set('useFindAndModify', false)
const connectionStr = 'mongodb://username:123456@你的ip或localhost:27017/demo?authMechanism=SCRAM-SHA-1'
mongoose.connect(connectionStr, { useNewUrlParser: true, useUnifiedTopology: true }, () => console.log('MongoDB 连接成功了!'));
mongoose.connection.on('error', console.error);
postman调试接口,连接mongodb compass 客户端,看看能不能查看数据。
这下真的ok了。。。。。。。。。。。。。。。
补充:查看mongod.conf
# 进入容器
docker exec -it [容器id] bash
#更新源
apt-get update
# 安装 vim
apt-get install vim
# 修改 mongo 配置文件
vim /etc/mongod.conf.orig