麒麟Linux系统安装配置MongoDB 6.0全攻略:从仓库适配到安全部署

麒麟Linux系统安装配置MongoDB 6.0全攻略:从仓库适配到安全部署 1. 项目缘起为什么要在麒麟Linux上折腾MongoDB最近接手了一个新项目后端数据模型变动频繁传统的关系型数据库在频繁修改表结构时显得有点力不从心。团队讨论后决定引入文档型数据库MongoDB来应对这种灵活多变的场景。我们开发环境的主力是Ubuntu部署环境则清一色是国产化的麒麟Linux操作系统。在Ubuntu上装MongoDBapt一条命令就搞定了但到了麒麟Linux这边事情就没那么简单了。麒麟Linux无论是基于Debian的社区版还是基于Red Hat的企业版如银河麒麟V10其软件仓库里通常不会直接提供MongoDB的官方包。直接去MongoDB官网下载你会发现官方主要提供的是针对RHEL/CentOS、Ubuntu、Debian等主流发行版的预编译包。这就意味着在麒麟系统上安装不能简单地“一键安装”需要我们手动处理依赖、配置和服务。这个过程虽然比常规Linux发行版多几个步骤但每一步都踩得稳反而能让你更清楚MongoDB在系统里是怎么“安家落户”的。这篇文章我就把在银河麒麟V10 SP1ARM架构和社区版x86_64架构上成功安装并配置MongoDB 6.0社区版的完整过程以及中间遇到的各种“坑”和解决方案详细记录下来。2. 安装前的核心准备理清系统与架构动手之前最忌讳的就是盲目开干。在麒麟Linux上安装任何软件第一步必须是摸清自家系统的“底细”。这直接决定了你后续要下载哪个安装包以及可能会遇到哪些依赖问题。2.1 确认系统版本与架构打开终端执行以下命令来获取关键信息# 查看操作系统名称和版本 cat /etc/os-release # 查看系统内核架构 uname -m对于银河麒麟V10/etc/os-release的输出通常会包含Kylin Linux Advanced Server release V10 (Sword)之类的信息并且NAME字段很可能就是Kylin Linux。而uname -m会告诉你CPU架构x86_64代表英特尔或AMD的64位处理器aarch64则代表ARM架构常见于飞腾、鲲鹏等国产CPU。为什么这步至关重要MongoDB官方为不同的Linux发行版和架构提供了不同的仓库配置和安装包。例如针对Red Hat系如CentOS使用.rpm包和yum仓库针对Debian系如Ubuntu使用.deb包和apt仓库。麒麟Linux的社区版通常基于Ubuntu/Debian而企业版如银河麒麟V10则更接近Red Hat/CentOS。如果你下载了错误的包类型比如在基于RPM的系统上尝试安装.deb包安装过程会直接失败。2.2 选择安装方式包管理器 vs 二进制包在麒麟Linux上主要有两种安装MongoDB的思路使用官方仓库推荐但需适配MongoDB为RHEL/CentOS 7/8/9和Ubuntu等提供了官方仓库。对于类RHEL的麒麟系统我们可以尝试适配CentOS的仓库对于类Debian的麒麟系统则尝试适配Ubuntu的仓库。这种方式能通过系统包管理器yum/dnf或apt进行安装、升级和管理最为规范。手动下载二进制压缩包直接从MongoDB官网下载对应架构的.tgz压缩包解压到指定目录如/usr/local/mongodb然后手动配置环境变量、数据目录、日志和服务。这种方式最灵活不受系统版本限制但所有维护工作都需要手动进行。对于生产环境我强烈推荐第一种方式。尽管需要一些适配工作但它能让MongoDB的集成度更高服务管理更便捷使用systemctl。本文也将以配置官方仓库并安装为例进行详细说明。如果你的系统版本实在无法适配官方仓库我会在最后补充二进制包安装的要点。2.3 安装必要的系统工具在开始之前确保你的系统已经安装了curl、gnupg等工具用于下载密钥和仓库文件。对于类RHEL系统银河麒麟V10sudo yum install -y curl gnupg2对于类Debian系统麒麟社区版sudo apt update sudo apt install -y curl gnupg3. 为麒麟Linux配置MongoDB官方仓库这是整个安装过程中最具挑战性但也最关键的一步。我们的目标是让系统的包管理器“认识”MongoDB的官方源。3.1 针对类RHEL系统银河麒麟V10的配置MongoDB为RHEL 8/9提供了官方仓库。由于银河麒麟V10的内核和基础库与CentOS 8较为接近我们可以尝试使用CentOS 8的仓库进行适配。首先创建MongoDB的仓库配置文件sudo vi /etc/yum.repos.d/mongodb-org-6.0.repo将以下内容粘贴进去。请注意这里我们使用的是el/8对应RHEL/CentOS 8的仓库地址。如果你的系统是类似RHEL 7的版本可能需要尝试el/7但MongoDB 6.0对glibc版本有要求RHEL 7可能不满足。[mongodb-org-6.0] nameMongoDB Repository baseurlhttps://repo.mongodb.org/yum/redhat/8/mongodb-org/6.0/x86_64/ # 如果系统是aarch64架构将上一行改为 # baseurlhttps://repo.mongodb.org/yum/redhat/8/mongodb-org/6.0/aarch64/ gpgcheck1 enabled1 gpgkeyhttps://www.mongodb.org/static/pgp/server-6.0.asc关键点解析baseurl: 这里指定了软件包的下载地址。你必须根据你的系统架构x86_64或aarch64修改路径。这是最容易出错的地方。gpgcheck1和gpgkey: 启用GPG签名检查确保下载的软件包来自MongoDB官方未被篡改。保存退出后清除yum缓存并重新建立元数据sudo yum clean all sudo yum makecache现在尝试搜索MongoDB包测试仓库是否配置成功sudo yum search mongodb-org如果能看到mongodb-org-server、mongodb-org-shell等包列表恭喜你仓库配置基本成功了。如果报错最常见的错误是baseurl指向的仓库路径不存在404错误。这时你需要再次确认你的麒麟系统版本到底更接近RHEL 7、8还是9并尝试调整baseurl中的版本号8改为7或9。3.2 针对类Debian系统麒麟社区版的配置如果你的麒麟系统是基于Ubuntu的配置过程会稍微标准一些。首先导入MongoDB的GPG公钥curl -fsSL https://www.mongodb.org/static/pgp/server-6.0.asc | sudo gpg --dearmor -o /usr/share/keyrings/mongodb-server-6.0.gpg接下来创建APT仓库源文件。你需要知道你的Ubuntu版本代号如20.04是focal22.04是jammy。可以通过lsb_release -cs查看。假设你的系统对应focalecho deb [ archamd64,arm64 signed-by/usr/share/keyrings/mongodb-server-6.0.gpg ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/6.0 multiverse | sudo tee /etc/apt/sources.list.d/mongodb-org-6.0.list对于ARM架构aarch64arch参数中必须包含arm64。更新APT包列表sudo apt update同样使用apt search mongodb-org来验证仓库是否添加成功。注意无论是哪种系统在配置仓库后执行update或makecache时可能会遇到“Release”文件签名无效或找不到的警告。只要不是导致整个更新失败的错误通常可以暂时忽略重点看后续是否能成功搜索和安装MongoDB包。4. 安装MongoDB 6.0社区版仓库配置妥当后安装本身反而成了最简单的步骤。4.1 执行安装命令对于类RHEL系统使用yum/dnfsudo yum install -y mongodb-org这个命令会安装mongodb-org这个元包它会自动拉取并安装以下核心组件mongodb-org-server:mongod守护进程核心服务。mongodb-org-mongos: 分片集群的路由服务。mongodb-org-shell:mongoshell客户端注意6.0版本默认安装的是mongosh一个更强大的新shell。mongodb-org-tools: 包含mongodump,mongorestore,mongoimport,mongoexport等工具。对于类Debian系统使用aptsudo apt install -y mongodb-org安装过程会输出大量信息显示正在下载和安装的包及其依赖。耐心等待完成即可。4.2 安装后的目录结构安装完成后MongoDB的主要文件会分布在系统的标准路径下了解这些路径对后续管理和排错很有帮助配置文件/etc/mongod.conf。这是MongoDB服务的主配置文件所有关键的路径、端口、安全设置都在这里。数据目录/var/lib/mongo。默认的数据库文件存储位置。日志目录/var/log/mongodb。默认的日志文件存储位置日志文件通常名为mongod.log。可执行文件/usr/bin/mongod,/usr/bin/mongos,/usr/bin/mongosh等。Systemd服务单元文件/usr/lib/systemd/system/mongod.serviceRHEL系或/lib/systemd/system/mongod.serviceDebian系。这是用systemctl管理MongoDB服务的依据。5. 关键配置调整与服务启动安装完成并不代表就能直接用了。默认配置可能不完全符合你的需求尤其是数据目录和日志目录的权限。5.1 检查并调整目录权限MongoDB服务默认会以mongod用户和mongod组的身份运行。你必须确保数据目录和日志目录的所有权和权限正确。首先检查目录是否存在以及当前权限ls -ld /var/lib/mongo /var/log/mongodb通常安装包会创建这些目录并设置好权限。但如果目录不存在或权限不对你需要手动处理# 创建目录如果不存在 sudo mkdir -p /var/lib/mongo /var/log/mongodb # 更改所有者为mongod用户和组 sudo chown -R mongod:mongod /var/lib/mongo /var/log/mongodb # 设置合适的权限例如755 sudo chmod 755 /var/lib/mongo /var/log/mongodb权限问题是最常见的启动失败原因之一。如果mongod进程没有写入数据目录或日志目录的权限服务会启动失败并在日志中报错。5.2 修改配置文件可选但推荐编辑配置文件/etc/mongod.conf你可以根据需要进行定制。一个最基础的关注点是绑定IP。默认配置可能只绑定到127.0.0.1这意味着只能从本机访问。如果你需要从其他服务器连接需要修改net.bindIp。sudo vi /etc/mongod.conf找到net部分net: port: 27017 bindIp: 127.0.0.1 # 修改为 0.0.0.0 以允许所有IP连接或指定IP列表安全警告将bindIp设置为0.0.0.0会使你的数据库暴露在网络上务必在防火墙中限制访问来源并尽快配置认证。生产环境切勿长期使用无认证的开放绑定。5.3 启动MongoDB服务并设置开机自启使用systemd来管理服务是标准做法。# 启动mongod服务 sudo systemctl start mongod # 检查服务状态确认是否运行正常 sudo systemctl status mongod # 如果状态显示为active (running)则设置开机自动启动 sudo systemctl enable mongod当执行sudo systemctl status mongod后你应该能看到绿色的“active (running)”字样并且下面没有红色的错误日志。这是服务成功启动的标志。5.4 验证安装与基本操作服务启动后进行一个简单的连接测试# 使用mongosh连接本地MongoDB实例默认端口27017 mongosh如果连接成功你会进入mongosh的交互式命令行界面提示符类似test。执行几个基本命令验证// 显示当前数据库 db // 显示所有数据库 show dbs // 创建一个名为‘mydb’的数据库实际上在插入数据前不会真正创建 use mydb // 在‘mycollection’集合中插入一条文档 db.mycollection.insertOne({name: 麒麟, type: OS}) // 查询刚插入的文档 db.mycollection.find()如果能顺利插入和查询数据说明MongoDB已经安装并运行成功。6. 防火墙与SELinux配置如启用如果你的服务器启用了防火墙如firewalld或SELinux需要额外配置以允许MongoDB通信。6.1 配置防火墙firewalld如果使用firewalld开放MongoDB默认的27017端口sudo firewall-cmd --zonepublic --add-port27017/tcp --permanent sudo firewall-cmd --reload验证端口是否开放sudo firewall-cmd --zonepublic --list-ports6.2 处理SELinuxSELinux可能会阻止mongod进程访问数据目录、日志目录或网络端口。如果系统启用了SELinux可通过sestatus命令查看并且你遇到了权限拒绝的错误即使文件系统权限正确也可能需要调整SELinux策略。一个相对简单但非生产环境最佳实践的临时解决方案是将SELinux设置为宽容模式以进行测试sudo setenforce 0但这只是临时生效重启后会恢复。要永久禁用不推荐或进行精细的SELinux策略配置需要更复杂的操作。对于生产环境建议根据审计日志ausearch或/var/log/audit/audit.log来添加正确的SELinux策略模块。7. 二进制包安装方式要点如果官方仓库方式因系统兼容性问题始终无法成功手动安装二进制包是可靠的备选方案。下载从MongoDB官网下载中心选择“TGZ”包并匹配你的系统架构x86_64或ARM64。解压tar -zxvf mongodb-linux-*.tgz -C /usr/local/创建软链接可选sudo ln -s /usr/local/mongodb-*/bin/* /usr/local/bin/方便命令行直接调用。创建数据和日志目录sudo mkdir -p /data/db /var/log/mongodb并设置权限可以创建一个专门的mongodb用户来运行。手动启动/usr/local/mongodb/bin/mongod --dbpath /data/db --logpath /var/log/mongodb/mongod.log --fork配置systemd服务这是将手动安装规范化的关键。你需要参照官方安装包生成的服务文件手动编写一个/etc/systemd/system/mongod.service文件指定正确的可执行文件路径、数据路径、日志路径和运行用户。然后通过systemctl daemon-reload加载之后就能用systemctl来管理了。手动安装的灵活性高但后续的版本升级、服务管理都需要你自己负责维护成本较高。8. 安装后的安全加固与基础运维安装并成功运行只是第一步。一个暴露在公网且没有认证的MongoDB实例是极其危险的。以下是最基本的安全措施启用身份认证这是必须的。编辑/etc/mongod.conf找到security部分取消注释并修改security: authorization: enabled重启服务后使用mongosh本地连接创建一个管理员用户use admin db.createUser({ user: myAdmin, pwd: passwordPrompt(), // 会交互式提示输入密码 roles: [ { role: userAdminAnyDatabase, db: admin }, readWriteAnyDatabase ] })之后连接都需要指定用户名密码mongosh -u myAdmin -p --authenticationDatabase admin。配置防火墙如前所述严格限制访问MongoDB端口的源IP地址仅允许应用服务器或管理终端的IP。定期更新关注MongoDB的安全公告定期通过包管理器更新到新版本。日志监控定期检查/var/log/mongodb/mongod.log关注警告和错误信息。备份策略即使是测试环境也应建立简单的备份习惯。可以使用mongodump进行定期逻辑备份mongodump --urimongodb://myAdmin:passwordlocalhost:27017 --out/backup/path/$(date %Y%m%d)在麒麟Linux上安装MongoDB核心难点在于系统与官方仓库的适配。这个过程迫使你去理解系统版本、架构、包管理机制和软件仓库的工作原理这本身就是一个很好的学习机会。一旦仓库配置成功后续的安装、配置、服务管理就与在其他主流Linux发行版上无异了。最关键的是不要被一开始的“404”或“GPG错误”吓退根据错误信息冷静分析调整仓库URL或系统标识问题总能解决。