以成本优势为凭借的那样的轻型量应用服务器,以及具备即开即用特性的那般的轻型量应用服务器,已然成为开发者用于部署个人项目,还有用于搭建测试环镜的首选计算资源。
能在Linux环境当中,借助Docker容器化技术,去高效地完成NoSQL数据库的部署以及运维工作。
在主流Linux的发行版本,像CentOS 7.9或者Ubuntu 22.04这样的云服务器之上,本文会详细地去阐述借助Docker来搭建MongoDB环境,并且实操指导会围绕着域名注册、服务器配置以及生产级优化来展开。
一、轻量应用服务器与MongoDB的适配性分析
中小规模的MongoDB实例,其支撑所需,可以由轻量应用服务器来达成,像2核4G内存和60GB SSD系统盘这样的配置,就是该轻量应用服务器所具有的配置情况。
将MongoDB部署于Linux操作系统之上,和Windows环境相比,会得到更为良好的系统资源利用率还有稳定性。
运用Docker开展容器化部署这项操作,不但能够达成环境隔离这一目的,而且还能够使版本升级以及迁移流程得以简化,能恰到好处地满足开发测试、个人学习以及小型Web应用后端对数据长期储备的需求。
二、服务器初始化与域名准备
1. 服务器选购与登录
于云厂商那儿购置轻量应用服务器,挑选CentOS 7.9镜像,或者挑选Ubuntu 22.04镜像。
经过重置服务器密码之后,借助SSH客户端(像Termius、Xshell这样的)开展登录操作:
ssh root@你的服务器公网IP
2. 域名注册与解析(可选但推荐)
Get-Service -Name MongoDB
去可以进行域名注册的地方,买下一个域名,就像那个yourdomain.com。
于DNS的管理后台之处,去添加A记录,把mongo.yourdomain.com或者www.yourdomain.com加以解析,使其指向服务器的公网IP地址。
注意:域名解析通常需要几分钟至几小时生效。
三、Docker环境搭建
使用官方脚本一键安装Docker,并配置开机自启:
# 更新系统包
yum update -y # CentOS
# apt update && apt upgrade -y # Ubuntu
# 安装Docker
curl -fsSL https://get.docker.com | bash -s docker
# 启动Docker并设置开机自启
systemctl enable docker --now
# 验证安装
docker --version
storage:dbPath: D:datadbjournal:enabled: truesystemLog:destination: filepath: D:datalogmongod.loglogAppend: truenet:port: 27017bindIp: 0.0.0.0 # 允许所有IP访问(生产环境需限制)
四、Docker部署MongoDB容器
1. 拉取官方镜像
选择指定版本的MongoDB镜像,确保稳定性和兼容性:
docker pull mongo:6.0
Restart-Service MongoDB
2. 创建数据持久化目录
于宿主机那儿创建目录,此目录是用来放置数据库文件以及配置文件的,其目的在于避免容器被删除之后数据出现丢失状况:
mkdir -p /data/mongo/db
mkdir -p /data/mongo/config
3. 运行MongoDB容器
以下命令,会启动一个容器,这个容器叫作mongo-server,并且会进行关键配置。
docker run -d
--name mongo-server
--restart always
-p 27017:27017
-e MONGO_INITDB_ROOT_USERNAME=admin
-e MONGO_INITDB_ROOT_PASSWORD=你的强密码
-v /data/mongo/db:/data/db
-v /data/mongo/config:/etc/mongo
mongo:6.0 --auth
"C:Program FilesMongoDBServer6.0binmongo.exe"
参数解析:
-d:后台运行容器。
“--restart always”,这一指令发挥的作用是,当容器出现异常退出的状况,或者服务器进行重启操作时,它能够实现自动启动的功能。
通过-p 27017:27017的操作,是对宿主机的27017端口朝着容器进行映射这项行为。
-e:设置环境变量,此处用于创建初始管理员账号。

