基于Go-Coffeeshop项目的Docker Compose部署指南
2025-07-08 08:21:43作者:袁立春Spencer
项目概述
Go-Coffeeshop是一个模拟咖啡店业务的微服务架构项目,使用Go语言开发。该项目通过多个微服务协作完成咖啡订单的处理流程,包括产品目录、订单处理、咖啡制作和厨房备餐等业务环节。
架构解析
从docker-compose.yaml文件可以看出,该项目采用了典型的微服务架构设计,包含以下核心组件:
- 数据库服务:PostgreSQL作为数据存储
- 消息队列:RabbitMQ实现服务间异步通信
- 业务微服务:包括中间服务、产品服务、柜台服务、咖啡师服务和厨房服务
- 前端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地址。
部署实践指南
-
环境准备:
- 确保已安装Docker和Docker Compose
- 克隆项目代码到本地
-
构建和启动:
docker-compose up -d
-
访问服务:
- Web界面:http://localhost:8888
- RabbitMQ管理界面:http://localhost:15672 (用户名/密码: guest/guest)
-
服务依赖关系:
- 数据库和消息队列最先启动
- 业务服务等待基础设施健康检查通过
- Web服务最后启动,依赖中间服务
架构设计亮点
- 服务发现:通过Docker网络和DNS,服务间使用服务名称直接通信
- 健康检查:关键服务配置了健康检查,确保依赖服务就绪
- 环境隔离:使用独立网络隔离服务,增强安全性
- 配置管理:通过环境变量灵活配置服务参数
扩展建议
-
生产环境优化:
- 替换默认凭据
- 配置数据持久化卷
- 添加监控和日志收集
-
性能调优:
- 根据负载调整服务副本数
- 配置资源限制
-
安全加固:
- 使用TLS加密服务间通信
- 实现更严格的网络策略
通过这个docker-compose配置,开发者可以快速搭建完整的Go-Coffeeshop微服务环境,理解各服务间的交互关系,为后续的开发调试和架构优化打下基础。