05 Go Eino AI应用开发实战 | Docker 部署指南
本指南提供了使用 Docker 和 Docker Compose 部署 Go-Eino Interview Agent 平台的全面说明。该平台由多个微服务组成,包括 Go 后端、Next.js 前端、MySQL 数据库、Redis 缓存以及用于 AI 功能的可选 Milvus 向量数据库。
架构概述
部署架构采用微服务模式,包含以下核心组件:
- 外部访问
- Docker 网络
- 端口 80
- 端口 80
- /api/*
- /*
- Nginx 反向代理
- 前端 :3000
- 后端 :8888
- MySQL :3306
- Redis :6379
- Etcd :2379
- 用户浏览器
- API 客户端
前置条件
在开始部署之前,请确保已安装以下软件:
- Docker(版本 20.10 或更高)
- Docker Compose(版本 2.0 或更高)
- Git 用于克隆仓库
- 至少 4GB RAM 以获得最佳性能
快速开始
运行平台最快的方式是使用提供的 Docker Compose 配置:
git clone <repository-url> cd go-eino-interview-agent # 启动所有服务 docker compose -f docker-compose.yml up -d # 检查服务状态 docker compose ps应用程序将在以下地址可用:
- 前端:http://localhost
- 后端 API:http://localhost/api
- MySQL:localhost:3307
- Redis:localhost:6379
部署配置
项目为不同的部署场景提供了三种 Docker Compose 配置:
配置
用途
主要特性
docker-compose.yml
开发
包含 Nginx 代理的全栈服务,暴露外部端口
docker-compose-prod.yml
生产
为生产环境优化,内部网络通信
docker-compose-example.yml
模板
包含示例的配置参考
开发环境部署
开发配置文件 docker-compose.yml 包含:
- Nginx 反向代理,监听端口 80
- 所有服务的外部端口暴露
- 健康检查用于服务监控
- 数据持久化的卷挂载
生产环境部署
生产配置文件 docker-compose-prod.yml 针对以下方面进行了优化:
- 内部网络通信(减少外部暴露)
- 生产环境变量
- 优化的构建参数
- 安全加固
对于生产部署,请始终使用环境变量来管理敏感数据,如数据库密码和 API 密钥。切勿将这些值提交到版本控制系统。
服务配置
后端服务
后端服务 backend/Dockerfile 使用多阶段构建进行优化:
# 构建阶段 FROM golang:1.24-alpine AS builder # ... 构建过程 ... # 运行时阶段 FROM alpine:3.18 # ... 最小运行时镜像 ...关键配置:
- 端口:8888
- 健康检查:/health 端点
- 用户:非 root 用户(appuser:1001)
- 时区:Asia/Shanghai
前端服务
前端服务 frontend/Dockerfile 同样使用多阶段构建:
# 构建阶段 FROM node:18-alpine AS builder # ... Next.js 构建 ... # 运行时阶段 FROM node:18-alpine # ... 生产运行时 ...关键配置:
- 端口:3000
- 构建参数:NEXT_PUBLIC_API_BASE_URL
- 健康检查:根端点
- 用户:非 root 用户(appuser:1001)
数据库服务
MySQL 配置
- 版本:8.0
- 端口:3307(外部),3306(内部)
- 数据库:interview_agent
- 健康检查:MySQL ping 命令
- 持久化:命名卷 mysql-data
Redis 配置
- 版本:7-alpine
- 端口:6379
- 持久化:启用 AOF
- 健康检查:Redis ping 命令
- 持久化:命名卷 redis-data
Nginx 配置
Nginx 反向代理 nginx.conf 提供:
- API 路由:/api/* → backend:8888
- 前端路由:/* → frontend:3000
- WebSocket 支持:Upgrade 头部
- SSE 支持:禁用流式传输的缓冲
- 健康检查:/health 端点
环境变量
必需变量
在项目根目录创建 .env 文件:
# 数据库配置 DB_PASSWORD=your_secure_password DB_USER=root DB_NAME=interview_agent # Redis 配置 REDIS_PASSWORD=your_redis_password # API 配置 NEXT_PUBLIC_API_BASE_URL=http://your-domain:8888/api # AI 服务(可选) EMBEDDING_API_KEY=your_embedding_key EMBEDDING_MODEL=your_model_id EMBEDDING_BASE_URL=https://api.example.com MILVUS_ADDRESS=milvus:19530配置文件
后端使用 config.example.yaml 作为模板。复制并自定义:
cp backend/config.example.yaml backend/config.yaml关键配置部分:
- 数据库:MySQL 连接设置
- Redis:缓存配置
- 安全:JWT 密钥和 CORS 设置
- AI 服务:OpenAI、Embedding 和 Milvus 设置
部署流程
步骤 1:准备工作
# 克隆并进入项目 git clone <repository-url> cd go-eino-interview-agent # 创建环境文件 cp .env.example .env # 使用你的值编辑 .env # 准备后端配置 cp backend/config.example.yaml backend/config.yaml # 使用你的设置编辑 config.yaml步骤 2:构建和部署
# 构建并启动所有服务 docker compose -f docker-compose.yml up -d --build # 监控部署进度 docker compose logs -f # 检查服务健康状态 docker compose ps步骤 3:验证
# 测试后端健康状态 curl http://localhost/health # 测试前端访问 curl -I http://localhost # 检查数据库连接 docker compose exec backend ./main -check-db故障排除
常见问题
问题
解决方案
端口冲突
在 docker-compose.yml 中更改外部端口
数据库连接错误
验证 MySQL 健康状态和凭据
构建失败
检查 Docker 守护进程和可用磁盘空间
权限错误
确保卷权限正确设置
健康检查命令
# 检查所有服务状态 docker compose ps # 查看服务日志 docker compose logs backend docker compose logs frontend docker compose logs mysql # 访问服务 Shell docker compose exec backend sh docker compose exec mysql mysql -u root -p性能监控
# 监控资源使用 docker stats # 检查容器健康状态 docker compose exec backend curl localhost:8888/health docker compose exec frontend curl localhost:3000高级配置
Milvus 向量数据库(可选)
要启用 AI 功能,请在 docker-compose.yml 中取消注释以下服务:
# 取消注释这些服务 milvus: image: milvusdb/milvus:v2.4.0 # ... 配置 ... attu: image: zilliz/attu:v2.3.4 # ... 配置 ...自定义网络
部署使用自定义桥接网络 app-network 进行服务隔离:
networks: app-network: driver: bridge卷管理
持久化数据存储在命名卷中:
卷
用途
mysql-data
MySQL 数据库文件
redis-data
Redis AOF 文件
etcd-data
Etcd 集群数据
milvus-data
向量数据库(可选)
生产最佳实践
对于生产部署,建议使用密钥管理、外部数据库,并在负载均衡器级别配置适当的 SSL/TLS 终止。
安全考虑
- 使用非 root 用户(已配置)
- 实施密钥管理保护敏感数据
- 启用 SSL/TLS 终止
- 定期安全更新基础镜像
- 网络分段保护敏感服务
性能优化
- 为容器设置资源限制
- 数据库访问使用连接池
- 频繁访问数据采用缓存策略
- 设置监控和告警
备份策略
# 数据库备份 docker compose exec mysql mysqldump -u root -p interview_agent > backup.sql # 卷备份 docker run --rm -v mysql-data:/data -v $(pwd):/backup alpine tar czf /backup/mysql-backup.tar.gz -C /data .后续步骤
成功部署后,你可能想要探索:
- 架构概述 - 了解系统设计
- 开发环境设置 - 本地开发配置
- Kubernetes 部署 - 扩展到生产集群
- 监控和可观测性 - 生产监控设置
一起学习进步
对这个项目感兴趣的朋友欢迎关注我,私信我,免费领取学习资料,一起成长进步。
系列教程查看下方专栏即可:
