麦瓣健康麦瓣健康
首页
  • APP产品开发方案
  • 商业调查报告
  • 后端技术架构
  • Docker Compose部署指南
  • 技师端-功能模块与微服务对应关系
  • 数据库设计
  • 分布式事务一致性
  • 日志管理与配置
  • Netdata监控系统
  • 系统总览
  • 文档导航
  • 代码审计智能体
  • 测试生成智能体
  • 运维诊断智能体
  • APP测试智能体
  • API自动化测试多智能体协作系统
  • 项目规划
  • 开发工作手册
  • 开发周期管理
  • 任务看板总览
  • Week 3任务看板
  • Week 3周例会
  • Week 4任务看板
  • Week 5任务看板
  • Week 6任务看板
  • APP测试设备采购清单
  • 用户端APP
  • 用户端APP功能脑图
  • 技师端APP
  • 技师端APP功能脑图
  • 后台管理
  • 大数据屏幕
  • 技师端-账户系统需求明细
原型图(Demo)
GitHub
首页
  • APP产品开发方案
  • 商业调查报告
  • 后端技术架构
  • Docker Compose部署指南
  • 技师端-功能模块与微服务对应关系
  • 数据库设计
  • 分布式事务一致性
  • 日志管理与配置
  • Netdata监控系统
  • 系统总览
  • 文档导航
  • 代码审计智能体
  • 测试生成智能体
  • 运维诊断智能体
  • APP测试智能体
  • API自动化测试多智能体协作系统
  • 项目规划
  • 开发工作手册
  • 开发周期管理
  • 任务看板总览
  • Week 3任务看板
  • Week 3周例会
  • Week 4任务看板
  • Week 5任务看板
  • Week 6任务看板
  • APP测试设备采购清单
  • 用户端APP
  • 用户端APP功能脑图
  • 技师端APP
  • 技师端APP功能脑图
  • 后台管理
  • 大数据屏幕
  • 技师端-账户系统需求明细
原型图(Demo)
GitHub
  • 技术架构

    • 麦瓣健康后端技术架构文档
    • /Docker部署指南.html
    • 技师端功能模块与微服务对应关系
    • 数据库设计文档
    • 麦瓣健康 - 微服务分布式事务一致性设计方案
    • 日志管理与配置说明
    • Netdata 监控系统技术文档

Docker Compose 部署指南

概述

本文档介绍如何使用 Docker Compose 部署麦瓣健康后端微服务。

架构说明

┌─────────────────────────────────────────────────────────────┐
│                      Docker Network                          │
│                    (172.20.0.0/16)                          │
│                                                              │
│  ┌──────────────┐  ┌──────────────┐  ┌──────────────┐       │
│  │   Gateway    │  │    Admin     │  │     User     │       │
│  │  172.20.0.10 │  │  172.20.0.11 │  │  172.20.0.12 │       │
│  │    :8201     │  │    :8081     │  │    :8084     │       │
│  └──────────────┘  └──────────────┘  └──────────────┘       │
│                                                              │
│  ┌──────────────┐  ┌──────────────┐  ┌──────────────┐       │
│  │      IM      │  │    Nurse     │  │   Monitor    │       │
│  │  172.20.0.13 │  │  172.20.0.14 │  │  172.20.0.16 │       │
│  │    :8085     │  │    :8082     │  │    :8086     │       │
│  └──────────────┘  └──────────────┘  └──────────────┘       │
│                                                              │
│  ┌──────────────┐  ┌──────────────┐  ┌──────────────┐       │
│  │    Nacos     │  │  RabbitMQ    │  │   MongoDB    │       │
│  │  172.20.0.5  │  │  172.20.0.6  │  │  172.20.0.7  │       │
│  │    :8848     │  │ :5672/:15672 │  │    :27017    │       │
│  └──────────────┘  └──────────────┘  └──────────────┘       │
└─────────────────────────────────────────────────────────────┘
                              │
                              ▼
              ┌───────────────────────────────┐
              │        远程基础服务            │
              │        MySQL / Redis          │
              └───────────────────────────────┘

服务端口映射

服务容器端口宿主机端口固定 IP
Gateway82018201172.20.0.10
Admin80818081172.20.0.11
User80818084172.20.0.12
IM80818085172.20.0.13
Nurse80828082172.20.0.14
Monitor80818086172.20.0.16
Nacos88488848172.20.0.5
RabbitMQ (AMQP)56725672172.20.0.6
RabbitMQ (管理)1567215672172.20.0.6
MongoDB2701727017172.20.0.7

环境准备

1. 安装 Docker

# CentOS/RHEL
yum install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin

# Ubuntu/Debian
apt-get install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin

# 启动 Docker
systemctl start docker
systemctl enable docker

2. 登录阿里云容器镜像服务

