在 CentOS 7 服务器上部署 MongoDB 数据库是一项常见且重要的任务,尤其对于需要高性能、可扩展性以及灵活数据模型的应用程序而言,MongoDB 作为一个基于文档的 NoSQL 数据库,因其易用性和强大的功能而广受欢迎,本文将为您提供一份详尽的、分步的指南,帮助您在 CentOS 7 系统上顺利完成 MongoDB Community Edition 的安装、基本配置以及安全加固。
准备工作
在开始安装之前,请确保您具备以下条件:
- 一台运行 CentOS 7 的服务器,拥有 root 权限或具有
sudo
权限的普通用户。 - 稳定的网络连接,以便从官方仓库下载软件包。
第一步:配置 MongoDB Yum 仓库
通过配置官方的 Yum 仓库来安装 MongoDB 是最为推荐的方式,它能确保您获取到最新、最稳定的软件版本,并简化后续的更新和维护过程。
我们需要在 /etc/yum.repos.d/
目录下创建一个以 .repo
结尾的仓库配置文件,这里以创建 mongodb-org-4.4.repo
文件为例(您可以根据需要替换为其他版本,如 5.0 或 6.0,只需修改文件名和内容中的版本号即可)。
使用您喜欢的文本编辑器(如 vi
或 nano
)来创建并编辑该文件:
sudo vi /etc/yum.repos.d/mongodb-org-4.4.repo
粘贴到文件中,然后保存并退出:
[mongodb-org-4.4] name=MongoDB Repository baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/4.4/x86_64/ gpgcheck=1 enabled=1 gpgkey=https://www.mongodb.org/static/pgp/server-4.4.asc
这段配置文件定义了仓库的名称、基础 URL、GPG 密钥检查(用于验证软件包的完整性)以及 GPG 密钥的地址。
第二步:安装 MongoDB Community Edition
仓库配置完成后,我们就可以使用 yum
命令来安装 MongoDB 了,执行以下命令,yum
会自动处理所有依赖关系:
sudo yum install -y mongodb-org
-y
参数会自动回答“yes”,从而在安装过程中跳过确认提示,实现自动化安装,此命令将安装以下核心组件:
mongodb-org-server
: MongoDB 数据库服务器守护进程。mongodb-org-mongos
: MongoDB Shard 进程。mongodb-org-shell
: MongoDB 交互式 Shell (mongosh)。mongodb-org-tools
: 包含一系列实用工具,如数据导入/导出工具。
第三步:启动并设置 MongoDB 开机自启
安装过程并不会自动启动 MongoDB 服务,您需要手动启动它,并将其设置为开机自启,以确保服务器重启后数据库能正常运行。
启动 MongoDB 服务:
sudo systemctl start mongod
设置开机自启:
sudo systemctl enable mongod
验证服务状态:
您可以使用以下命令来检查 MongoDB 服务是否正在成功运行:
sudo systemctl status mongod
如果输出中显示
active (running)
,则表示服务已成功启动。
第四步:验证安装并连接数据库
为了确认安装无误,我们可以通过 MongoDB Shell 连接到数据库实例。
在终端中输入以下命令:
mongosh
如果连接成功,您将进入 MongoDB 的交互式 Shell 界面,提示符通常为 >
,在 Shell 中,您可以执行一些简单的命令来验证:
- 查看当前数据库版本:
db.version()
- 执行一个简单的 ping 命令测试连接:
db.runCommand('ping')
如果这些命令都返回了预期的结果(如版本号和一个包含 “ok: 1” 的文档),那么恭喜您,MongoDB 已经成功安装并运行了,输入 exit
即可退出 Shell。
第五步:配置防火墙(可选,用于远程访问)
默认情况下,MongoDB 监听在本地回环地址(0.0.1
)上,仅允许本地连接,如果您需要从其他服务器或应用程序远程访问此数据库,需要进行两项配置:修改网络绑定地址和配置防火墙规则。
警告: 开启远程访问会带来安全风险,请务必配合身份验证和网络安全策略(如 VPN)使用。
修改网络绑定:
编辑 MongoDB 的配置文件/etc/mongod.conf
:sudo vi /etc/mongod.conf
找到
net
部分,将bindIp
的值修改为0.0.0
或服务器的具体 IP 地址。0.0.0
表示监听所有网络接口。# network interfaces net: port: 27017 bindIp: 0.0.0.0 # 修改为此值
保存文件后,重启 MongoDB 服务使配置生效:
sudo systemctl restart mongod
配置 CentOS 7 防火墙:
CentOS 7 默认使用firewalld
作为防火墙管理工具,您需要开放 MongoDB 的默认端口27017
。以下命令表格列出了所需操作:
命令 | 描述 |
---|---|
sudo firewall-cmd --zone=public --add-port=27017/tcp --permanent | 永久地在 public 区域中开放 TCP 27017 端口 |
sudo firewall-cmd --reload | 重新加载防火墙配置,使新规则立即生效 |
执行完这两条命令后,外部主机就可以通过网络访问您的 MongoDB 数据库了。
第六步:启用身份验证(强烈推荐)
为了保障数据库安全,启用身份验证是至关重要的一步,这将要求所有用户在连接和操作数据库前必须提供有效的用户名和密码。
创建管理员用户:
在未启用认证的情况下连接到数据库,并创建一个具有管理员权限的用户。mongosh
在 Shell 中执行:
use admin db.createUser({ user: "myAdmin", pwd: passwordPrompt(), // 或者直接写入密码 'your_secure_password' roles: [ { role: "userAdminAnyDatabase", db: "admin" }, "readWriteAnyDatabase" ] })
这将创建一个名为
myAdmin
的用户,该用户拥有管理任何数据库用户和读写任何数据库的权限。passwordPrompt()
会安全地提示您输入密码。启用认证:
再次编辑/etc/mongod.conf
文件,在文件末尾添加security
部分:sudo vi /etc/mongod.conf
security: authorization: enabled
重启服务:
保存配置文件后,重启 MongoDB 服务以启用身份验证。sudo systemctl restart mongod
至此,您的 MongoDB 数据库已经完成了安装、远程访问配置和安全加固,之后连接数据库时,就需要提供认证信息,
mongosh -u "myAdmin" -p --authenticationDatabase "admin"
相关问答 FAQs
问题 1:安装过程中提示 GPG 密钥验证失败怎么办?
解答: 这个错误通常意味着系统的 GPG 密钥环中没有 MongoDB 的公钥,导致 yum
无法验证软件包的签名,解决方法是手动导入 MongoDB 的官方 GPG 密钥,您可以执行以下命令来导入(请确保版本号与您在仓库文件中配置的一致):
sudo rpm --import https://www.mongodb.org/static/pgp/server-4.4.asc
执行完毕后,再次运行 sudo yum install -y mongodb-org
命令即可正常安装。
问题 2:忘记 MongoDB 管理员密码了,如何重置?
解答: 如果忘记了管理员密码,可以通过暂时禁用身份验证来重置,请按照以下安全步骤操作:
停止 MongoDB 服务:
sudo systemctl stop mongod
编辑配置文件,禁用认证:
打开/etc/mongod.conf
,找到security.authorization: enabled
这一行,在前面加上 将其注释掉,或者直接删除整个security
部分,保存文件。重启 MongoDB 服务:
sudo systemctl start mongod
无密码连接并重置密码:
mongosh
连接后,切换到admin
数据库并使用db.updateUser()
方法更新密码:use admin db.updateUser("myAdmin", { pwd: "new_secure_password" })
将
"myAdmin"
替换为您的用户名,"new_secure_password"
替换为新的密码。恢复认证并重启服务:
再次编辑/etc/mongod.conf
,取消对security.authorization: enabled
的注释(或重新添加),保存文件,重启服务:sudo systemctl restart mongod
现在您就可以使用新密码重新连接数据库了。
【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!
发表回复