DeltaFStation 宝塔 Linux 部署教程

DeltaFStation 宝塔 Linux 部署教程

基于实际部署验证 · Alibaba Cloud Linux 3 + 宝塔面板 · 2026-08-15


目录

  1. 环境要求
  2. [安装 Python 3.12](#安装 Python 3.12)
  3. [编译安装 TA-Lib C 库](#编译安装 TA-Lib C 库)
  4. 克隆项目
  5. 创建虚拟环境并安装依赖
  6. [配置 Supervisor 守护](#配置 Supervisor 守护)
  7. [配置 Nginx 反向代理](#配置 Nginx 反向代理)
  8. 日常运维命令
  9. 常见问题排查
  10. 附录:关键路径速查

一、环境要求

项目 要求
操作系统 Alibaba Cloud Linux 3 / CentOS 8 / Ubuntu 20.04+(需已装宝塔面板)
Python 3.12(推荐,3.10 也可用,3.6 不行)
宝塔面板 7.x+,需安装 Supervisor 管理器
内存 2GB+(TA-Lib 编译 + numpy/pandas 需要内存)
磁盘 5GB+ 可用空间

关键踩坑点: 系统自带的 Python 3.6.8 太旧,blinker>=1.6.2 等依赖装不上。必须先装 Python 3.12。
关于宝塔 Python 管理器的坑: 宝塔「Python 项目管理器」从云端拉版本列表时可能报 xml.etree ParseError,这是宝塔自身的 bug。遇到时改用命令行编译安装 Python 3.12。


二、安装 Python 3.12

方式 A:宝塔 Python 项目管理器(推荐,如果不出 bug)

  1. 宝塔 → 软件商店 → 搜索「Python 项目管理器」→ 安装
  2. 打开 Python 项目管理器 → 版本管理 → 选 3.12.0 → 安装
  3. 自定义参数留空,直接点「确定」
  4. 等待编译完成(约 10-20 分钟,取决于 CPU 核数)

安装完成后,Python 3.12 路径为:

bash 复制代码
# 查看宝塔安装的版本目录
ls /www/server/python_manager/versions/
# 输出示例: 3.12.0

# 完整路径
/www/server/python_manager/versions/3.12.0/bin/python3.12

方式 B:命令行源码编译(宝塔出 bug 时用)

bash 复制代码
# 安装编译依赖
dnf install -y gcc make openssl-devel bzip2-devel libffi-devel \
    zlib-devel readline-devel sqlite-devel xz-devel tk-devel wget perl

# 下载并编译 Python 3.12.7(约 3-5 分钟)
cd /usr/local/src
wget https://www.python.org/ftp/python/3.12.7/Python-3.12.7.tgz
tar -xzf Python-3.12.7.tgz
cd Python-3.12.7
./configure --enable-optimizations --prefix=/usr/local
make -j$(nproc)
make altinstall

# 验证
/usr/local/bin/python3.12 --version
# 应输出: Python 3.12.7

验证 Python 安装: 无论哪种方式,执行 python3.12 --version 能输出版本号即成功。如果提示 command not found,用 find / -name "python3.12" -type f 2>/dev/null 查找实际路径。


三、编译安装 TA-Lib C 库

最易踩坑的依赖: pip install TA-Lib 在 Linux 上 99% 会失败,因为缺 C 库。必须先编译安装 TA-Lib 的 C 库,再 pip 装 Python 绑定。

bash 复制代码
# 检查是否已安装
ldconfig -p | grep libta_lib

# 如果没有,开始编译(约 1-2 分钟)
cd /usr/local/src
wget http://prdownloads.sourceforge.net/ta-lib/ta-lib-0.4.0-src.tar.gz
tar -xzf ta-lib-0.4.0-src.tar.gz
cd ta-lib
./configure --prefix=/usr
make -j$(nproc)
make install
ldconfig

# 验证
ldconfig -p | grep libta_lib
# 应输出: libta_lib.so.0 -> /usr/lib/libta_lib.so.0

已安装会跳过: 后续重跑部署时,如果 ldconfig -p | grep libta_lib 有输出,说明 C 库已装好,可跳过这步。


四、克隆项目

bash 复制代码
# 克隆到宝塔站点目录(优先 gitcode,国内快)
cd /www/wwwroot
git clone https://gitcode.com/weixin_48616345/deltafstation.git
# 如果 gitcode 失败,回退 GitHub
# git clone https://github.com/Delta-F/deltafstation.git

cd /www/wwwroot/deltafstation

# 创建数据与日志目录
mkdir -p data/raw data/processed data/results data/strategies data/simulations logs

五、创建虚拟环境并安装依赖

bash 复制代码
# 设置 PYTHON_BIN 为你的 Python 3.12 路径
# 宝塔安装的:
PYTHON_BIN=/www/server/python_manager/versions/3.12.0/bin/python3.12
# 命令行编译的:
# PYTHON_BIN=/usr/local/bin/python3.12

# 创建虚拟环境
$PYTHON_BIN -m venv /www/wwwroot/deltafstation/venv

# 激活
source /www/wwwroot/deltafstation/venv/bin/activate

# 升级 pip
pip install --upgrade pip -i https://pypi.tuna.tsinghua.edu.cn/simple

# 安装依赖(用清华源加速)
pip install -r /www/wwwroot/deltafstation/requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple

安装成功后会显示类似:

复制代码
Successfully installed Flask-3.1.3 TA-Lib-0.7.1 numpy-2.5.2 pandas-2.3.3 ... # 共 73 个包

验证项目能否启动

bash 复制代码
cd /www/wwwroot/deltafstation
FLASK_ENV=production PORT=5000 HOST=127.0.0.1 python run.py

看到以下输出即成功(Ctrl+C 退出):

复制代码
==================================================
DeltaFStation 量化交易系统 v1.3.0
==================================================
启动地址: http://127.0.0.1:5000
调试模式: 关闭
自动重载: 关闭
==================================================
 * Running on http://127.0.0.1:5000

关于 miniQMT 报错: 启动时会出现 miniQMT connect failed: requires xtquant,这是正常的------你没有连 QMT 客户端,不影响数据/回测/模拟/AI 功能。


六、配置 Supervisor 守护

创建启动脚本

宝塔 Supervisor 的坑: 宝塔的 Supervisor 管理器界面没有环境变量输入框,需用包装脚本绕过。

bash 复制代码
# 创建启动脚本,把环境变量写在脚本里
cat > /www/wwwroot/deltafstation/start_prod.sh << 'EOF'
#!/bin/bash
export FLASK_ENV=production
export PORT=5000
export HOST=0.0.0.0
export FLASK_USE_RELOADER=0
cd /www/wwwroot/deltafstation
exec /www/wwwroot/deltafstation/venv/bin/python run.py
EOF
chmod +x /www/wwwroot/deltafstation/start_prod.sh
变量 说明
FLASK_ENV 运行模式 production(关闭 debug)
PORT Flask 监听端口 5000
HOST 监听地址 0.0.0.0(对外)或 127.0.0.1(仅 Nginx 反代)
FLASK_USE_RELOADER 热重载 0(生产关闭)

HOST 怎么选: 如果配 Nginx 反向代理用 127.0.0.1(更安全);如果直连端口访问用 0.0.0.0(需放行 5000 端口)。

在宝塔 Supervisor 管理器中添加

  1. 宝塔 → 软件商店 → 搜索「Supervisor 管理器」→ 安装
  2. 打开 Supervisor 管理器 → 添加守护进程
字段 填写内容
名称 deltafstation(必须英文)
启动用户 root
运行目录 /www/wwwroot/deltafstation
启动命令 /www/wwwroot/deltafstation/start_prod.sh
进程数量 1
备注 DeltaFStation 量化系统

点击「确定」后,状态应显示为 RUNNING

命令行方式(替代图形界面)

bash 复制代码
# 写配置文件
mkdir -p /www/server/supervisor/conf.d
cat > /www/server/supervisor/conf.d/deltafstation.ini << 'EOF'
[program:deltafstation]
command=/www/wwwroot/deltafstation/start_prod.sh
directory=/www/wwwroot/deltafstation
user=root
autostart=true
autorestart=true
startsecs=5
stopwaitsecs=30
stopsignal=TERM
stdout_logfile=/www/wwwroot/deltafstation/logs/supervisor_out.log
stderr_logfile=/www/wwwroot/deltafstation/logs/supervisor_err.log
stdout_logfile_maxbytes=20MB
stdout_logfile_backups=5
redirect_stderr=false
EOF

# 重载并启动
/www/server/supervisor/bin/supervisorctl update
/www/server/supervisor/bin/supervisorctl status deltafstation

命令行坑: 宝塔的 Supervisor 不在系统 PATH 里,直接执行 supervisorctl 会报 command not found。必须用完整路径 /www/server/supervisor/bin/supervisorctl


七、配置 Nginx 反向代理

方式 A:宝塔反向代理(推荐,简单)

  1. 宝塔 → 网站 → 添加站点 → 顶部选「反向代理」
  2. 填写:
字段 填写内容
域名 你的域名或服务器 IP(如 101.200.180.38
目标 下拉选「URL地址」,填 http://127.0.0.1:5000
发送域名(host) $http_host(默认)
备注 deltafstation

创建后,必须补充 SSE 配置(否则日志流和 AI 对话流式响应会失效):

bash 复制代码
# 找到反代配置文件
CONF=$(grep -rl "127.0.0.1:5000" /www/server/panel/vhost/nginx/ | head -1)
echo "配置文件: $CONF"

# 在 proxy_pass 后追加 SSE 指令
sed -i '/proxy_pass/a\    proxy_http_version 1.1;\n    proxy_set_header Connection "";\n    proxy_buffering off;\n    proxy_cache off;\n    proxy_request_buffering off;\n    chunked_transfer_encoding on;\n    proxy_read_timeout 86400s;\n    proxy_send_timeout 86400s;\n    proxy_set_header Upgrade $http_upgrade;' "$CONF"

# 测试并重载
nginx -t && nginx -s reload

方式 B:手动改站点配置文件

宝塔 → 网站 → 站点设置 → 配置文件 → 找到 location / 段,整段替换为:

nginx 复制代码
location / {
    proxy_pass http://127.0.0.1:5000;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;

    # SSE / 流式响应关键配置
    proxy_http_version 1.1;
    proxy_set_header Connection "";
    proxy_buffering off;
    proxy_cache off;
    proxy_request_buffering off;
    chunked_transfer_encoding on;
    proxy_read_timeout 86400s;
    proxy_send_timeout 86400s;
    proxy_set_header Upgrade $http_upgrade;
}

方式 C:直连端口(不配 Nginx)

如果不配 Nginx,直接通过端口访问:

  1. 启动脚本里 HOST 设为 0.0.0.0
  2. 宝塔 → 安全 → 放行端口 5000
  3. 阿里云安全组 → 放行 5000 TCP
  4. 访问 http://服务器IP:5000

八、日常运维命令

启动 / 停止 / 重启

操作 命令行 宝塔界面
启动 /www/server/supervisor/bin/supervisorctl start deltafstation Supervisor 管理器 → deltafstation → 启动
停止 /www/server/supervisor/bin/supervisorctl stop deltafstation Supervisor 管理器 → deltafstation → 停止
重启 /www/server/supervisor/bin/supervisorctl restart deltafstation Supervisor 管理器 → deltafstation → 重启
查看状态 /www/server/supervisor/bin/supervisorctl status deltafstation Supervisor 管理器列表直接显示

日志查看

bash 复制代码
# 实时查看标准输出日志
tail -f /www/wwwroot/deltafstation/logs/supervisor_out.log

# 实时查看错误日志
tail -f /www/wwwroot/deltafstation/logs/supervisor_err.log

# 查看最近 50 行日志
tail -50 /www/wwwroot/deltafstation/logs/supervisor_out.log

更新项目代码

bash 复制代码
cd /www/wwwroot/deltafstation

# 拉取最新代码
git pull

# 如果 requirements.txt 有变化,更新依赖
source venv/bin/activate
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple

# 重启服务生效
/www/server/supervisor/bin/supervisorctl restart deltafstation

临时调试(不经过 Supervisor)

bash 复制代码
cd /www/wwwroot/deltafstation
source venv/bin/activate

# 前台运行,直接看输出
FLASK_ENV=development PORT=5000 HOST=0.0.0.0 python run.py

# Ctrl+C 退出

一键运维脚本

将以下内容保存为 ops.sh

bash 复制代码
#!/bin/bash
# DeltaFStation 运维脚本
# 用法: bash ops.sh {start|stop|restart|status|log|log-err|update}

APP_DIR="/www/wwwroot/deltafstation"
SUPERCTL="/www/server/supervisor/bin/supervisorctl"

case "$1" in
  start)
    echo "启动 DeltaFStation..."
    $SUPERCTL start deltafstation
    ;;
  stop)
    echo "停止 DeltaFStation..."
    $SUPERCTL stop deltafstation
    ;;
  restart)
    echo "重启 DeltaFStation..."
    $SUPERCTL restart deltafstation
    sleep 2
    $SUPERCTL status deltafstation
    ;;
  status)
    echo "=== Supervisor 状态 ==="
    $SUPERCTL status deltafstation
    echo ""
    echo "=== 进程信息 ==="
    ps aux | grep run.py | grep -v grep
    echo ""
    echo "=== 端口监听 ==="
    ss -tlnp | grep 5000
    ;;
  log)
    echo "实时输出日志(Ctrl+C 退出):"
    tail -f $APP_DIR/logs/supervisor_out.log
    ;;
  log-err)
    echo "实时错误日志(Ctrl+C 退出):"
    tail -f $APP_DIR/logs/supervisor_err.log
    ;;
  update)
    echo "更新 DeltaFStation..."
    cd $APP_DIR
    git pull
    source venv/bin/activate
    pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
    $SUPERCTL restart deltafstation
    echo "更新完成"
    ;;
  *)
    echo "DeltaFStation 运维脚本"
    echo ""
    echo "用法: bash ops.sh <命令>"
    echo ""
    echo "命令列表:"
    echo "  start     启动服务"
    echo "  stop      停止服务"
    echo "  restart   重启服务"
    echo "  status    查看状态(进程+端口)"
    echo "  log       实时查看输出日志"
    echo "  log-err   实时查看错误日志"
    echo "  update    更新代码并重启"
    ;;
