#!/bin/bash set -e echo "正在启动AI Dressing服务..." # 检查是否存在.env文件,不存在则使用内置的.env.built if [ ! -f ".env" ]; then echo "未找到.env文件,使用构建时创建的.env.built文件" if [ -f ".env.built" ]; then cp .env.built .env echo "已复制.env.built到.env" else echo "警告:未找到.env.built文件,将使用系统环境变量" fi else echo "使用已存在的.env文件" fi # 输出关键环境变量(隐藏敏感信息) echo "检查关键环境变量:" # 数据库配置 if [ -n "$DB_HOST" ]; then echo "- DB_HOST: 已设置 ✓" else echo "- DB_HOST: 未设置 ❌" fi if [ -n "$DB_PORT" ]; then echo "- DB_PORT: 已设置 ✓" else echo "- DB_PORT: 未设置 ❌" fi if [ -n "$DB_NAME" ]; then echo "- DB_NAME: 已设置 ✓" else echo "- DB_NAME: 未设置 ❌" fi # API密钥 if [ -n "$DASHSCOPE_API_KEY" ]; then echo "- DASHSCOPE_API_KEY: 已设置(已隐藏) ✓" else echo "- DASHSCOPE_API_KEY: 未设置 ❌" fi if [ -n "$QCLOUD_SECRET_ID" ] && [ -n "$QCLOUD_SECRET_KEY" ]; then echo "- 腾讯云凭证: 已设置(已隐藏) ✓" else echo "- 腾讯云凭证: 未设置 ❌" fi # 检查依赖服务连接 echo "检查数据库连接..." MAX_RETRIES=10 COUNT=0 if [ -n "$DB_HOST" ] && [ -n "$DB_PORT" ]; then while [ $COUNT -lt $MAX_RETRIES ]; do if nc -z -w3 $DB_HOST $DB_PORT; then echo "数据库连接成功!" break fi echo "等待数据库连接... ($((COUNT+1))/$MAX_RETRIES)" COUNT=$((COUNT+1)) sleep 2 done if [ $COUNT -eq $MAX_RETRIES ]; then echo "警告:无法连接到数据库。服务将继续启动,但可能无法正常工作。" fi else echo "跳过数据库连接检查:未设置DB_HOST或DB_PORT" fi # 应用数据库迁移 echo "应用数据库迁移..." if [ -f "create_migration.py" ]; then python create_migration.py upgrade || echo "警告:数据库迁移失败,但将继续启动服务" else echo "未找到create_migration.py,跳过数据库迁移" fi # 启动服务 echo "AI Dressing服务启动中..." # 根据环境变量决定是否使用热重载 if [ "$ENV" = "development" ]; then echo "以开发模式启动,启用热重载..." exec uvicorn app.main:app --host 0.0.0.0 --port 8000 --reload else echo "以生产模式启动..." exec uvicorn app.main:app --host 0.0.0.0 --port 8000 --workers 4 fi