以成本优势为凭借的那样的轻型量应用服务器,以及具备即开即用特性的那般的轻型量应用服务器,已然成为开发者用于部署个人项目,还有用于搭建测试环镜的首选计算资源。

能在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. 域名注册与解析(可选但推荐)

  1. 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

  1. storage:
  2. dbPath: D:datadb
  3. journal:
  4. enabled: true
  5. systemLog:
  6. destination: file
  7. path: D:datalogmongod.log
  8. logAppend: true
  9. net:
  10. port: 27017
  11. bindIp: 0.0.0.0 # 允许所有IP访问(生产环境需限制)

四、Docker部署MongoDB容器

1. 拉取官方镜像

选择指定版本的MongoDB镜像,确保稳定性和兼容性:

docker pull mongo:6.0

  1. 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

  1. "C:Program FilesMongoDBServer6.0binmongo.exe"

参数解析

-d:后台运行容器。

“--restart always”,这一指令发挥的作用是,当容器出现异常退出的状况,或者服务器进行重启操作时,它能够实现自动启动的功能。

通过-p 27017:27017的操作,是对宿主机的27017端口朝着容器进行映射这项行为。

-e:设置环境变量,此处用于创建初始管理员账号。

服务器MongoDB安装_轻量应用服务器_MongoDB安装教程

-v:数据卷挂载,实现数据持久化。

  1. > show dbs
  2. admin 0.000GB
  3. config 0.000GB
  4. local 0.000GB

--auth:启动认证,必须使用账号密码连接。

五、防火墙与安全组配置

为了保障数据库安全,需精细化配置网络访问策略。

1. 云服务器安全组(必须操作)

迈向云厂商控制台进行登录操作,寻觅出属于你的轻量应用服务器实例,针对其绑定的防火墙规则做出修改动作(或者是安全组要完成此操作)。

  1. use testdb
  2. db.createCollection("users")
  3. db.users.insertOne({name: "Alice", age: 25})
  4. 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

  1. 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. 基础操作测试

  1. 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”来进行。

  1. const { MongoClient } = require('mongodb');
  2. const uri = "mongodb://:27017";
  3. const client = new MongoClient(uri);
  4. async function run() {
  5. await client.connect();
  6. const database = client.db("testdb");
  7. const collection = database.collection("users");
  8. await collection.insertOne({name: "Bob"});
  9. }
  10. run().catch(console.dir);

验证失败:核查连接字符串里的用户名、密码以及authSource是否准确无误,特别要留意特殊字符得进行URL编码这件事。

性能迟缓>通过docker stats对容器资源使用率予以查看,运用db.currentOp()以及db.setProfilingLevel(1)来对慢速查询进行定位。

经由上述步骤,你已然成功,在轻量应用服务器之上,基于Linux以及Docker,搭建了一个具备安全性、可进行运维操作的MongoDB环境。

把域名解析给结合起来,再加上进行合理的权限控制,以此就能为你的个人项目或者小型应用供应稳定可靠的数据服务了。