esac

用法:

bash 复制代码
bash ops.sh start      # 启动
bash ops.sh stop       # 停止
bash ops.sh restart    # 重启
bash ops.sh status     # 查看状态(进程+端口)
bash ops.sh log        # 实时看输出日志
bash ops.sh log-err    # 实时看错误日志
bash ops.sh update     # 更新代码并重启

九、常见问题排查

Q1: pip install 报 blinker 版本找不到

原因: Python 版本太低(3.6),blinker>=1.6.2 需要 Python 3.7+。

解决: 安装 Python 3.12 后重建虚拟环境。

Q2: pip install 报 TA-Lib 编译失败

原因: 缺 TA-Lib C 库。

解决: 先执行第三步编译安装 TA-Lib C 库,再 pip install。

Q3: 宝塔 Python 管理器报 XML 解析错误

原因: 宝塔从云端拉版本列表时返回的 XML 格式坏了,是宝塔自身 bug。

解决: 改用命令行源码编译 Python 3.12(见第二步方式 B)。

Q4: supervisorctl: command not found

原因: 宝塔的 Supervisor 不在系统 PATH 里。

解决: 用完整路径 /www/server/supervisor/bin/supervisorctl,或在宝塔 Supervisor 管理器界面操作。

Q5: 访问页面打不开 / 502 Bad Gateway