docker login --username=<用户名> maiban-ack-registry.cn-beijing.cr.aliyuncs.com

3. 准备项目文件

# 克隆项目
git clone <仓库地址> /opt/maiban-center
cd /opt/maiban-center/backend

# 复制环境配置
cp .env.example .env

配置说明

环境变量配置 (.env)

# ==============================================
# Docker 镜像版本 (对应 git tag)
# ==============================================
IMAGE_VERSION=v0.1.0

# ==============================================
# 基础组件镜像版本 (以 base-* 标签触发生成)
# ==============================================
BASE_IMAGE_VERSION=base-2025.12.02-1207

# ==============================================
# MySQL 数据库配置 - 阿里云 RDS
# ==============================================
SPRING_DATASOURCE_URL=jdbc:mysql://your-rds-host:3306/maiban_health?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&useSSL=false
SPRING_DATASOURCE_USERNAME=your_username
SPRING_DATASOURCE_PASSWORD=your_password

# ==============================================
# Redis 配置 - 阿里云 Redis
# ==============================================
SPRING_DATA_REDIS_HOST=your-redis-host
SPRING_DATA_REDIS_PORT=6379
SPRING_DATA_REDIS_PASSWORD=your_password
SPRING_DATA_REDIS_DATABASE=0
# 如果使用本项目 docker-compose 启动了 Redis,推荐:
# SPRING_DATA_REDIS_HOST=redis
# SPRING_DATA_REDIS_PORT=6379
# SPRING_DATA_REDIS_PASSWORD=your_password

# ==============================================
# Nacos 配置中心
# ==============================================
SPRING_CLOUD_NACOS_DISCOVERY_SERVER_ADDR=your-nacos-host:8848
SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=your-nacos-host:8848
SPRING_CLOUD_NACOS_USERNAME=nacos
SPRING_CLOUD_NACOS_PASSWORD=nacos
# 如果使用本项目 docker-compose 启动了 Nacos,推荐:
# SPRING_CLOUD_NACOS_DISCOVERY_SERVER_ADDR=nacos:8848
# SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=nacos:8848

# ==============================================
# MongoDB 配置
# ==============================================
SPRING_DATA_MONGODB_URI=mongodb://admin:password@your-mongo-host:27017/maiban_health
SPRING_DATA_MONGODB_DATABASE=maiban_health
# 如果使用本项目 docker-compose 启动了 MongoDB,推荐:
# SPRING_DATA_MONGODB_URI=mongodb://admin:admin123@mongodb:27017/maiban_health?authSource=admin

# ==============================================
# RabbitMQ 配置
# ==============================================
SPRING_RABBITMQ_HOST=your-rabbitmq-host
SPRING_RABBITMQ_PORT=5672
SPRING_RABBITMQ_USERNAME=admin
SPRING_RABBITMQ_PASSWORD=password
SPRING_RABBITMQ_VIRTUAL_HOST=/maiban
# 如果使用本项目 docker-compose 启动了 RabbitMQ,推荐:
# SPRING_RABBITMQ_HOST=rabbitmq
# SPRING_RABBITMQ_PORT=5672
# SPRING_RABBITMQ_USERNAME=admin
# SPRING_RABBITMQ_PASSWORD=admin123
# SPRING_RABBITMQ_VIRTUAL_HOST=/

# ==============================================
# 应用环境
# ==============================================
SPRING_PROFILES_ACTIVE=prod

镜像命名规则

镜像存储在阿里云 ACR,命名格式:

maiban-ack-registry.cn-beijing.cr.aliyuncs.com/maiban/center:{VERSION}-{SERVICE}

示例:

  • maiban-ack-registry.cn-beijing.cr.aliyuncs.com/maiban/center:v0.1.0-gateway
  • maiban-ack-registry.cn-beijing.cr.aliyuncs.com/maiban/center:v0.1.0-admin

基础组件镜像示例:

  • maiban-ack-registry.cn-beijing.cr.aliyuncs.com/maiban/center:base-2025.12.02-1207-nacos
  • maiban-ack-registry.cn-beijing.cr.aliyuncs.com/maiban/center:base-2025.12.02-1207-mongodb
  • maiban-ack-registry.cn-beijing.cr.aliyuncs.com/maiban/center:base-2025.12.02-1207-rabbitmq

部署操作

方式一:使用部署脚本(推荐)

cd /opt/maiban-center/backend

# 部署指定版本
./deploy.sh v0.1.0

# 或使用 .env 中配置的版本
./deploy.sh

方式二:手动部署

cd /opt/maiban-center/backend

# 1. 设置版本
export VERSION=v0.1.0
sed -i "s/^IMAGE_VERSION=.*/IMAGE_VERSION=${VERSION}/" .env

# 2. 创建日志目录
mkdir -p logs/{gateway,admin,user,im,nurse,monitor}

