使用 Docker 部署 RabbitMQ 并實現數據持久化

非常好!以下是一份完整的 Docker 部署 RabbitMQ 的博客文檔,包含從安裝到問題排查的詳細步驟。你可以直接將其發布到博客中。


使用 Docker 部署 RabbitMQ 并實現數據持久化

RabbitMQ 是一個開源的消息隊列系統,廣泛應用于分布式系統中。使用 Docker 部署 RabbitMQ 可以快速搭建開發或生產環境,同時通過掛載卷實現數據持久化。本文將詳細介紹如何使用 Docker 部署 RabbitMQ,并解決常見問題。


目錄

  1. 環境準備
  2. 部署 RabbitMQ
    • 使用 Docker 命令部署
    • 使用 Docker Compose 部署
  3. 創建管理員用戶
  4. 驗證部署
  5. 數據持久化
  6. 常見問題排查
  7. 總結

環境準備

1. 安裝 Docker

確保已安裝 Docker。如果未安裝,請參考 Docker 官方文檔 進行安裝。

2. 安裝 Docker Compose

確保已安裝 Docker Compose。如果未安裝,請參考 Docker Compose 官方文檔 進行安裝。

3. 創建數據目錄

在宿主機上創建目錄,用于存儲 RabbitMQ 的數據和日志:

mkdir -p /home/middleware/rabbitmq/data
mkdir -p /home/middleware/rabbitmq/logs

部署 RabbitMQ

使用 Docker 命令部署

運行以下命令啟動 RabbitMQ 容器:

docker run -d \--hostname rabbitmq-node1 \  # 設置 RabbitMQ 節點的主機名--name rabbitmq \            # 容器名稱-p 5672:5672 \              # RabbitMQ 的 AMQP 端口-p 15672:15672 \            # RabbitMQ 管理界面端口-v /home/middleware/rabbitmq/data:/var/lib/rabbitmq \  # 掛載數據目錄-v /home/middleware/rabbitmq/logs:/var/log/rabbitmq \  # 掛載日志目錄rabbitmq:management         # 使用帶管理插件的 RabbitMQ 鏡像

使用 Docker Compose 部署

創建 docker-compose.yml 文件:

version: '3'
services:rabbitmq:image: rabbitmq:managementcontainer_name: rabbitmqhostname: rabbitmq-node1ports:- "5672:5672"- "15672:15672"volumes:- /home/middleware/rabbitmq/data:/var/lib/rabbitmq- /home/middleware/rabbitmq/logs:/var/log/rabbitmqenvironment:- RABBITMQ_DEFAULT_USER=admin- RABBITMQ_DEFAULT_PASS=admin123restart: always

運行以下命令啟動服務:

docker-compose up -d

創建管理員用戶

默認的 guest 用戶只能在本地訪問。為了安全性和更好的管理,建議創建一個新的管理員用戶。

1. 進入 RabbitMQ 容器

docker exec -it rabbitmq bash

2. 創建用戶

創建一個用戶名為 admin,密碼為 admin123 的用戶:

rabbitmqctl add_user admin admin123

3. 設置用戶標簽

為用戶分配 administrator 標簽,使其具有管理員權限:

rabbitmqctl set_user_tags admin administrator

4. 設置用戶權限

為用戶設置權限,允許其訪問所有虛擬主機(vhost)和資源:

rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"

5. 刪除默認的 guest 用戶(可選)

為了安全性,建議刪除默認的 guest 用戶:

rabbitmqctl delete_user guest

驗證部署

  1. 訪問 RabbitMQ 管理界面

    • 打開瀏覽器,訪問 http://<服務器IP>:15672
    • 使用新創建的管理員用戶(如 admin)登錄。
  2. 檢查掛載的目錄

    • 查看 /home/middleware/rabbitmq/data,確認消息數據已保存。
    • 查看 /home/middleware/rabbitmq/logs,確認日志文件已保存。
  3. 測試數據持久化

    • 在 RabbitMQ 管理界面中創建隊列或發送消息。
    • 停止并刪除容器:
      docker stop rabbitmq
      docker rm rabbitmq
      
    • 重新啟動容器,檢查隊列和消息是否仍然存在。

數據持久化

通過掛載宿主機目錄到容器中,可以實現 RabbitMQ 數據的持久化:

  • 數據目錄/home/middleware/rabbitmq/data 掛載到 /var/lib/rabbitmq,用于存儲消息數據。
  • 日志目錄/home/middleware/rabbitmq/logs 掛載到 /var/log/rabbitmq,用于存儲日志文件。

常見問題排查

1. 無法訪問管理界面

  • 檢查容器是否運行
    docker ps
    
  • 檢查端口映射
    docker port rabbitmq
    
  • 檢查防火墻和安全組
    • 確保服務器的防火墻開放了 15672 端口。
    • 如果是云服務器,檢查安全組規則。