-v:数据卷挂载,实现数据持久化。
> show dbsadmin 0.000GBconfig 0.000GBlocal 0.000GB
--auth:启动认证,必须使用账号密码连接。
五、防火墙与安全组配置
为了保障数据库安全,需精细化配置网络访问策略。
1. 云服务器安全组(必须操作)
迈向云厂商控制台进行登录操作,寻觅出属于你的轻量应用服务器实例,针对其绑定的防火墙规则做出修改动作(或者是安全组要完成此操作)。
use testdbdb.createCollection("users")db.users.insertOne({name: "Alice", age: 25})db.users.find()
把原有的,存在着这样一个要素的,也就是0.0.0.0/0(此表示意味着允许所有的IP都能够进行访问)的,针对于27017端口的入站的规则,将其进行删除操作,或者对其添加注释以使其不生效。
增添一条规则,此规则中协议端口是TCP:27017,来源IP设定为你当下正在使用的公网IP,比如像123.123.123.123/32这样的形式。
这能极大降低数据库被恶意扫描的风险。
2. Linux内部防火墙(如有开启)
# 若使用firewalld(CentOS)
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="你的本地公网IP" port protocol="tcp" port="27017" accept'
firewall-cmd --reload
# 若使用iptables
iptables -A INPUT -s 你的本地公网IP -p tcp --dport 27017 -j ACCEPT
service iptables save
mongo.exe --host <服务器IP>
六、连接与基础验证
本地进行客户端工具(诸如MongoDB Shell)的安装,或者借助Docker命令直接去连接。
# 进入容器内部连接
docker exec -it mongo-server mongosh -u admin -p 你的强密码 --authenticationDatabase admin
# 或在宿主机安装mongosh后远程连接(需放通IP)
# mongosh "mongodb://admin:你的强密码@你的服务器公网IP:27017/?authSource=admin"
2. 基础操作测试
db.users.createIndex({name: 1})
// 显示所有数据库
show dbs
// 切换到test数据库
use test
// 插入一条数据
db.users.insertOne({name: "运维工程师", role: "DBA"})
// 查询数据
db.users.find()
七、性能优化与运维建议
1. 容器资源限制
要防止MongoDB把服务器资源用光,能够在启动容器之际添加资源限制参数:
docker run -d ... --cpus="1.5" --memory="2g" ... mongo:6.0
2. 索引优化
对于高频查询的字段,务必创建索引。
例如,为users集合的name字段创建索引:
db.users.createIndex({name: 1})
3. 定期备份
使用mongodump工具进行定时备份:
# 创建备份脚本 /usr/local/bin/backup_mongo.sh
#!/bin/bash
docker exec mongo-server mongodump -u admin -p 你的强密码 --authenticationDatabase admin --out /data/backup/$(date +%Y%m%d)
# 添加crontab任务,每天凌晨2点执行
0 2 /bin/bash /usr/local/bin/backup_mongo.sh
八、常见问题排查
遭遇连接失败状况:第一步要查看安全组以及防火墙是不是只对您的IP开放了,接着去验证容器运行是不是正常:通过执行命令“docker ps | grep mongo-server”来进行。
const { MongoClient } = require('mongodb');const uri = "mongodb://:27017";const client = new MongoClient(uri);async function run() {await client.connect();const database = client.db("testdb");const collection = database.collection("users");await collection.insertOne({name: "Bob"});}run().catch(console.dir);
验证失败:核查连接字符串里的用户名、密码以及authSource是否准确无误,特别要留意特殊字符得进行URL编码这件事。
性能迟缓>通过docker stats代码>对容器资源使用率予以查看,运用db.currentOp()代码>以及db.setProfilingLevel(1)代码>来对慢速查询进行定位。
经由上述步骤,你已然成功,在轻量应用服务器之上,基于Linux以及Docker,搭建了一个具备安全性、可进行运维操作的MongoDB环境。
把域名解析给结合起来,再加上进行合理的权限控制,以此就能为你的个人项目或者小型应用供应稳定可靠的数据服务了。

Comments NOTHING