# 3. 创建基础组件数据目录
mkdir -p /data/maiban/{rabbitmq,mongodb}

# 4. 拉取镜像
docker-compose pull

# 5. 启动所有服务
docker-compose up -d

# 6. 查看状态
docker-compose ps

方式三:自动化部署(CI/CD)

推送 Git Tag 自动触发部署:

# 创建并推送 tag
git tag v0.1.0
git push origin v0.1.0

GitHub Actions 会自动:

  1. 构建 Java 项目
  2. 构建 Docker 镜像
  3. 推送到阿里云 ACR
  4. SSH 到服务器执行部署

运维操作

查看服务状态

# 查看所有服务
docker-compose ps

# 查看服务日志
docker-compose logs -f maiban-gateway

# 查看挂载的日志文件
tail -f logs/gateway/*.log

重启服务

# 重启单个服务
docker-compose restart maiban-gateway

# 重启所有服务
docker-compose restart

更新服务

# 更新单个服务
docker-compose pull maiban-gateway
docker-compose up -d --no-deps maiban-gateway

# 滚动更新所有服务(不包含已移除的订单服务)
for svc in maiban-gateway maiban-admin maiban-user maiban-im maiban-nurse maiban-monitor; do
  docker-compose up -d --no-deps $svc
  sleep 10
done

停止服务

# 停止所有服务(保留容器)
docker-compose stop

# 停止并删除容器
docker-compose down

# 停止并删除容器、网络、卷
docker-compose down -v

清理资源

# 清理未使用的镜像
docker image prune -f

# 清理所有未使用资源
docker system prune -f

健康检查

手动检查

# 检查网关健康
curl http://localhost:8201/actuator/health

# 检查管理后台
curl http://localhost:8081/actuator/health

# 批量检查
for port in 8201 8081 8084 8082 8085 8086; do
  echo "Port $port: $(curl -sf http://localhost:$port/actuator/health | jq -r '.status' 2>/dev/null || echo 'DOWN')"
done

自动健康检查

Docker Compose 已配置健康检查:

  • 检查间隔:30秒
  • 超时时间:3秒
  • 启动等待:60秒
  • 重试次数:3次

查看健康状态:

docker inspect --format='{{.State.Health.Status}}' maiban-gateway

日志管理

日志目录结构

backend/logs/
├── gateway/      # 网关服务日志
├── admin/        # 管理后台日志
├── user/         # 用户服务日志
├── im/           # IM 服务日志
├── nurse/        # 护士服务日志
└── monitor/      # 监控服务日志

日志配置

已配置日志轮转:

  • 单文件最大:50MB
  • 保留文件数:3个
  • 驱动:json-file

查看日志

# 实时查看容器日志
docker-compose logs -f maiban-gateway

# 查看挂载的应用日志
tail -f logs/gateway/*.log

# 查看最近 100 行
docker-compose logs --tail=100 maiban-admin

故障排查

服务启动失败

# 1. 查看容器日志
docker-compose logs maiban-gateway

# 2. 检查容器状态
docker inspect maiban-gateway

# 3. 进入容器排查
docker exec -it maiban-gateway sh

# 4. 检查网络连通性
docker exec maiban-gateway ping -c 3 <nacos-host>
docker exec maiban-gateway nc -zv <mysql-host> 3306

网络问题

# 检查网络
docker network ls
docker network inspect backend_maiban-network

# 检查容器 IP
docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' maiban-gateway

资源问题

# 查看资源使用
docker stats

# 检查磁盘空间
df -h
docker system df

安全建议

  1. 敏感信息保护

    • .env 文件不要提交到 Git
    • 生产环境使用 Secrets 管理
  2. 网络安全

    • 仅暴露必要端口
    • 使用防火墙限制访问
  3. 镜像安全

    • 定期更新基础镜像
    • 使用镜像扫描工具
  4. 访问控制

    • 限制 Docker API 访问
    • 使用最小权限原则

附录

GitHub Secrets 配置

Secret 名称说明
DEPLOY_HOST部署服务器 IP
DEPLOY_USERSSH 用户名
DEPLOY_SSH_KEYSSH 私钥
DEPLOY_PORTSSH 端口(默认 22)
DEPLOY_PATH项目部署路径
ACR_REGISTRY_USERNAME阿里云 ACR 用户名
ACR_REGISTRY_PASSWORD阿里云 ACR 密码

常用命令速查

# 部署
./deploy.sh v0.1.0

# 查看状态
docker-compose ps

# 查看日志
docker-compose logs -f <service>

# 重启服务
docker-compose restart <service>

# 更新服务
docker-compose pull && docker-compose up -d

# 进入容器
docker exec -it <container> sh

# 清理资源
docker system prune -f
在 GitHub 上编辑此页
最后更新: 2025/12/2 17:07
贡献者: David