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 配置:

bash 复制代码
git clone <repository-url>
cd go-eino-interview-agent 
# 启动所有服务
docker compose -f docker-compose.yml up -d 
# 检查服务状态
docker compose ps

应用程序将在以下地址可用:

部署配置

项目为不同的部署场景提供了三种 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 终止。

安全考虑

  1. 使用非 root 用户(已配置)
  2. 实施密钥管理保护敏感数据
  3. 启用 SSL/TLS 终止
  4. 定期安全更新基础镜像
  5. 网络分段保护敏感服务

性能优化

  1. 为容器设置资源限制
  2. 数据库访问使用连接池
  3. 频繁访问数据采用缓存策略
  4. 设置监控和告警

备份策略

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 部署 - 扩展到生产集群
  • 监控和可观测性 - 生产监控设置

一起学习进步

对这个项目感兴趣的朋友欢迎关注我,私信我,免费领取学习资料,一起成长进步。

系列教程查看下方专栏即可:

相关推荐
普通网友2 小时前
Bash语言的图算法
开发语言·后端·golang
腾讯云开发者2 小时前
当10年架构师拿起AI:不是写不动了,是写得太快了
人工智能
雨岚霏2 小时前
Bash语言的数据库编程
开发语言·后端·golang
小马过河R2 小时前
RAG检索增强生成:通过重排序提升AI信息检索精准度
人工智能·语言模型
不惑_2 小时前
通俗理解卷积神经网络
人工智能·windows·python·深度学习·机器学习
间彧2 小时前
Java大厂面试:携程三轮面试
后端
幌才_loong2 小时前
.NET8 Middleware 核心原理与实战指南
后端
程序员飞哥2 小时前
这样做的幂等也太全了吧
java·后端·spring
百度Geek说2 小时前
百度一站式全业务智能结算中台
后端