本指南提供了使用 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 配置:
bash
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 使用多阶段构建进行优化:
dockerfile
# 构建阶段
FROM golang:1.24-alpine AS builder
# ... 构建过程 ...
# 运行时阶段
FROM alpine:3.18
# ... 最小运行时镜像 ...
关键配置:
- 端口:8888
- 健康检查:/health 端点
- 用户:非 root 用户(appuser:1001)
- 时区:Asia/Shanghai
前端服务
前端服务 frontend/Dockerfile 同样使用多阶段构建:
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 文件:
bash
# 数据库配置
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 作为模板。复制并自定义:
bash
cp backend/config.example.yaml backend/config.yaml
关键配置部分:
- 数据库:MySQL 连接设置
- Redis:缓存配置
- 安全:JWT 密钥和 CORS 设置
- AI 服务:OpenAI、Embedding 和 Milvus 设置
部署流程
步骤 1:准备工作
bash
# 克隆并进入项目
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:构建和部署
bash
# 构建并启动所有服务
docker compose -f docker-compose.yml up -d --build
# 监控部署进度
docker compose logs -f
# 检查服务健康状态
docker compose ps
步骤 3:验证
bash
# 测试后端健康状态
curl http://localhost/health
# 测试前端访问
curl -I http://localhost
# 检查数据库连接
docker compose exec backend ./main -check-db
故障排除
常见问题
| 问题 | 解决方案 |
|---|---|
| 端口冲突 | 在 docker-compose.yml 中更改外部端口 |
| 数据库连接错误 | 验证 MySQL 健康状态和凭据 |
| 构建失败 | 检查 Docker 守护进程和可用磁盘空间 |
| 权限错误 | 确保卷权限正确设置 |
健康检查命令
bash
# 检查所有服务状态
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
性能监控
bash
# 监控资源使用
docker stats
# 检查容器健康状态
docker compose exec backend curl localhost:8888/health
docker compose exec frontend curl localhost:3000
高级配置
Milvus 向量数据库(可选)
要启用 AI 功能,请在 docker-compose.yml 中取消注释以下服务:
yaml
# 取消注释这些服务
milvus:
image: milvusdb/milvus:v2.4.0
# ... 配置 ...
attu:
image: zilliz/attu:v2.3.4
# ... 配置 ...
自定义网络
部署使用自定义桥接网络 app-network 进行服务隔离:
yaml
networks:
app-network:
driver: bridge
卷管理
持久化数据存储在命名卷中:
| 卷 | 用途 |
|---|---|
| mysql-data | MySQL 数据库文件 |
| redis-data | Redis AOF 文件 |
| etcd-data | Etcd 集群数据 |
| milvus-data | 向量数据库(可选) |
生产最佳实践
对于生产部署,建议使用密钥管理、外部数据库,并在负载均衡器级别配置适当的 SSL/TLS 终止。
安全考虑
- 使用非 root 用户(已配置)
- 实施密钥管理保护敏感数据
- 启用 SSL/TLS 终止
- 定期安全更新基础镜像
- 网络分段保护敏感服务
性能优化
- 为容器设置资源限制
- 数据库访问使用连接池
- 频繁访问数据采用缓存策略
- 设置监控和告警
备份策略
bash
# 数据库备份
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 部署 - 扩展到生产集群
- 监控和可观测性 - 生产监控设置
一起学习进步
对这个项目感兴趣的朋友欢迎关注我,私信我,免费领取学习资料,一起成长进步。
系列教程查看下方专栏即可: