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

一起学习进步

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

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

相关推荐
数据皮皮侠AI1 分钟前
中国城市可再生能源数据集(2005-2021)|顶刊 Sci Data 11 种能源面板
大数据·人工智能·笔记·能源·1024程序员节
G31135422735 分钟前
如何用 QClaw 龙虾做一个规律作息健康助理 Agent
大数据·人工智能·ai·云计算
幂律智能6 分钟前
零售行业合同管理数智化转型解决方案
大数据·人工智能·零售
旺财矿工8 分钟前
零基础搭建 OpenClaw 2.6.6 Win11 本地化运行环境
人工智能·openclaw·小龙虾·龙虾·openclaw安装包
九成宫9 分钟前
动手学深度学习PyTorch版初步安装过程
人工智能·pytorch·深度学习
Traving Yu10 分钟前
Prompt提示词工程
人工智能·prompt
NOCSAH10 分钟前
统好AI CRM功能解析:智能录入与跟进
人工智能
He少年12 分钟前
【AI 辅助编程做设备数据采集:一个真实项目的迭代复盘(OpenSpec 驱动)】
人工智能
华万通信king15 分钟前
WorkBuddy知识库企业级搭建实战:从零到生产级别的完整路径
大数据·人工智能
等风来_shy21 分钟前
如何写好一个 Skill
后端