排查顺序:

bash 复制代码
# 1. 检查 Flask 是否在运行
/www/server/supervisor/bin/supervisorctl status deltafstation
# 应显示 RUNNING

# 2. 检查端口是否监听
ss -tlnp | grep 5000
# 应看到 127.0.0.1:5000 或 0.0.0.0:5000

# 3. 检查 Nginx 配置
nginx -t
# 应显示 syntax is ok

# 4. 检查防火墙
# 宝塔安全 → 确认 80 端口已放行
# 阿里云安全组 → 确认 80 端口已放行

# 5. 查看错误日志
tail -50 /www/wwwroot/deltafstation/logs/supervisor_err.log

Q6: 页面能打开但日志流不刷新 / AI 对话不流式输出

原因: Nginx 默认缓冲响应,SSE 被截断。

解决: 确认 Nginx 配置里有 proxy_buffering off;proxy_read_timeout 86400s;(见第七步)。

Q7: Supervisor 状态显示 FATAL

bash 复制代码
# 查看错误日志
cat /www/wwwroot/deltafstation/logs/supervisor_err.log

# 手动运行排查
cd /www/wwwroot/deltafstation
source venv/bin/activate
bash start_prod.sh
# 看具体报错

Q8: miniQMT connect failed 报错

正常现象。 没有连接 QMT 客户端就会报这个,不影响数据服务、回测、模拟交易、AI Agent 等功能。如需实盘交易,参考项目 docs/qmt-strategy-live.md