2. 數據未持久化

  • 檢查掛載目錄權限
    sudo chmod -R 775 /home/middleware/rabbitmq/data
    sudo chown -R 999:999 /home/middleware/rabbitmq/data
    

3. RabbitMQ 管理插件未啟用

  • 進入容器并啟用插件
    docker exec -it rabbitmq bash
    rabbitmq-plugins enable rabbitmq_management
    

4. .erlang.cookie 文件權限問題

如果 RabbitMQ 啟動失敗并提示 .erlang.cookie 文件權限問題,運行以下命令修復:

sudo chmod 600 /home/middleware/rabbitmq/data/.erlang.cookie
sudo chown 999:999 /home/middleware/rabbitmq/data/.erlang.cookie

5. docker-compose 權限問題

如果運行 docker-compose up -d 時提示權限不足,運行以下命令修復:

sudo chmod +x /usr/local/bin/docker-compose

總結

通過 Docker 部署 RabbitMQ 可以快速搭建消息隊列服務,同時通過掛載卷實現數據持久化。本文詳細介紹了部署步驟、數據持久化方法以及常見問題的排查方法。希望這篇文檔能幫助你順利部署 RabbitMQ!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/897075.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/897075.shtml
英文地址,請注明出處:http://en.pswp.cn/news/897075.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

springboot429-基于springboot的教務管理系統(源碼+數據庫+純前后端分離+部署講解等)

&#x1f495;&#x1f495;作者&#xff1a; 愛笑學姐 &#x1f495;&#x1f495;個人簡介&#xff1a;十年Java&#xff0c;Python美女程序員一枚&#xff0c;精通計算機專業前后端各類框架。 &#x1f495;&#x1f495;各類成品Java畢設 。javaweb&#xff0c;ssm&#xf…

my學習網址

文章目錄 1.軟件版本管控GIT學習網站大全1官方文檔類2在線教程類3互動學習類4問答社區類 Linux學習網址1、 Linux命令行與shell腳本編程大全 1.軟件版本管控 GIT學習網站大全 廖雪峰網站 以下為你推薦不同類型的學習Git的網站&#xff1a; 1官方文檔類 Git官方文檔 網址&am…

Best practice-生產環境中加鎖的最佳實踐

什么是死鎖&#xff1f; 場景&#xff1a;圖書館有兩個相鄰的儲物柜&#xff08;柜子A和柜子B&#xff09;&#xff0c;小明和小紅需要同時使用這兩個柜子才能完成借書流程。 互斥資源 每個柜子只有一把鑰匙&#xff0c;且一次只能被一人使用&#xff08;資源不可共享&#x…

極狐GitLab 17.9 正式發布,40+ DevSecOps 重點功能解讀【四】

GitLab 是一個全球知名的一體化 DevOps 平臺&#xff0c;很多人都通過私有化部署 GitLab 來進行源代碼托管。極狐GitLab 是 GitLab 在中國的發行版&#xff0c;專門為中國程序員服務。可以一鍵式部署極狐GitLab。 學習極狐GitLab 的相關資料&#xff1a; 極狐GitLab 官網極狐…

黃昏時間戶外街拍人像Lr調色教程,手機濾鏡PS+Lightroom預設下載!

調色介紹 黃昏時分有著獨特而迷人的光線&#xff0c;使此時拍攝的人像自帶一種浪漫、朦朧的氛圍 。通過 Lr 調色&#xff0c;可以進一步強化這種特質并根據不同的風格需求進行創作。Lr&#xff08;Lightroom&#xff09;作為專業的圖像后期處理軟件&#xff0c;提供了豐富的調色…

Spring Boot 項目中 Redis 常見問題及解決方案

目錄 緩存穿透緩存雪崩緩存擊穿Redis 連接池耗盡Redis 序列化問題總結 1. 緩存穿透 問題描述 緩存穿透是指查詢一個不存在的數據&#xff0c;由于緩存中沒有該數據&#xff0c;請求會直接打到數據庫上&#xff0c;導致數據庫壓力過大。 解決方案 緩存空值&#xff1a;即使…

信息系統項目管理師--整合管理

信息系統項目管理師–整合管理

關于tomcat使用中瀏覽器打開index.jsp后中文顯示不正常是亂碼,但英文正常的問題

如果是jsp文件就在首行加 “<% page language"java" contentType"text/html; charsetUTF-8" pageEncoding"UTF-8" %>” 如果是html文件 在head標簽加入&#xff1a; <meta charset"UTF-8"> 以jsp為例子&#xff0c;我們…

微服務的春天:基于Spring Boot的架構設計與實踐

