首页
/ 基于Go-Coffeeshop项目的Docker Compose部署指南

基于Go-Coffeeshop项目的Docker Compose部署指南

2025-07-08 08:21:43作者:袁立春Spencer

项目概述

Go-Coffeeshop是一个模拟咖啡店业务的微服务架构项目,使用Go语言开发。该项目通过多个微服务协作完成咖啡订单的处理流程,包括产品目录、订单处理、咖啡制作和厨房备餐等业务环节。

架构解析

从docker-compose.yaml文件可以看出,该项目采用了典型的微服务架构设计,包含以下核心组件:

  1. 数据库服务:PostgreSQL作为数据存储
  2. 消息队列:RabbitMQ实现服务间异步通信
  3. 业务微服务:包括中间服务、产品服务、柜台服务、咖啡师服务和厨房服务
  4. 前端Web服务:提供用户界面

详细服务配置解析

1. 基础设施服务

PostgreSQL数据库

postgres:
  image: postgres:14-alpine
  environment:
    - POSTGRES_DB=postgres
    - POSTGRES_USER=postgres
    - POSTGRES_PASSWORD=P@ssw0rd
  healthcheck:
    test: ["CMD", "pg_isready"]
  • 使用轻量级的PostgreSQL 14 Alpine镜像
  • 配置了默认数据库、用户名和密码
  • 添加了健康检查,确保服务启动完成

RabbitMQ消息队列

rabbitmq:
  image: rabbitmq:3.11-management-alpine
  environment:
    RABBITMQ_DEFAULT_USER: guest
    RABBITMQ_DEFAULT_PASS: guest
  • 使用带管理界面的RabbitMQ 3.11 Alpine镜像
  • 配置了默认用户凭据
  • 暴露了AMQP协议端口(5672)和管理界面端口(15672)

2. 业务微服务

中间服务(Proxy)

proxy:
  build:
    context: .
    dockerfile: ./docker/Dockerfile-proxy
  environment:
    GRPC_PRODUCT_HOST: 'product'
    GRPC_PRODUCT_PORT: 5001
    GRPC_COUNTER_HOST: 'counter'
    GRPC_COUNTER_PORT: 5002
  • 作为API网关,提供统一的入口
  • 通过gRPC与产品服务和柜台服务通信
  • 依赖产品服务和柜台服务启动完成

产品服务(Product)

product:
  build:
    context: .
    dockerfile: ./docker/Dockerfile-product
  ports:
    - 5001:5001
  • 管理产品目录信息
  • 暴露5001端口供其他服务调用

柜台服务(Counter)

counter:
  environment:
    PG_URL: postgres://postgres:P@ssw0rd@postgres:5432/postgres
    RABBITMQ_URL: amqp://guest:guest@rabbitmq:5672/
    PRODUCT_CLIENT_URL: product:5001
  • 处理订单业务逻辑
  • 依赖PostgreSQL和RabbitMQ
  • 需要与产品服务通信获取产品信息

咖啡师服务(Barista)和厨房服务(Kitchen)

barista:
  environment:
    PG_URL: postgres://postgres:P@ssw0rd@postgres:5432/postgres
    RABBITMQ_URL: amqp://guest:guest@rabbitmq:5672/

kitchen:
  environment:
    PG_URL: postgres://postgres:P@ssw0rd@postgres:5432/postgres
    RABBITMQ_URL: amqp://guest:guest@rabbitmq:5672/
  • 分别处理咖啡制作和食品准备
  • 都依赖数据库和消息队列
  • 通过RabbitMQ接收订单处理消息

3. Web前端服务

web:
  environment:
    REVERSE_PROXY_URL: http://localhost:5000
    WEB_PORT: 8888
  ports:
    - 8888:8888
  • 提供用户交互界面
  • 通过8888端口访问
  • 反向代理指向中间服务

网络配置

networks:
  coffeeshop-network:

所有服务都连接到自定义的coffeeshop-network网络,这使得服务间可以通过服务名称相互访问,而不需要知道具体的IP地址。

部署实践指南

  1. 环境准备

    • 确保已安装Docker和Docker Compose
    • 克隆项目代码到本地
  2. 构建和启动

    docker-compose up -d
    
  3. 访问服务

    • Web界面:http://localhost:8888
    • RabbitMQ管理界面:http://localhost:15672 (用户名/密码: guest/guest)
  4. 服务依赖关系

    • 数据库和消息队列最先启动
    • 业务服务等待基础设施健康检查通过
    • Web服务最后启动,依赖中间服务

架构设计亮点

  1. 服务发现:通过Docker网络和DNS,服务间使用服务名称直接通信
  2. 健康检查:关键服务配置了健康检查,确保依赖服务就绪
  3. 环境隔离:使用独立网络隔离服务,增强安全性
  4. 配置管理:通过环境变量灵活配置服务参数

扩展建议

  1. 生产环境优化

    • 替换默认凭据
    • 配置数据持久化卷
    • 添加监控和日志收集
  2. 性能调优

    • 根据负载调整服务副本数
    • 配置资源限制
  3. 安全加固

    • 使用TLS加密服务间通信
    • 实现更严格的网络策略

通过这个docker-compose配置,开发者可以快速搭建完整的Go-Coffeeshop微服务环境,理解各服务间的交互关系,为后续的开发调试和架构优化打下基础。