附录:关键路径速查

项目 路径
项目根目录 /www/wwwroot/deltafstation
虚拟环境 /www/wwwroot/deltafstation/venv
启动脚本 /www/wwwroot/deltafstation/start_prod.sh
Supervisor 配置 /www/server/supervisor/conf.d/deltafstation.ini
Supervisor 命令 /www/server/supervisor/bin/supervisorctl
输出日志 /www/wwwroot/deltafstation/logs/supervisor_out.log
错误日志 /www/wwwroot/deltafstation/logs/supervisor_err.log
Nginx 配置 /www/server/panel/vhost/nginx/ 下对应站点
Python 3.12(宝塔) /www/server/python_manager/versions/3.12.0/bin/python3.12
Python 3.12(编译) /usr/local/bin/python3.12
TA-Lib C 库 /usr/lib/libta_lib.so

DeltaFStation 部署文档 · 基于 v1.3.0 实际部署验证 · 2026-08-15

项目地址:GitHub · GitCode

DeltaFStation脚本一键化部署

bash 复制代码
#!/bin/bash
# ===========================================================================
# DeltaFStation 宝塔 Linux 部署脚本
# 适用:CentOS 7+/Ubuntu 18.04+ 已安装宝塔面板
# 方式:Supervisor 守护 python run.py + Nginx 反向代理(含 SSE 配置)
# 用法:bash deploy_deltafstation.sh
# ===========================================================================
set -e

