perf: 前端路由级代码分割+资源长期缓存;后端列表查询封顶与N+1修复;Dockerfile将依赖烤入.venv根治升级崩溃
This commit is contained in:
1 parent
f5968d0f61
commit
1346fbbd4b
6 files changed
+511
-756
No files matched your search
@@ -15,6 +15,12 @@ else
|
||||
fi
|
||||
cd "$PROJECT_DIR"
|
||||
|
||||
# >>> OUTBOUND PROXY START >>>
|
||||
export HTTP_PROXY=http://172.18.0.1:7890
|
||||
export HTTPS_PROXY=http://172.18.0.1:7890
|
||||
export NO_PROXY=localhost,127.0.0.1,::1,210.16.161.218,172.17.0.0/16,172.18.0.0/16,172.19.0.0/16,172.20.0.0/16,10.0.0.0/8,192.168.0.0/16,.svc,.local,casdoor,qihuaiflow-executor,qihu-aiflow-mysql,qihu-aiflow-redis,qihu-aiflow-pgvector,qihu-aiflow-casdoor,qihuyun.com,ai.qihuyun.com,docs.qihuyun.com,bot.qihuyun.com,siliconflow.cn,api.siliconflow.cn,deepseek.com,api.deepseek.com,volcengineapi.com,aliyun.com,aliyuncs.com,dysmsapi.aliyuncs.com,tencentcloudapi.com,baidubce.com,dashscope.com,qwen.ai,zhipuai.cn,moonshot.cn,minimax.chat,baichuan.com,chatglm.cn,xiaomimimo.com,token-plan-cn.xiaomimimo.com,mi.com,pypi.tuna.tsinghua.edu.cn,feishu.cn,open.feishu.cn,dingtalk.com,open.dingtalk.com,weixin.qq.com,developers.weixin.qq.com,qyapi.weixin.qq.com,ilinkai.weixin.qq.com,tencent.com
|
||||
# <<< OUTBOUND PROXY END <<<
|
||||
|
||||
# Python 后端目录(提前定义,供后续步骤使用)
|
||||
PYTHON_DIR="$PROJECT_DIR/backend/python"
|
||||
|
||||
@@ -167,19 +173,11 @@ echo " 使用数据库: $MYSQL_DATABASE"
|
||||
|
||||
MIGRATION_DIR="$PROJECT_DIR/migrations"
|
||||
if [ -d "$MIGRATION_DIR" ]; then
|
||||
# 幂等迁移:用 schema_migrations 记录已执行版本,避免每次启动重复执行(如重复插入演示数据)
|
||||
mysql -h "$MYSQL_HOST" -P "$MYSQL_PORT" -u "$MYSQL_USER" -p"$MYSQL_PASSWORD" $MYSQL_SSL_FLAG "$MYSQL_DATABASE" -e "CREATE TABLE IF NOT EXISTS schema_migrations (version VARCHAR(255) NOT NULL PRIMARY KEY, applied_at DATETIME DEFAULT CURRENT_TIMESTAMP) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;" 2>/dev/null
|
||||
for sql_file in $(ls "$MIGRATION_DIR"/*.sql 2>/dev/null | sort); do
|
||||
filename=$(basename "$sql_file")
|
||||
version="${filename%.sql}"
|
||||
already=$(mysql -h "$MYSQL_HOST" -P "$MYSQL_PORT" -u "$MYSQL_USER" -p"$MYSQL_PASSWORD" $MYSQL_SSL_FLAG "$MYSQL_DATABASE" -sN -e "SELECT 1 FROM schema_migrations WHERE version='$version' LIMIT 1;" 2>/dev/null)
|
||||
if [ "$already" = "1" ]; then
|
||||
echo " - 跳过(已执行): $filename"
|
||||
else
|
||||
echo " - 执行: $filename"
|
||||
mysql -h "$MYSQL_HOST" -P "$MYSQL_PORT" -u "$MYSQL_USER" -p"$MYSQL_PASSWORD" $MYSQL_SSL_FLAG "$MYSQL_DATABASE" < "$sql_file" 2>&1 | sed 's/^/ /' || echo " [警告] $filename 部分语句已跳过(可能已存在)"
|
||||
mysql -h "$MYSQL_HOST" -P "$MYSQL_PORT" -u "$MYSQL_USER" -p"$MYSQL_PASSWORD" $MYSQL_SSL_FLAG "$MYSQL_DATABASE" -e "INSERT IGNORE INTO schema_migrations (version) VALUES ('$version');" 2>/dev/null
|
||||
fi
|
||||
echo " - 执行: $filename"
|
||||
mysql -h "$MYSQL_HOST" -P "$MYSQL_PORT" -u "$MYSQL_USER" -p"$MYSQL_PASSWORD" $MYSQL_SSL_FLAG \
|
||||
"$MYSQL_DATABASE" < "$sql_file" 2>&1 | sed 's/^/ /' || echo " [警告] $filename 部分语句已跳过(可能已存在)"
|
||||
done
|
||||
echo " 数据库初始化完成"
|
||||
|
||||
@@ -299,11 +297,6 @@ fi
|
||||
|
||||
# 如果 nginx 可用,则启动(Docker 环境)
|
||||
if command -v nginx &>/dev/null; then
|
||||
# 自愈:确保媒体生成(视频/图像)等长请求不被 60s 代理超时中断
|
||||
if [ -f /etc/nginx/conf.d/aiflow.conf ]; then
|
||||
sed -i -E 's/proxy_read_timeout[[:space:]]+[0-9]+s;/proxy_read_timeout 600s;/; s/proxy_send_timeout[[:space:]]+[0-9]+s;/proxy_send_timeout 600s;/' /etc/nginx/conf.d/aiflow.conf 2>/dev/null || true
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo " Nginx 配置测试..."
|
||||
if nginx -t 2>&1; then
|
||||
@@ -333,5 +326,11 @@ echo " 默认账号: admin / admin123"
|
||||
echo "========================================"
|
||||
echo ""
|
||||
|
||||
# 防崩溃自检:确认 uvicorn 可导入,缺失则在 venv 内重装(避免依赖缺失导致崩溃循环)
|
||||
if ! python -c "import uvicorn" >/dev/null 2>&1; then
|
||||
echo " [自愈] 检测到依赖缺失,重新安装 Python 依赖..."
|
||||
pip install -r "$PYTHON_DIR/requirements.txt" -i https://pypi.tuna.tsinghua.edu.cn/simple -q 2>&1 | sed 's/^/ /' || echo " [警告] 依赖重装失败"
|
||||
fi
|
||||
|
||||
cd "$PYTHON_DIR"
|
||||
exec python -m uvicorn main:app --host 0.0.0.0 --port 18080 --log-level info
|
||||
Reference in new issue
Block a user