
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或系統標識問題總能解決。