本文档介绍如何使用 Docker Compose 部署 Rabbit 消息服务。
- Docker 20.10+
- Docker Compose 2.0+
docker build -t rabbit-local:latest .在 deploy/server/docker 目录下创建 datasource 目录(如果使用文件存储模式):
cd deploy/server/docker
mkdir -p datasource创建 .env 文件来自定义配置:
cat > .env << EOF
# 端口配置
RABBIT_HTTP_PORT=8080
RABBIT_GRPC_PORT=9090
# 环境配置
MOON_RABBIT_ENVIRONMENT=PROD
MOON_RABBIT_ENABLE_SWAGGER=true
MOON_RABBIT_ENABLE_METRICS=true
# JWT 配置
MOON_RABBIT_JWT_SECRET=your-secret-key
MOON_RABBIT_JWT_EXPIRE=600s
MOON_RABBIT_JWT_ISSUER=rabbit
# 数据库配置(如果使用数据库存储模式)
MOON_RABBIT_USE_DATABASE=false
MOON_RABBIT_MAIN_HOST=mysql
MOON_RABBIT_MAIN_DATABASE=rabbit
MOON_RABBIT_MAIN_USERNAME=root
MOON_RABBIT_MAIN_PASSWORD=your_password
# Swagger 认证
MOON_RABBIT_SWAGGER_BASIC_AUTH_ENABLED=true
MOON_RABBIT_SWAGGER_BASIC_AUTH_USERNAME=moon.rabbit
MOON_RABBIT_SWAGGER_BASIC_AUTH_PASSWORD=rabbit.swagger
# Metrics 认证
MOON_RABBIT_METRICS_BASIC_AUTH_ENABLED=true
MOON_RABBIT_METRICS_BASIC_AUTH_USERNAME=moon.rabbit
MOON_RABBIT_METRICS_BASIC_AUTH_PASSWORD=rabbit.metrics
EOFdocker-compose -f deploy/server/docker/docker-compose.yml up -ddocker-compose -f deploy/server/docker/docker-compose.yml up -ddocker-compose -f deploy/server/docker/docker-compose.yml stopdocker-compose -f deploy/server/docker/docker-compose.yml restart# 查看所有服务日志
docker-compose -f deploy/server/docker/docker-compose.yml logs
# 实时查看日志
docker-compose -f deploy/server/docker/docker-compose.yml logs -f
# 查看特定服务日志
docker-compose -f deploy/server/docker/docker-compose.yml logs rabbitdocker-compose -f deploy/server/docker/docker-compose.yml psdocker-compose -f deploy/server/docker/docker-compose.yml downdocker-compose -f deploy/server/docker/docker-compose.yml down -vservices:
rabbit:
image: rabbit-local:latest
container_name: rabbit
ports:
- "8080:8080" # HTTP 端口
- "9090:9090" # gRPC 端口
environment:
# 环境变量配置
volumes:
- ./datasource:/moon/datasource:ro # 数据源目录(只读)
networks:
- rabbit_network
command: ["run", "all"] # 启动命令- HTTP 端口:默认
8080,可通过RABBIT_HTTP_PORT环境变量修改 - gRPC 端口:默认
9090,可通过RABBIT_GRPC_PORT环境变量修改
./datasource:/moon/datasource:ro- 数据源文件目录(文件存储模式时使用,只读挂载)
服务运行在独立的 Docker 网络 rabbit_network 中,便于与其他服务通信。
可以通过修改 command 字段来改变启动行为:
# 默认启动所有服务
command: ["run", "all"]
# 仅启动 HTTP 服务
command: ["run", "http"]
# 仅启动 gRPC 服务
command: ["run", "grpc"]
# 仅启动 Job 服务
command: ["run", "job"]
# 使用配置文件
command: ["run", "all", "-c", "/moon/config/server.yaml"]
# 使用数据库存储模式
command: ["run", "all", "--use-database", "true", "--main-host", "mysql"]使用默认配置即可,数据会存储在 ./datasource 目录中。
需要修改 docker-compose.yml 或使用环境变量:
方式一:修改 docker-compose.yml
services:
rabbit:
environment:
- MOON_RABBIT_USE_DATABASE=true
- MOON_RABBIT_MAIN_HOST=mysql
- MOON_RABBIT_MAIN_DATABASE=rabbit
- MOON_RABBIT_MAIN_USERNAME=root
- MOON_RABBIT_MAIN_PASSWORD=your_password
command: ["run", "all", "--use-database", "true"]方式二:使用 .env 文件
在 .env 文件中设置相应的环境变量。
如果需要连接 MySQL 数据库,可以在 docker-compose.yml 中添加 MySQL 服务:
version: '3.8'
services:
mysql:
image: mysql:8.0
container_name: rabbit_mysql
environment:
MYSQL_ROOT_PASSWORD: your_password
MYSQL_DATABASE: rabbit
volumes:
- mysql_data:/var/lib/mysql
networks:
- rabbit_network
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
interval: 10s
timeout: 5s
retries: 5
rabbit:
image: rabbit-local:latest
container_name: rabbit
depends_on:
mysql:
condition: service_healthy
ports:
- "${RABBIT_HTTP_PORT:-8080}:8080"
- "${RABBIT_GRPC_PORT:-9090}:9090"
environment:
- MOON_RABBIT_USE_DATABASE=true
- MOON_RABBIT_MAIN_HOST=mysql
- MOON_RABBIT_MAIN_DATABASE=rabbit
- MOON_RABBIT_MAIN_USERNAME=root
- MOON_RABBIT_MAIN_PASSWORD=your_password
networks:
- rabbit_network
command: ["run", "all", "--use-database", "true"]
networks:
rabbit_network:
driver: bridge
volumes:
mysql_data:容器内置了健康检查功能,Docker Compose 会自动监控服务健康状态:
# 查看健康状态
docker-compose -f deploy/server/docker/docker-compose.yml ps健康检查配置:
- 检查命令:
/usr/local/bin/rabbit version - 检查间隔:30 秒
- 超时时间:10 秒
- 重试次数:3 次
- 启动等待期:40 秒
docker-compose -f deploy/server/docker/docker-compose.yml logs rabbitdocker-compose -f deploy/server/docker/docker-compose.yml psdocker-compose -f deploy/server/docker/docker-compose.yml exec rabbit sh# 测试 HTTP 健康检查
curl http://localhost:8080/health
# 测试版本信息
docker-compose -f deploy/server/docker/docker-compose.yml exec rabbit /usr/local/bin/rabbit version-
端口被占用
- 检查端口是否被其他服务占用:
lsof -i :8080 - 修改
.env文件中的端口配置
- 检查端口是否被其他服务占用:
-
容器无法启动
- 查看日志:
docker-compose logs rabbit - 检查配置文件格式是否正确
- 查看日志:
-
数据库连接失败
- 确认 MySQL 服务已启动
- 检查数据库连接参数是否正确
- 确认网络连接正常
- 使用环境变量文件:将敏感信息存储在
.env文件中,并确保不被提交到版本控制 - 配置资源限制:在
docker-compose.yml中添加资源限制 - 使用数据库存储:生产环境建议使用数据库存储模式
- 配置日志收集:配置日志驱动和日志轮转
- 网络安全:使用内部网络,避免暴露不必要的端口
services:
rabbit:
deploy:
resources:
limits:
cpus: '1.0'
memory: 512M
reservations:
cpus: '0.5'
memory: 256Mservices:
rabbit:
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"- 完整的配置选项请参考主 README 文档
- Docker Compose 官方文档:https://docs.docker.com/compose/
- 环境变量列表请参考主 README 中的环境变量部分