5f3d414a48
- 新增 .dockerignore,减少构建上下文体积 - 修复 Dockerfile 缺失 config/ 目录复制 - docker-compose.test.yml: DEBUG=false, ENV=production, SECRET_KEY 强制传入 - 新增 docker-compose.dev.yml(开发专用)和 docker-compose.prod.yml(生产专用) - deploy-test.sh: 加入 SECRET_KEY 强制检查,统一步骤编号
130 lines
3.8 KiB
Bash
130 lines
3.8 KiB
Bash
#!/bin/bash
|
|
# 美家卡智影 - 测试服一键部署脚本
|
|
# ================================
|
|
# 用法:
|
|
# chmod +x deploy-test.sh
|
|
# ./deploy-test.sh
|
|
|
|
set -e
|
|
|
|
echo "========================================"
|
|
echo " 美家卡智影 - 测试服部署"
|
|
echo "========================================"
|
|
|
|
# 配置
|
|
PROJECT_DIR="/opt/meijiaka-zy"
|
|
GIT_REPO="http://git2.haodian.cn/xiaoyu/meijiaka-zy.git"
|
|
API_PORT=8081
|
|
|
|
# 1. 检查 Docker
|
|
echo "[1/7] 检查 Docker 环境..."
|
|
if ! command -v docker &> /dev/null; then
|
|
echo "Docker 未安装,请先安装 Docker"
|
|
exit 1
|
|
fi
|
|
if ! command -v docker-compose &> /dev/null && ! docker compose version &> /dev/null; then
|
|
echo "Docker Compose 未安装,请先安装 Docker Compose"
|
|
exit 1
|
|
fi
|
|
|
|
echo "Docker 版本: $(docker --version)"
|
|
docker compose version || echo "docker-compose 版本: $(docker-compose --version)"
|
|
|
|
# 2. 克隆/更新代码
|
|
echo "[2/7] 更新代码..."
|
|
if [ -d "$PROJECT_DIR/.git" ]; then
|
|
cd "$PROJECT_DIR"
|
|
git pull origin master
|
|
else
|
|
git clone "$GIT_REPO" "$PROJECT_DIR"
|
|
cd "$PROJECT_DIR"
|
|
fi
|
|
|
|
# 3. 创建数据目录
|
|
echo "[3/7] 创建数据目录..."
|
|
mkdir -p /opt/meijiaka-zy/data/{postgres,redis,logs}
|
|
chmod 755 /opt/meijiaka-zy/data
|
|
|
|
# 4. 检查环境变量
|
|
echo "[4/7] 检查环境变量..."
|
|
cd "$PROJECT_DIR/python-api"
|
|
|
|
if [ ! -f ".env" ]; then
|
|
echo "⚠️ .env 文件不存在,从 .env.example 复制..."
|
|
if [ -f ".env.example" ]; then
|
|
cp .env.example .env
|
|
echo "⚠️ 请编辑 .env 文件,填入实际的 API Key 后再重新运行此脚本"
|
|
echo " vim $PROJECT_DIR/python-api/.env"
|
|
exit 1
|
|
else
|
|
echo "❌ .env.example 也不存在,请手动创建 .env 文件"
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
# 检查关键环境变量
|
|
MISSING_VARS=()
|
|
for var in SECRET_KEY VOLCENGINE_API_KEY KLINGAI_ACCESS_KEY KLINGAI_SECRET_KEY; do
|
|
if ! grep -q "^$var=" .env || grep -q "^$var=\$" .env; then
|
|
MISSING_VARS+=($var)
|
|
fi
|
|
done
|
|
|
|
if [ ${#MISSING_VARS[@]} -gt 0 ]; then
|
|
echo "⚠️ .env 中缺少以下关键环境变量:"
|
|
for var in "${MISSING_VARS[@]}"; do
|
|
echo " - $var"
|
|
done
|
|
echo " 请编辑 .env 文件填入后再部署"
|
|
exit 1
|
|
fi
|
|
|
|
echo "✅ 环境变量检查通过"
|
|
|
|
# 5. 构建镜像
|
|
echo "[5/7] 构建 Docker 镜像..."
|
|
docker compose -f docker-compose.test.yml build --no-cache
|
|
|
|
# 6. 启动服务
|
|
echo "[6/7] 启动服务..."
|
|
docker compose -f docker-compose.test.yml down 2>/dev/null || true
|
|
docker compose -f docker-compose.test.yml up -d
|
|
|
|
# 7. 等待并验证
|
|
echo "[7/7] 等待服务启动..."
|
|
sleep 5
|
|
|
|
MAX_RETRY=12
|
|
RETRY=0
|
|
while [ $RETRY -lt $MAX_RETRY ]; do
|
|
if curl -s http://localhost:$API_PORT/health | grep -q "healthy"; then
|
|
echo ""
|
|
echo "========================================"
|
|
echo " ✅ 测试服部署成功!"
|
|
echo "========================================"
|
|
echo " API 地址: http://<服务器IP>:$API_PORT"
|
|
echo " 健康检查: http://<服务器IP>:$API_PORT/health"
|
|
echo " API 文档: http://<服务器IP>:$API_PORT/docs"
|
|
echo " 数据库: localhost:5432 (meijiaka_zy)"
|
|
echo " Redis: localhost:6379 (db 0)"
|
|
echo ""
|
|
echo " 查看日志:"
|
|
echo " docker logs -f meijiaka-zy-api"
|
|
echo " docker logs -f meijiaka-zy-scheduler"
|
|
echo ""
|
|
echo " 常用命令:"
|
|
echo " cd $PROJECT_DIR/python-api"
|
|
echo " docker compose -f docker-compose.test.yml logs -f"
|
|
echo " docker compose -f docker-compose.test.yml restart api"
|
|
echo "========================================"
|
|
exit 0
|
|
fi
|
|
RETRY=$((RETRY + 1))
|
|
echo " 等待服务就绪... ($RETRY/$MAX_RETRY)"
|
|
sleep 3
|
|
done
|
|
|
|
echo "❌ 服务启动超时,请检查日志:"
|
|
echo " docker logs meijiaka-zy-api"
|
|
exit 1
|