本文假设您已经在云服务器中成功安装了 Docker 并下载了 mongo 镜像。
1. 创建配置文件
使用 Docker 部署 MongoDB 时,容器默认不会自动生成 mongod.conf
配置文件,需要开发者手动映射云服务器上的配置文件至容器内部,因此,我们需要先创建一份配置文件,您可以任意选择该文件的存储目录,这里我们假设存储路径为 /mongo/mongod.conf
。
配置文件内容如下:
# 数据库存储路径
dbpath=/var/lib/mongodb
# 日志文件路径
logpath=/var/log/mongodb/mongod.log
# 监听的端口
port=27017
# 允许所有的 IP 地址连接
bind_ip=0.0.0.0
# 启用日志记录
journal=true
# 启用身份验证
auth=true
🚨 注意 bind_ip
的设定非常重要,它使得我们能够远程连接数据库!
2. 创建 MongoDB 容器
使用如下 Docker 命令部署 MongoDB 容器:
docker run --name <your db name> \
-p <hostport>:27017 \
-v <config file address>:/etc/mongod.conf \
-v <dbpath>:/var/lib/mongodb \
-v <logpath>:/var/log/mongodb/mongod.log \
-d \
mongo \
--auth
请按照您的实际情况替换 <>
内的内容,在这条命令中,从上至下我们制定了:
- 容器名;
- 云服务器与容器内部的端口映射;
- 配置文件映射;
- 数据存储路径映射;
- 日志路径映射;
- 持久化后台运行;
- 镜像名称;
- 需要身份验证;
3. 创建身份信息
您需要使用 docker exec -it <your db name> mongosh
进入 MongoDB 数据库。
🚨 MongoDB v6 版本不再使用mongod
命令作为客户端,而使用mongosh
!
使用下面的命令创建管理员账户:
use admin
db.createUser({user: "<username>", pwd: "<password>", roles: [{role: "root", db: "admin"}]})
使用管理员账户进行身份验证:
mongo -u <admin> -p <password> --authenticationDatabase admin
创建数据库与普通账号:
use <database_name>
db.createUser({user: "<username>", pwd: "<password>", roles: [{role: "readWrite", db: "<database_name>"}]})
4. 对外开放端口
我们必须开放云服务器端口才能支持远程访问,为此我们需要先查看目前已开放端口(当前为 CentOS):
sudo firewall-cmd --list-all
然后开放目标端口,注意,需使用 --zone=docker
参数:
sudo firewall-cmd --zone=docker --add-port=<the port>/tcp --permanent
💡 默认情况下,CentOS 会使用 firewalld 防火墙来管理网络连接。每个连接/接口都被分配到一个特定的区域,例如public
、private
或docker
等。每个区域都具有一组默认的防火墙规则,用于控制该区域的网络流量。
最后,如果您使用的是阿里云,您需要登录阿里云控制台,手动在「安全组」一项开启目标端口!
5. 使用 Studio 3T 连接数据库
Studio 3T 是一个免费的 MongoDB GUI,当您下载完成后,您可以通过如下方式访问我们的数据库:
点击左上角 connect
图标,点击 New Connection
按钮:
在 URI 中填写 MongoDB URI:mongodb://<username>:<password>@<IP address>:<port>/<database name>
。
至此,您完成了 MongoDB 的部署,并成功通过 Studio 3T 进行远程连接!
6. 总结
在本篇文章中,我们介绍了如何使用 Docker 部署 v6 版本的 MongoDB 数据库,并使用 Studio 3T 远程连接。目前,很多记述该内容的文章要么不完整,要么不支持 MongoDB v6 版本,这使得部署 MongoDB v6 版本变得不那么轻松,希望我这篇文章能够帮助各位降低部署的难度。如果您在部署的过程中遇到困难,也欢迎您将困难和解决方案附加到评论中,以帮助其他人更方便的操作。
期待您关注我的公众号「前端乱步」,我会在这里定期分享有深度,体系化的科技内容。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。