微服務的春天:基于Spring Boot的架構設計與實踐 在如今的技術領域,微服務架構儼然成為了解決復雜系統開發與運維挑戰的關鍵利器。作為一名資深運維和自媒體創作者,筆名Echo_Wish,我將深入探討基于Spring Boot的微服務架構設計,結合實例代碼說明觀點,希望能為大家帶來啟發…

JVM參數調整

一、內存相關參數 1. 堆內存控制 -Xmx&#xff1a;最大堆內存&#xff08;如 -Xmx4g&#xff0c;默認物理內存1/4&#xff09;。-Xms&#xff1a;初始堆內存&#xff08;建議與-Xmx相等&#xff0c;避免動態擴容帶來的性能波動&#xff09;。-Xmn&#xff1a;新生代大小&…

AVM 環視拼接 魚眼相機

https://zhuanlan.zhihu.com/p/651306620 AVM 環視拼接方法介紹 從內外參推導IPM變換方程及代碼實現&#xff08;生成AVM環視拼接圖&#xff09;_avm拼接-CSDN博客 經典文獻閱讀之--Extrinsic Self-calibration of the Surround-view System: A Weakly... (環視系統的外參自…

【哇! C++】類和對象(三) - 構造函數和析構函數

目錄 一、構造函數 1.1 構造函數的引入 1.2 構造函數的定義和語法 1.2.1 無參構造函數&#xff1a; 1.2.2 帶參構造函數 1.3 構造函數的特性 1.4 默認構造函數 二、析構函數 2.1 析構函數的概念 2.2 特性 如果一個類中什么成員都沒有&#xff0c;簡稱為空類。 空類中…

【五.LangChain技術與應用】【11.LangChain少樣本案例模板:小數據下的AI訓練】

深夜的創業孵化器里,你盯著屏幕上的醫療AI項目,手里攥著僅有的97條標注數據——這是某三甲醫院心內科攢了三年的罕見病例。投資人剛剛發來最后通牒:“下周demo要是還分不清心肌炎和感冒,就撤資!” 這時你需要掌握的不是更多數據,而是讓每個樣本都變成會復制的孫悟空的毫毛…

2005-2019年各省城鎮人口數據

2005-2019年各省城鎮人口數據 1、時間&#xff1a;2005-2019年 2、來源&#xff1a;國家統計局、統計年鑒 3、指標&#xff1a;地區、年份、城鎮人口(萬人) 4、范圍&#xff1a;31省 5、指標解釋&#xff1a;?城鎮人口是指居住在城市、集鎮的人口&#xff0c;主要依據人群…

Anaconda 部署 DeepSeek

可以通過 Anaconda 環境部署 DeepSeek 模型&#xff0c;但需結合 PyTorch 或 TensorFlow 等深度學習框架&#xff0c;并手動配置依賴項。 一、Anaconda 部署 DeepSeek 1. 創建并激活 Conda 環境 conda create -n deepseek python3.10 # 推薦 Python 3.8-3.10 conda activate…

Python 面向對象高級編程-定制類

目錄 __str__ __iter__ __getitem__ __getattr__ __call__ 小結 看到類似__slots__這種形如__xxx__的變量或者函數名就要注意&#xff0c;這些在Python中是有特殊用途的。 __slots__我們已經知道怎么用了&#xff0c;__len__()方法我們也知道是為了能讓class作用于len()…

MCP與RAG:增強大型語言模型的兩種路徑

引言 近年來&#xff0c;大型語言模型&#xff08;LLM&#xff09;在自然語言處理任務中展現了令人印象深刻的能力。然而&#xff0c;這些模型的局限性&#xff0c;如知識過時、生成幻覺&#xff08;hallucination&#xff09;等問題&#xff0c;促使研究人員開發了多種增強技…

IDEA Generate POJOs.groovy 踩坑小計 | 生成實體 |groovy報錯

一、無法生成注釋或生成的注釋是null 問題可能的原因&#xff1a; 1.沒有從表里提取注釋信息&#xff0c;修改def calcFields(table)方法即可 def calcFields(table) {DasUtil.getColumns(table).reduce([]) { fields, col ->def spec Case.LOWER.apply(col.getDataType().…

ue5.5崩潰報gpu錯誤快速修復注冊表命令方法

網上已經有很多方法了&#xff0c;自己寫了個regedit比處理dos批處理命令&#xff0c;啟動時需要win 管理員身份拷貝后&#xff0c;將以下代碼&#xff0c;保存為 run.bat格式批處理文件&#xff0c;右鍵鼠標&#xff0c;在彈出菜單中&#xff0c;選擇用管理員身份運行。即可。…

能量石[算法題]

題目來源&#xff1a;第十五屆藍橋杯大賽軟件賽省賽Java 大學 B 組&#xff08;算法題&#xff09; 可以參考一下&#xff0c;本人也是比較菜 不喜勿噴&#xff0c;求求求 import java.util.Scanner;?public class Main {public static void main(String[] args) {Scanner s…