# ---------------------------- 可配置变量 ----------------------------
# 项目安装目录(宝塔默认站点根目录习惯放在 /www/wwwroot/)
INSTALL_DIR="/www/wwwroot/deltafstation"
# Python 解释器(优先宝塔 Python 管理器的 3.12;找不到则回退系统 python3)
PYTHON_BIN="${PYTHON_BIN:-}"
# 对外监听端口(Flask 内部端口,Nginx 反代到这里)
APP_PORT=5000
# Git 仓库(优先 gitcode 国内快;github 备选)
GIT_REPO="${GIT_REPO:-https://gitcode.com/weixin_48616345/deltafstation.git}"
# 运行用户(宝塔默认 www)
RUN_USER="www"

# ---------------------------- 颜色输出 ----------------------------
RED='\033[0;31m'; GREEN='\033[0;32m'; YELLOW='\033[1;33m'; NC='\033[0m'
info()  { echo -e "${GREEN}[INFO]${NC} $1"; }
warn()  { echo -e "${YELLOW}[WARN]${NC} $1"; }
error() { echo -e "${RED}[ERROR]${NC} $1"; exit 1; }

# ---------------------------- 0. root 检查 ----------------------------
[[ $EUID -ne 0 ]] && error "请用 root 执行:sudo bash deploy_deltafstation.sh"
info "开始部署 DeltaFStation(宝塔 Linux)"

# ---------------------------- 1. 检测包管理器 ----------------------------
if command -v apt-get &>/dev/null; then
    PKG_MGR="apt"; info "检测到 Debian/Ubuntu 系"
elif command -v yum &>/dev/null; then
    PKG_MGR="yum"; info "检测到 CentOS/RHEL 系"
else
    error "未识别的系统,仅支持 apt/yum"
fi

# ---------------------------- 2. 安装系统级依赖 ----------------------------
info "安装编译工具与 Python 开发库(TA-Lib 编译需要)"
if [[ "$PKG_MGR" == "apt" ]]; then
    apt-get update -y
    apt-get install -y build-essential python3-dev python3-venv python3-pip \
        git wget curl libssl-dev libffi-dev
else
    yum groupinstall -y "Development Tools"
    yum install -y python3-devel python3-pip git wget curl openssl-devel libffi-devel
fi

# ---------------------------- 3. 选择 Python 解释器 ----------------------------
# 优先宝塔 Python 管理器安装的 3.12,其次系统 python3.12,最后系统 python3
if [[ -z "$PYTHON_BIN" ]]; then
    for cand in /www/server/pyproject_evn/versions/3.12*/bin/python3.12 \
                /usr/local/bin/python3.12 /usr/bin/python3.12; do
        if [[ -x "$cand" ]]; then PYTHON_BIN="$cand"; break; fi
    done
    [[ -z "$PYTHON_BIN" ]] && PYTHON_BIN=$(command -v python3)
