This commit is contained in:
yumoqing 2026-05-27 16:07:58 +08:00
parent 6c3ff0c7aa
commit 147b5e94c3
3 changed files with 3 additions and 150 deletions

View File

@ -29,6 +29,7 @@ from global_func import set_globalvariable
from unipay.init import load_unipay
from platformbiz.init import load_platformbiz
from product_management.init import load_product_management
from supplychain.init import load_supplychain
from accounting.init import load_accounting
from smssend import load_smssend
from ext import *
@ -45,6 +46,7 @@ def init():
load_unipay()
load_platformbiz()
load_product_management()
load_supplychain()
load_filemgr()
load_llmage()
load_uapi()

View File

@ -26,7 +26,7 @@ do
cd $m
$cdir/py3/bin/pip install .
done
for m in appbase rbac accounting llmage platformbiz msp cpcc unipay filemgr dapi uapi rag charge pricing discount harnessed_agent harnessed_reasoning dashboard_for_sage product_management
for m in appbase rbac accounting llmage platformbiz msp cpcc unipay filemgr dapi uapi rag charge pricing discount harnessed_agent harnessed_reasoning dashboard_for_sage product_management supplychain
do
echo "install $m module..."
cd $cdir/pkgs

149
start.sh
View File

@ -1,149 +0,0 @@
#!/bin/bash
# Sage Web Application Start Script
# 多进程支持: 端口复用 + 独立后台程序
#
# 架构说明:
# 1. 独立后台程序 (bin/*.py) - 每个只启动一次,避免重复
# 2. Sage Web Workers - 根据CPU核心数启动多个worker使用端口复用
set -e
# 切换到脚本所在目录
cd "$(dirname "$0")"
# 本地开发环境变量(占位值,生产环境由系统配置)
export ALIPAY_PUB="$(pwd)/alipay_pub.pem"
export ALIPAY_PRIV="$(pwd)/alipay_priv.pem"
export BAIDU_SMS_ACCESS_KEY="dev-placeholder"
export BAIDU_SMS_ACCESS_KEY_SECRET="dev-placeholder"
export BAIDU_SMS_HOST="smsv3.bj.baidubce.com"
export BAIDU_SMS_SIGNATURE_ID="dev-placeholder"
# 配置
WORKDIR="$(pwd)"
PYTHON="./py3/bin/python"
APP_ENTRY="app/sage.py"
PIDFILE="$WORKDIR/sage.pid"
LOGDIR="$WORKDIR/logs"
BINPIDFILE="$WORKDIR/sage_backend.pid"
# 确保logs目录存在
mkdir -p "$LOGDIR"
# 检查Python是否存在
if [ ! -f "$PYTHON" ]; then
echo "错误: 找不到Python解释器 $PYTHON"
echo "请确保已安装虚拟环境: ./py3/bin/python"
exit 1
fi
# 检查应用入口文件是否存在
if [ ! -f "$APP_ENTRY" ]; then
echo "错误: 找不到应用入口文件 $APP_ENTRY"
exit 1
fi
# 检查Redis是否运行session存储依赖
if command -v redis-cli &> /dev/null; then
if ! redis-cli ping &> /dev/null; then
echo "Redis未运行正在启动Redis..."
redis-server --daemonize yes
sleep 1
if redis-cli ping &> /dev/null; then
echo "Redis启动成功"
else
echo "警告: Redis启动失败登录功能可能无法正常工作"
fi
else
echo "Redis运行正常"
fi
fi
echo "========================================="
echo "启动 Sage Web Application"
echo "工作目录: $WORKDIR"
echo "Python: $PYTHON"
echo "========================================="
# 获取端口
PORT=9180
if command -v python3 &> /dev/null; then
PORT=$($PYTHON -c "
import json
try:
with open('$WORKDIR/conf/config.json') as f:
config = json.load(f)
print(config.get('website', {}).get('port', 9180))
except Exception as e:
print(9180)
" 2>/dev/null || echo 9180)
fi
# =========================================
# 步骤 1: 启动独立后台程序
# =========================================
echo ""
echo "--- 启动独立后台程序 ---"
# 清空后台程序 PID 文件
> "$BINPIDFILE"
# 1.1 启动 LLM 后台计费程序
if [ -f "$WORKDIR/bin/backend_accounting.py" ]; then
LOGFILE="$LOGDIR/backend_accounting.log"
echo ">>> 启动 backend_accounting ..."
nohup $PYTHON "$WORKDIR/bin/backend_accounting.py" > "$LOGFILE" 2>&1 &
PID=$!
echo "backend_accounting:$PID" >> "$BINPIDFILE"
sleep 0.5
if kill -0 $PID 2>/dev/null; then
echo " -> backend_accounting PID: $PID (成功)"
else
echo " -> 警告: backend_accounting 启动失败,查看 $LOGFILE"
fi
fi
# =========================================
# 步骤 2: 启动 Sage Web Workers (端口复用)
# =========================================
echo ""
echo "--- 启动 Sage Web Workers (端口复用) ---"
# 获取 CPU 核心数,决定启动多少 Worker
WORKERS=$(nproc)
echo "检测到 ${WORKERS} 个 CPU 核心,准备启动 ${WORKERS} 个 worker 进程..."
echo "所有 worker 共享端口 ${PORT} (SO_REUSEPORT)"
# 清空 Worker PID 文件
> "$PIDFILE"
# 循环启动 Worker
for (( i=0; i<WORKERS; i++ ))
do
LOGFILE="$LOGDIR/sage_worker_${i}.log"
echo ">>> 启动 Worker $((i+1))/${WORKERS} on port $PORT ..."
# 启动服务 - 所有worker使用相同端口依赖ahserver的SO_REUSEPORT支持
nohup $PYTHON $APP_ENTRY --workdir "$WORKDIR" --port $PORT > "$LOGFILE" 2>&1 &
APP_PID=$!
# 保存 PID
echo "$APP_PID" >> "$PIDFILE"
# 短暂等待以检查是否立即崩溃
sleep 1
if kill -0 $APP_PID 2>/dev/null; then
echo " -> Worker PID: $APP_PID (成功)"
else
echo " -> 错误: Worker 启动失败,请查看 $LOGFILE"
fi
done
echo ""
echo "========================================="
echo "所有服务已启动"
echo "Worker PID 文件: $PIDFILE"
echo "Backend PID 文件: $BINPIDFILE"
echo "访问地址: http://localhost:${PORT}"
echo "========================================="