TeGo-AI 标准生产部署文档
本文档定位为 4 服务器分离部署模式下的标准生产部署操作指南,旨在为技术人员提供标准化的部署配置参考。其核心价值在于通过服务分层部署提升系统稳定性与可扩展性,保障生产环境下中等规模并发业务的可靠运行,适用于企业日常生产环境搭建与业务支撑场景。
服务分布
四服务器部署架构中,采用"业务服务与基础服务分离"策略,通过清晰的服务分层设计实现资源隔离与负载均衡。服务分布矩阵如下:
服务层级 | 服务名称 | 部署节点 | 核心作用 |
---|---|---|---|
负载均衡层 | tego-proxy | biz-node1、biz-node2(双节点冗余) | 统一负载均衡,分发请求到业务节点 |
业务服务层 | tego-os | biz-node1、biz-node2(双节点冗余) | 前端统一操作界面 |
tego-os-server | biz-node1、biz-node2(双节点冗余) | 后端API服务 | |
tego-mcp | biz-node1、biz-node2(双节点冗余) | MCP服务,实现向量搜索等功能 | |
tego-llm | biz-node1、biz-node2(双节点冗余) | LLM网关服务 | |
tego-engine-main | biz-node1、biz-node2(双节点冗余) | 工作流主控节点 | |
tego-engine-worker | biz-node1、biz-node2(双节点冗余) | 工作流执行节点 | |
基础设施层 | postgres-master | infra-node(主节点) | 主数据库,存储业务核心数据 |
redis | infra-node(单点部署) | 缓存/消息队列服务,提升数据访问性能 | |
openldap | infra-node(单点部署) | 统一认证服务,管理用户身份与权限 | |
embedding | infra-node(单点部署) | AI嵌入服务,生成与存储向量数据 | |
灾备服务层 | postgres-slave | backup-node(从节点) | 从数据库,同步主库数据并提供只读查询 |
data-sync | backup-node(专用节点) | 跨节点数据同步服务,支撑主从数据一致性 |
服务分布核心原则
- 业务服务双节点冗余:负载均衡层与业务服务层所有服务在两台业务节点同时部署,通过负载均衡器实现请求分发与故障自动切换,保障业务连续性。
- 基础设施集中部署:数据库、缓存、认证等核心基础服务集中部署在专用基础设施节点,减少资源竞争,提升数据安全性。
- 灾备服务独立部署:备份节点独立运行从数据库与数据同步服务,通过实时同步机制实现数据容灾,确保在主节点故障时可快速切换。
环境配置
网络配置
四服务器部署环境需配置独立内网通信链路,确保节点间数据传输的稳定性与安全性。假设四台服务器配置如下内网IP:
- 业务节点1(biz-node1):192.168.1.10
- 业务节点2(biz-node2):192.168.1.11
- 基础设施节点(infra-node):192.168.1.12
- 备份节点(backup-node):192.168.1.13
所有节点需处于同一子网(子网掩码255.255.255.0),部署完成后需通过以下命令验证内网连通性:
连通性测试步骤
- 在各节点执行跨节点ping测试:
# 在biz-node1执行
ping 192.168.1.11 -c 4 # 测试与biz-node2连通性
ping 192.168.1.12 -c 4 # 测试与infra-node连通性
ping 192.168.1.13 -c 4 # 测试与backup-node连通性
# 其他节点执行类似命令,确保所有节点间互通
- 确保返回结果中丢包率为0%,RTT(往返时间)均值≤200ms
硬件配置
四服务器部署的硬件配置需满足服务分层部署需求,需要 4 台服务器,为业务服务与基础服务提供充足资源。以下为各节点的具体硬件参数:
服务器节点 | 系统 | 核心 | 内存 | 存储 | 部署服务详情 | 开放端口 |
---|---|---|---|---|---|---|
biz-node1 | Linux | 8核 | 16GB | 200GB | 业务服务全集:tego-os, tego-os-server, tego-llm, tego-mcp, tego-proxy, tego-engine-main×2, tego-engine-worker×2 | 1. 外部访问:26000,27000,30000,31000 2. 内部通信:29000 |
biz-node2 | Linux | 8核 | 16GB | 200GB | 业务服务全集:同上 | 1. 外部访问:26000,27000,30000,31000 2. 内部通信:29000 |
infra-node |
Linux | 8核 | 16GB | 200GB | 基础服务主节点:postgres-master, redis, openldap, embedding | 1. 内部通信:5432,6379,389,11434 2. 管理端口:5678 3. 同步端口:22(仅对backup-node开放) |
backup-node | Linux | 8核 | 16GB | 200GB | 基础服务从节点:postgres-slave, data-sync | 1. 内部通信:5432 2. 同步端口:22(用于访问infra-node) |
端口配置
根据服务类型及访问范围,端口划分为外部访问端口
(面向用户或外部系统)和内部通信端口
(节点间及服务间通信),配置如下:
外部访问端口
外部端口需通过防火墙策略严格限制访问来源,结合认证机制保障服务安全:
端口 | 服务名称 | 访问说明 | 安全建议 |
---|---|---|---|
26000 | tego-os | 前端Web界面 | 配置HTTPS + 基于IP的访问控制列表 |
27000 | tego-mcp | MCP服务接口 | 部署API网关 + JWT令牌认证 |
29000 | tego-os-server | 后端API服务 | 仅允许前端服务(26000端口)访问 |
30000 | tego-proxy | 工作流负载均衡 | 仅允许外部负载均衡器(LB)访问 |
31000 | tego-llm | LLM网关服务 | API网关 + 访问频率限制 |
内部通信端口
内部端口仅用于服务器节点间及服务组件间通信,需禁止外部网络访问:
端口 | 服务名称 | 访问说明 |
---|---|---|
5432 | postgres | 数据库服务,仅允许业务节点(biz-node1/biz-node2)及backup-node访问 |
6379 | redis | 缓存服务,仅允许业务节点(biz-node1/biz-node2)访问 |
389 | openldap | 身份认证服务,仅允许业务节点(biz-node1/biz-node2)访问 |
11434 | embedding | 向量嵌入服务,仅允许业务节点(biz-node1/biz-node2)访问 |
22 | SSH | 远程管理,仅允许backup-node访问infra-node(用于数据同步) |
详细部署步骤
通用环境准备
注意
- 以下的所有操作在 所有4个节点 均需要执行,确保全节点配置一致性
- 通用环境准备需按
系统初始化→Docker安装→镜像加载
的顺序执行,以下为各阶段完整操作流程及验证方法:
系统初始化
系统初始化包含基础依赖安装与时间同步配置,为后续部署提供底层环境支撑。
- 依赖包安装
首先执行以下命令安装系统基础依赖工具,包括压缩解压、文件同步及网络管理组件:
apt update && apt install -y bzip2 gzip rsync coreutils iptables
- 时间同步配置
采用chrony服务实现节点间时间一致性,操作步骤如下:
# 安装chrony服务
apt install -y chrony
# 启动服务并设置开机自启
systemctl enable --now chronyd
# 验证时间同步状态
timedatectl
- 验证要点:
- 执行
timedatectl
后,确保输出中System clock synchronized: yes
及NTP service: active
字段为正常状态,避免因时间偏差导致服务异常。
- 执行
Docker安装
采用离线包方式安装Docker及Docker Compose,确保在无公网环境下的部署可行性:
- 下载离线Docker安装包(版本24.0.9,适配部署需求)
wget https://zhama-public.oss-cn-heyuan.aliyuncs.com/base/offline-docker-24.0.9.tar.gz
- 解压并执行安装脚本:
tar xf offline-docker-24.0.9.tar.gz
cd offline-docker-24.0.9
bash install.sh
- 验证Docker安装成功(需显示版本信息):
docker --version # 需输出 Docker version 24.0.9+
docker compose version # 需输出 Docker Compose version v2.20+
镜像加载
- 下载TeGo全量镜像包(约数GB,需耐心等待):
wget https://zhama-public.oss-cn-heyuan.aliyuncs.com/tego-all-images-v1.6.0.tar.bz2
- 解压并加载镜像到Docker:
bzip2 -d tego-all-images-v1.6.0.tar.bz2 # 解压为.tar文件
docker load -i tego-all-images-v1.6.0.tar # 加载镜像
- 验证镜像加载成功(需显示包含“tego”的镜像列表):
docker images | grep tego
加载配置
- 下载部署配置压缩包:
wget https://zhama-public.oss-cn-heyuan.aliyuncs.com/tego-deploy-v1.6.0.tar
- 解压并进入部署根目录:
tar xvf tego-deploy-v1.6.0.tar
cd product # 后续所有部署操作均在此目录下执行
配置核心参数
setup.sh
脚本支持通过命令行参数配置IP地址,无需手动编辑配置文件:
参数 | 说明 | 默认值 | 示例值 |
---|---|---|---|
-i, --infra-ip |
基础设施节点内网IP | 192.168.1.12 | 192.168.1.12 |
-b1, --biz1-ip |
业务节点1外网IP地址 | 47.120.69.7 | 47.120.69.7 |
-b2, --biz2-ip |
业务节点2外网IP地址 | 47.113.226.243 | 47.113.226.243 |
-bk, --backup-ip |
备份节点内网IP地址 | 192.168.1.13 | 192.168.1.13 |
-h, --help |
显示帮助信息 | - | - |
生成的配置变量:
配置项 | 说明 | 生成规则 |
---|---|---|
INFRA_HOST_IP_INTERNAL | 基础设施节点内网IP | 使用 --infra-ip 参数 |
INFRA_TEGO_EMBEDDING_URL | Embedding模型服务URL(使用内网IP) | http://内网IP:11434/v1 |
BIZ1_TEGO_ENGINE_URL | 业务节点1引擎服务URL(外网IP/域名) | http://业务节点1IP:30000 |
BIZ1_TEGO_LLM_URL | 业务节点1网关服务URL(外网IP/域名) | http://业务节点1IP:31000 |
BIZ1_TRUSTED_URL | 业务节点1平台服务URL(外网IP/域名) | http://业务节点1IP:26000 |
BIZ1_ORIGIN_HOST | 业务节点1平台域名(外网IP/域名) | 业务节点1IP |
BIZ2_TEGO_ENGINE_URL | 业务节点2引擎服务URL(外网IP/域名) | http://业务节点2IP:30000 |
BIZ2_TEGO_LLM_URL | 业务节点2网关服务URL(外网IP/域名) | http://业务节点2IP:31000 |
BIZ2_TRUSTED_URL | 业务节点2平台服务URL(外网IP/域名) | http://业务节点2IP:26000 |
BIZ2_ORIGIN_HOST | 业务节点2平台域名(外网IP/域名) | 业务节点2IP |
BACKUP_HOST_IP_INTERNAL | 备份节点内网IP | 使用 --backup-ip 参数 |
注意:请根据您的实际网络环境使用相应的IP地址参数
setup.sh 使用示例
查看帮助信息:
./setup.sh --help
常用部署场景:
单机测试环境(使用默认配置):
./setup.sh
生产环境四节点部署:
./setup.sh -i 192.168.1.12 -b1 47.120.69.7 -b2 47.113.226.243 -bk 192.168.1.13
开发环境(仅指定基础设施节点IP):
./setup.sh -i 172.16.0.100
脚本执行结果验证:
# 检查生成的配置文件
find . -name ".env" -exec echo "=== {} ===" \; -exec cat {} \;
# 确认IP地址配置正确
grep -r "192.168.1.12\|47.120.69.7\|47.113.226.243\|192.168.1.13" . --include="*.env"
setup.sh 脚本功能说明:
该脚本实现了以下核心功能:
- IP地址验证:自动验证输入的IP地址格式是否正确
- 配置文件自动生成:查找所有
.env.example
文件,根据参数生成对应的.env
文件 - 参数替换:自动替换配置文件中的占位符为实际的IP地址
- 错误处理:提供详细的错误信息和帮助信息
- 配置验证:生成配置后提供验证命令,确保配置正确
脚本执行流程:
- 解析命令行参数并验证IP地址格式
- 查找项目中的所有
.env.example
文件 - 复制模板文件为
.env
文件 - 使用
sed
命令替换配置文件中的IP地址占位符 - 显示配置摘要和后续操作建议
基础设施节点(infra-node)部署
注:以下操作仅在 infra-node(192.168.1.12)上执行
步骤1:生成配置文件
使用 setup.sh
脚本配置并生成环境变量文件。脚本支持命令行参数,无需手动编辑:
# 使用自定义IP地址
./setup.sh -i <基础设施节点内网IP> -b1 <业务节点1外网IP> -b2 <业务节点2外网IP> -bk <备份节点内网IP>
# 示例:
./setup.sh -i 192.168.1.12 -b1 47.120.69.7 -b2 47.113.226.243 -bk 192.168.1.13
查看帮助信息:
./setup.sh --help
脚本执行后将自动:
- 验证IP地址格式
- 查找所有
env.example
文件 - 根据参数生成对应的
.env
文件 - 显示配置摘要信息
步骤2:配置核心服务密码
进入基础设施配置目录,编辑.env文件设置服务密码:
cd infrastructure/master
vim .env
设置核心服务密码(替换为实际密码):
POSTGRES_PASSWORD=your_postgres_password
REDIS_PASSWORD=your_redis_password
LDAP_ADMIN_PASSWORD=your_ldap_password
LDAP_ORGANISATION=Your Organization
LDAP_DOMAIN=your.domain.com
步骤3:启动基础设施服务
启动基础服务(PostgreSQL主库、Redis、OpenLDAP、Embedding):
docker compose up -d # 后台启动服务
执行主库初始化脚本(配置PostgreSQL主从复制,需传入backup-node内网IP):
# 语法:bash master-init.sh <PostgreSQL复制密码> <backup-node内网IP>
bash master-init.sh your_replication_password 192.168.1.13
重启基础服务,确保初始化生效:
docker compose down && docker compose up -d
cd ../.. # 返回product根目录
配置SSH免密(供backup-node访问)
- 允许backup-node通过SSH访问infra-node进行数据同步:
# 创建.ssh目录(若不存在)
mkdir -p ~/.ssh && chmod 700 ~/.ssh
# 临时开放authorized_keys写入权限
touch ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys
验证基础设施状态
- 查看容器运行状态(需全部显示
Up
):
docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}"
- 查看关键服务日志(无报错即正常):
# 查看基础服务日志
docker compose -f infrastructure/master/docker-compose.yml logs
备份节点(backup-node)部署
注:以下操作仅在 backup-node(192.168.1.13)上执行
步骤1:准备配置文件
在backup-node主机上解压部署包并执行 setup.sh 脚本生成配置文件:
# 下载并解压部署包
wget https://zhama-public.oss-cn-heyuan.aliyuncs.com/tego-deploy-v1.6.0.tar
tar xvf tego-deploy-v1.6.0.tar
cd product
# 生成配置文件(使用与基础设施节点相同的IP参数)
./setup.sh -i <基础设施节点内网IP> -b1 <业务节点1外网IP> -b2 <业务节点2外网IP> -bk <备份节点内网IP>
# 示例(使用与基础设施节点相同的配置):
./setup.sh -i 192.168.1.12 -b1 47.120.69.7 -b2 47.113.226.243 -bk 192.168.1.13
注意:backup-node的配置参数应与基础设施节点保持一致
步骤2:配置Master-Slave SSH免密登录
- 生成SSH密钥(一路回车,无需设置密码):
ssh-keygen -t rsa -C tego-backup@your.domain.com
- 查看公钥内容并复制:
cat ~/.ssh/id_rsa.pub
- 登录
infra-node
节点,将backup-node的公钥添加到授权列表:
# 在infra-node节点执行
vim ~/.ssh/authorized_keys # 粘贴backup-node的公钥内容后保存
启动备份服务
- 进入备份服务目录,准备SSH密钥挂载目录:
cd infrastructure/slave
mkdir -p volumes/data-sync/ssh # 创建密钥存储目录
cp ~/.ssh/* volumes/data-sync/ssh/ # 复制SSH密钥到数据卷
- 编辑备份服务配置:
vim .env
- 配置同步参数(替换为实际值):
# 远程主机连接配置(指向infra-node)
REMOTE_HOST=192.168.1.12
REMOTE_USER=root
REMOTE_SSH_PORT=22
# 同步配置
SYNC_INTERVAL=3600 # 同步间隔(秒)
BACKUP_RETENTION_DAYS=7 # 备份保留天数
POSTGRES_PASSWORD=your_postgres_password # 与infra-node保持一致
- 启动备份服务(PostgreSQL从库、data-sync同步服务):
docker compose up -d
cd ../.. # 返回product根目录
验证备份节点状态
- 查看容器运行状态(需全部显示
Up
):
docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}"
- 查看同步服务日志(重点确认数据同步正常):
docker compose -f infrastructure/slave/docker-compose.yml logs
业务节点1(biz-node1)部署
注:以下操作仅在 biz-node1(192.168.1.10)上执行
步骤1:准备配置文件
在biz-node1主机上解压部署包并执行 setup.sh 脚本生成配置文件:
# 下载并解压部署包
wget https://zhama-public.oss-cn-heyuan.aliyuncs.com/tego-deploy-v1.6.0.tar
tar xvf tego-deploy-v1.6.0.tar
cd product
# 生成配置文件(使用与基础设施节点相同的IP参数)
./setup.sh -i <基础设施节点内网IP> -b1 <业务节点1外网IP> -b2 <业务节点2外网IP> -bk <备份节点内网IP>
# 示例(使用与基础设施节点相同的配置):
./setup.sh -i 192.168.1.12 -b1 47.120.69.7 -b2 47.113.226.243 -bk 192.168.1.13
步骤2:配置业务服务连接参数
进入业务服务目录,编辑环境变量配置:
cd host1
vim .env
配置基础设施连接信息(替换为实际值):
# 基础设施连接配置(指向infra-node)
POSTGRES_HOST=192.168.1.12
POSTGRES_PORT=5432
POSTGRES_PASSWORD=your_postgres_password # 与infra-node一致
REDIS_HOST=192.168.1.12
REDIS_PORT=6379
REDIS_PASSWORD=your_redis_password # 与infra-node一致
# 业务服务配置
TEGO_JWT_SECRET=your_jwt_secret
DATABASE_URL=postgresql://zhama:your_postgres_password@192.168.1.12:5432/zhama
SQL_DSN=host=192.168.1.12 port=5432 user=zhama password=your_postgres_password dbname=tego-llm sslmode=disable
# AI服务配置
USE_LOCAL_MODEL=false
MODEL_NAME=qwen3-embedding-4b
EMBEDDING_URL=http://192.168.1.12:11434/v1
步骤3:启动业务服务
启动Host1业务集群(包含前端、后端、AI网关等核心服务):
docker compose up -d
cd .. # 返回product根目录
验证业务节点1状态
- 查看容器运行状态(需全部显示
Up
):
docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}"
- 查看业务服务日志(无报错即正常):
docker compose -f host1/docker-compose.yml logs
业务节点2(biz-node2)部署
注:以下操作仅在 biz-node2(192.168.1.11)上执行
步骤1:准备配置文件
在biz-node2主机上解压部署包并执行 setup.sh 脚本生成配置文件:
# 下载并解压部署包
wget https://zhama-public.oss-cn-heyuan.aliyuncs.com/tego-deploy-v1.6.0.tar
tar xvf tego-deploy-v1.6.0.tar
cd product
# 生成配置文件(使用与基础设施节点相同的IP参数)
./setup.sh -i <基础设施节点内网IP> -b1 <业务节点1外网IP> -b2 <业务节点2外网IP> -bk <备份节点内网IP>
# 示例(使用与基础设施节点相同的配置):
./setup.sh -i 192.168.1.12 -b1 47.120.69.7 -b2 47.113.226.243 -bk 192.168.1.13
步骤2:配置业务服务连接参数
进入业务服务目录,编辑环境变量配置(与biz-node1配置一致):
cd host2
vim .env
配置内容同biz-node1的.env文件(确保与基础设施连接参数一致)
步骤3:启动业务服务
启动Host2业务集群(与biz-node1服务一致,实现负载均衡):
docker compose up -d
cd .. # 返回product根目录
验证业务节点2状态
- 查看容器运行状态(需全部显示
Up
):
docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}"
- 查看业务服务日志(无报错即正常):
docker compose -f host2/docker-compose.yml logs
全局部署验证
端口访问验证
在客户端或服务器本地,通过curl
或浏览器验证端口可用性(替换为实际IP):
# 验证业务节点1服务
curl http://<biz-node1外网IP>:26000 # 前端服务,应返回HTML内容
curl http://<biz-node1外网IP>:30000/health # 引擎服务健康检查,应返回"ok"
# 验证业务节点2服务
curl http://<biz-node2外网IP>:26000
curl http://<biz-node2外网IP>:30000/health
# 验证基础设施服务(内部访问)
curl http://192.168.1.12:11434/v1 # Embedding服务,应返回API文档
主从数据同步验证
验证PostgreSQL主从复制是否正常(在infra-node节点执行):
# 进入PostgreSQL主库容器
docker exec -it infrastructure-master-postgres-1 bash
# 连接数据库,查看从库状态(需显示backup-node节点信息)
psql -U postgres
SELECT client_addr, state FROM pg_stat_replication;
# 若显示state为"streaming",说明主从同步正常
负载均衡验证
配置外部负载均衡器指向biz-node1和biz-node2的30000端口后,执行:
# 多次执行,验证请求是否分发到不同节点
curl http://<负载均衡器IP>:30000/hostname
# 应交替返回biz-node1和biz-node2的主机标识
故障排除
常见问题
- 端口冲突:使用
netstat -tulpn
检查端口占用情况,确保部署的端口未被其他服务占用 - 权限问题:执行
usermod -aG docker $USER
将当前用户加入docker用户组,避免权限不足 - 网络连通性:通过
traceroute
排查节点间网络不通问题,确保内网防火墙规则允许相关端口通信 - 数据同步失败:检查backup-node与infra-node的SSH免密配置,验证同步服务日志
docker logs data-sync-1
- 业务服务启动失败:确认.env文件中基础设施连接参数正确,特别是数据库密码与IP地址是否匹配
- 时间同步异常:执行
chronyc sources
检查时间服务器连接状态,确保所有节点时间偏差≤1秒