fi
PY_VER=$($PYTHON_BIN -c 'import sys;print("%d.%d"%sys.version_info[:2])')
info "使用 Python: $PYTHON_BIN (版本 $PY_VER)"
[[ "$PY_VER" < "3.10" ]] && warn "Python 版本偏低,项目推荐 3.12,建议在宝塔软件商店安装 Python 3.12 后重跑"

# ---------------------------- 4. 编译安装 TA-Lib C 库 ----------------------------
# 这是最容易踩坑的依赖,必须先装 C 库再 pip install TA-Lib
if ! ldconfig -p | grep -q "libta_lib"; then
    info "未检测到 TA-Lib C 库,开始源码编译(约 1-2 分钟)"
    cd /usr/local/src
    [[ -f ta-lib-0.4.0-src.tar.gz ]] || wget -q http://prdownloads.sourceforge.net/ta-lib/ta-lib-0.4.0-src.tar.gz
    [[ -d ta-lib ]] || tar -xzf ta-lib-0.4.0-src.tar.gz
    cd ta-lib
    ./configure --prefix=/usr
    make -j$(nproc) && make install
    ldconfig
    info "TA-Lib C 库安装完成"
else
    info "TA-Lib C 库已存在,跳过编译"
fi

# ---------------------------- 5. 克隆项目 ----------------------------
if [[ ! -d "$INSTALL_DIR/.git" ]]; then
    info "克隆项目到 $INSTALL_DIR"
    mkdir -p "$(dirname $INSTALL_DIR)"
    [[ -d "$INSTALL_DIR" ]] && rm -rf "$INSTALL_DIR"
    git clone "$GIT_REPO" "$INSTALL_DIR" || {
        warn "gitcode 克隆失败,回退 GitHub"
        git clone https://github.com/Delta-F/deltafstation.git "$INSTALL_DIR"
    }
else
    info "项目目录已存在,执行 git pull 更新"
    cd "$INSTALL_DIR" && git pull --rebase || warn "git pull 失败,继续使用现有代码"
fi
cd "$INSTALL_DIR"

# ---------------------------- 6. 创建虚拟环境 ----------------------------
VENV_DIR="$INSTALL_DIR/venv"
info "创建虚拟环境: $VENV_DIR"
$PYTHON_BIN -m venv "$VENV_DIR"
VENV_PY="$VENV_DIR/bin/python"
$VENV_PY -m pip install --upgrade pip -q

# ---------------------------- 7. 安装 Python 依赖 ----------------------------
info "安装 Python 依赖(TA-Lib 此处为 wheel 绑定,已装好 C 库)"
$VENV_PY -m pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple

# ---------------------------- 8. 创建数据目录 ----------------------------
info "创建数据与日志目录"
mkdir -p data/raw data/processed data/results data/strategies data/simulations logs
# 目录归属给 www 用户,避免宝塔 Nginx/Supervisor 权限问题
chown -R $RUN_USER:$RUN_USER "$INSTALL_DIR" 2>/dev/null || warn "chown 失败(可忽略,若用 root 运行)"

# ---------------------------- 9. 生成 Supervisor 配置 ----------------------------
info "生成 Supervisor 配置"
SUPERVISOR_CONF_DIR="/www/server/supervisor/conf.d"
mkdir -p "$SUPERVISOR_CONF_DIR" 2>/dev/null || true

cat > "$SUPERVISOR_CONF_DIR/deltafstation.ini" <<EOF
[program:deltafstation]
command=$VENV_PY $INSTALL_DIR/run.py
directory=$INSTALL_DIR
user=$RUN_USER
autostart=true
autorestart=true
startsecs=5
stopwaitsecs=30
stopsignal=TERM
; 环境变量:生产模式关闭 debug,固定端口
environment=FLASK_ENV="production",PORT="$APP_PORT",HOST="127.0.0.1",FLASK_USE_RELOADER="0"
stdout_logfile=$INSTALL_DIR/logs/supervisor_out.log
stderr_logfile=$INSTALL_DIR/logs/supervisor_err.log
stdout_logfile_maxbytes=20MB
stdout_logfile_backups=5
redirect_stderr=false
EOF
info "Supervisor 配置已写入: $SUPERVISOR_CONF_DIR/deltafstation.ini"

