chore: 清理 scripts 目录,保留核心运维和部署脚本
## 变更内容 ### 保留的核心运维脚本 - ✅ start.sh - 启动服务 - ✅ stop.sh - 停止服务 - ✅ init-pgvector.sql - 数据库初始化 ### 保留的部署工具 - ✅ deploy-production.sh - 生产环境部署 - ✅ backup-production.sh - 生产环境备份 - ✅ set-contact-token.sh - 设置联系令牌 - ✅ set-remote-contact-token.sh - 设置远程令牌 - ✅ verify-contact-token.sh - 验证令牌 ### 删除的临时调试脚本 - ❌ debug-webhook.sh - 实时监控日志 - ❌ check-conversations.sh - 检查会话 - ❌ check-chatwoot-config.sh - 检查配置 - ❌ verify-webhook.sh - 验证webhook - ❌ update-chatwoot-webhook.sh - 更新webhook Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
195
scripts/deploy-production.sh
Executable file
195
scripts/deploy-production.sh
Executable file
@@ -0,0 +1,195 @@
|
||||
#!/bin/bash
|
||||
# B2B Shopping AI Assistant - Production Deployment Script
|
||||
# 生产环境部署脚本
|
||||
|
||||
set -e # 遇到错误立即退出
|
||||
|
||||
# 颜色输出
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
# 日志函数
|
||||
log_info() {
|
||||
echo -e "${GREEN}[INFO]${NC} $1"
|
||||
}
|
||||
|
||||
log_warn() {
|
||||
echo -e "${YELLOW}[WARN]${NC} $1"
|
||||
}
|
||||
|
||||
log_error() {
|
||||
echo -e "${RED}[ERROR]${NC} $1"
|
||||
}
|
||||
|
||||
# 检查必要的命令
|
||||
check_requirements() {
|
||||
log_info "检查系统依赖..."
|
||||
|
||||
if ! command -v docker &> /dev/null; then
|
||||
log_error "Docker 未安装,请先安装 Docker"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if ! command -v docker-compose &> /dev/null; then
|
||||
log_error "Docker Compose 未安装,请先安装 Docker Compose"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
log_info "系统依赖检查完成"
|
||||
}
|
||||
|
||||
# 检查环境变量文件
|
||||
check_env_file() {
|
||||
log_info "检查环境变量文件..."
|
||||
|
||||
if [ ! -f .env.production ]; then
|
||||
log_error ".env.production 文件不存在"
|
||||
log_info "请复制 .env.production.example 并填写真实值:"
|
||||
log_info " cp .env.production.example .env.production"
|
||||
log_info " vim .env.production"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 检查必要的环境变量
|
||||
source .env.production
|
||||
|
||||
required_vars=(
|
||||
"ZHIPU_API_KEY"
|
||||
"CHATWOOT_API_TOKEN"
|
||||
"HYPERF_API_URL"
|
||||
"MALL_API_URL"
|
||||
"REDIS_PASSWORD"
|
||||
)
|
||||
|
||||
missing_vars=()
|
||||
for var in "${required_vars[@]}"; do
|
||||
if [ -z "${!var}" ] || [[ "${!var}" == *"your_"*"_here" ]]; then
|
||||
missing_vars+=("$var")
|
||||
fi
|
||||
done
|
||||
|
||||
if [ ${#missing_vars[@]} -ne 0 ]; then
|
||||
log_error "以下环境变量未设置或使用默认值:"
|
||||
for var in "${missing_vars[@]}"; do
|
||||
log_error " - $var"
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
log_info "环境变量检查完成"
|
||||
}
|
||||
|
||||
# 构建镜像
|
||||
build_images() {
|
||||
log_info "开始构建 Docker 镜像..."
|
||||
|
||||
docker-compose -f docker-compose.prod.yml build --no-cache
|
||||
|
||||
log_info "Docker 镜像构建完成"
|
||||
}
|
||||
|
||||
# 停止现有服务
|
||||
stop_services() {
|
||||
log_info "停止现有服务..."
|
||||
|
||||
docker-compose -f docker-compose.prod.yml down
|
||||
|
||||
log_info "现有服务已停止"
|
||||
}
|
||||
|
||||
# 启动服务
|
||||
start_services() {
|
||||
log_info "启动生产环境服务..."
|
||||
|
||||
docker-compose -f docker-compose.prod.yml up -d
|
||||
|
||||
log_info "服务启动完成"
|
||||
}
|
||||
|
||||
# 健康检查
|
||||
health_check() {
|
||||
log_info "等待服务启动..."
|
||||
|
||||
sleep 10
|
||||
|
||||
# 检查 Agent 服务
|
||||
if curl -f http://localhost:8000/health &> /dev/null; then
|
||||
log_info "✅ Agent 服务健康检查通过"
|
||||
else
|
||||
log_error "❌ Agent 服务健康检查失败"
|
||||
return 1
|
||||
fi
|
||||
|
||||
# 检查 MCP 服务
|
||||
mcp_ports=(8001 8002 8003 8004)
|
||||
for port in "${mcp_ports[@]}"; do
|
||||
if curl -f http://localhost:$port/health &> /dev/null; then
|
||||
log_info "✅ MCP 服务 (端口 $port) 健康检查通过"
|
||||
else
|
||||
log_warn "⚠️ MCP 服务 (端口 $port) 健康检查失败"
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
# 查看服务状态
|
||||
show_status() {
|
||||
log_info "服务状态:"
|
||||
docker-compose -f docker-compose.prod.yml ps
|
||||
}
|
||||
|
||||
# 查看日志
|
||||
show_logs() {
|
||||
log_info "最近的日志:"
|
||||
docker-compose -f docker-compose.prod.yml logs --tail=50
|
||||
}
|
||||
|
||||
# 主函数
|
||||
main() {
|
||||
log_info "========================================"
|
||||
log_info "B2B Shopping AI Assistant - 生产环境部署"
|
||||
log_info "========================================"
|
||||
echo ""
|
||||
|
||||
# 检查参数
|
||||
if [ "$1" == "--skip-build" ]; then
|
||||
log_warn "跳过镜像构建步骤"
|
||||
else
|
||||
check_requirements
|
||||
check_env_file
|
||||
build_images
|
||||
fi
|
||||
|
||||
stop_services
|
||||
start_services
|
||||
|
||||
log_info "等待服务就绪..."
|
||||
sleep 15
|
||||
|
||||
if health_check; then
|
||||
log_info "========================================"
|
||||
log_info "✅ 部署成功!"
|
||||
log_info "========================================"
|
||||
echo ""
|
||||
log_info "服务地址:"
|
||||
log_info " - Agent: http://localhost:8000"
|
||||
log_info " - Strapi MCP: http://localhost:8001"
|
||||
log_info " - Order MCP: http://localhost:8002"
|
||||
log_info " - After MCP: http://localhost:8003"
|
||||
log_info " - Product MCP: http://localhost:8004"
|
||||
echo ""
|
||||
log_info "查看日志:"
|
||||
log_info " docker-compose -f docker-compose.prod.yml logs -f"
|
||||
echo ""
|
||||
log_info "查看状态:"
|
||||
log_info " docker-compose -f docker-compose.prod.yml ps"
|
||||
else
|
||||
log_error "部署失败,请检查日志"
|
||||
show_logs
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
# 执行主函数
|
||||
main "$@"
|
||||
Reference in New Issue
Block a user