# ---------------------------- 10. 生成 Nginx 反代配置片段 ----------------------------
# SSE 关键:关闭缓冲、长超时、HTTP/1.1
NGINX_SNIPPET="$INSTALL_DIR/logs/nginx_deltafstation.conf"
cat > "$NGINX_SNIPPET" <<'EOF'
# ===== DeltaFStation Nginx 反向代理配置(含 SSE 支持)=====
# 在宝塔「网站 → 你的站点 → 配置文件」中,把 server{} 里的 location / 替换为以下内容
# 或在宝塔「网站 → 反向代理」中新增后,手动补充 SSE 相关指令

location / {
    proxy_pass http://127.0.0.1:5000;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;

    # ===== SSE / 流式响应关键配置 =====
    proxy_http_version 1.1;
    proxy_set_header Connection "";          # 启用长连接
    proxy_buffering off;                     # 关闭响应缓冲,SSE 必需
    proxy_cache off;                         # 关闭缓存
    proxy_request_buffering off;
    chunked_transfer_encoding on;

    # SSE/长连接超时(默认 60s 会断流,调大到 1 天)
    proxy_read_timeout 86400s;
    proxy_send_timeout 86400s;

    # WebSocket 支持(如未来需要)
    proxy_set_header Upgrade $http_upgrade;
}
EOF
info "Nginx 配置片段已生成: $NGINX_SNIPPET(稍后按提示配置到宝塔站点)"

# ---------------------------- 11. 完成,输出后续操作指引 ----------------------------
echo ""
echo -e "${GREEN}==========================================================${NC}"
echo -e "${GREEN}  DeltaFStation 部署脚本执行完成${NC}"
echo -e "${GREEN}==========================================================${NC}"
echo ""
echo "项目目录:       $INSTALL_DIR"
echo "虚拟环境 Python: $VENV_PY"
echo "Flask 监听:     127.0.0.1:$APP_PORT(仅本机,由 Nginx 对外)"
echo ""
echo -e "${YELLOW}【后续手动操作】${NC}"
echo ""
echo "1) 在宝塔软件商店安装「Supervisor管理器」(如未安装),然后:"
echo "   - 进入 Supervisor 管理器 → 配置 → 重载配置"
echo "   - 或命令行: supervisorctl update && supervisorctl restart deltafstation"
echo "   - 查看状态: supervisorctl status deltafstation"
echo "   - 查看日志: tail -f $INSTALL_DIR/logs/supervisor_out.log"
echo ""
echo "2) 在宝塔「网站」添加站点(纯静态即可,仅用其域名 + Nginx),然后:"
echo "   - 打开站点「设置 → 配置文件」"
echo "   - 参考 $NGINX_SNIPPET 的内容替换 location / 段(注意 SSE 指令必须保留)"
echo "   - 保存后重载 Nginx: nginx -s reload"
echo ""
echo "3) 放行端口/绑定域名后,浏览器访问 http://你的域名 即可"
echo ""
echo "4) AI Agent / LLM 配置:"
echo "   - 首次启动后,在 Web 界面的 AI 设置里配置 OpenAI 兼容 API Key"
echo "   - 或编辑 config/config.py 里的 LLM_* 配置项"
echo ""
echo "5) 实盘 miniQMT(可选):"
echo "   - 需在一台 Windows 机器上运行 miniQMT 客户端"
echo "   - 详细见项目 docs/qmt-strategy-live.md"
echo ""
相关推荐
小柯南敲键盘1 小时前
跨境电商图片翻译工具推荐:批量AI翻译+视频字幕+智能抠图
人工智能·python·音视频
北斗落凡尘1 小时前
LangGraph 入门实战(8)--绑定工具
python·langchain
ningmengjing_1 小时前
MCP 通讯方式与实现指南
python·agent·mcp
淼澄研学2 小时前
Kimi API黑产倒卖技术解析与Python合规接入指南
开发语言·网络·python
何以解忧,唯有..2 小时前
Python 元组(tuple)详解:使用、遍历与排序
开发语言·python
KANGBboy2 小时前
Python eval安全隐患
开发语言·python
evans在进步2 小时前
LeetCode 394:字符串解码——Java 单栈模拟与嵌套解析详解
java·python·leetcode
淼澄研学3 小时前
Python结合大模型挖掘搜题长尾关键词实操指南
开发语言·python
中科高级技工学校4 小时前
乌鲁木齐美术艺考技校实践分享
人工智能·python