Normalize fullwidth punctuation to ASCII across codebase.
Add scripts/normalize_ambiguous_unicode.py; fix corrupted patch_instance_theme_templates.py. Preserves curly quotes in string literals; removes Git homoglyph warnings on .env.example. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
+16
-16
@@ -1,15 +1,15 @@
|
||||
# 环境一键部署(Ubuntu / root /opt)
|
||||
# 环境一键部署(Ubuntu / root /opt)
|
||||
|
||||
在 **`/opt/crypto_monitor`** 下以 **root** 为各子项目创建 Python **`.venv`**、安装依赖、从 `.env.example` 生成 `.env`(不覆盖已有),并可选安装 **PM2**。
|
||||
在 **`/opt/crypto_monitor`** 下以 **root** 为各子项目创建 Python **`.venv`**,安装依赖,从 `.env.example` 生成 `.env`(不覆盖已有),并可选安装 **PM2**.
|
||||
|
||||
完整系统要求(Python / Node / PM2 版本、启动顺序)见 **[docs/ubuntu-server.md](../docs/ubuntu-server.md)**。
|
||||
完整系统要求(Python / Node / PM2 版本,启动顺序)见 **[docs/ubuntu-server.md](../docs/ubuntu-server.md)**.
|
||||
|
||||
---
|
||||
|
||||
## 前置条件
|
||||
|
||||
- **Ubuntu 22.04 / 24.04**,用户 **root**
|
||||
- 已安装 **git**,仓库位于 **`/opt/crypto_monitor`**
|
||||
- **Ubuntu 22.04 / 24.04**,用户 **root**
|
||||
- 已安装 **git**,仓库位于 **`/opt/crypto_monitor`**
|
||||
|
||||
```bash
|
||||
apt update
|
||||
@@ -26,7 +26,7 @@ cd /opt/crypto_monitor
|
||||
bash deploy/setup_env.sh --install-system-deps
|
||||
```
|
||||
|
||||
常用参数:
|
||||
常用参数:
|
||||
|
||||
```bash
|
||||
bash deploy/setup_env.sh --only binance,gate # 仅部分子项目
|
||||
@@ -35,9 +35,9 @@ bash deploy/setup_env.sh --skip-pm2 # 不尝试安装 pm2
|
||||
bash deploy/setup_env.sh --skip-env-copy # 不复制 .env.example
|
||||
```
|
||||
|
||||
**整目录重装**(保留 `.env`、清库、去脏 PM2)见 **[reinstall-plan-b.md](./reinstall-plan-b.md)**,执行 `bash deploy/reinstall.sh`。与 `setup_env.sh` 独立,不影响首次一键安装。
|
||||
**整目录重装**(保留 `.env`,清库,去脏 PM2)见 **[reinstall-plan-b.md](./reinstall-plan-b.md)**,执行 `bash deploy/reinstall.sh`.与 `setup_env.sh` 独立,不影响首次一键安装.
|
||||
|
||||
若在其它环境编辑过脚本后报 `pipefail` 错误,先转 LF:
|
||||
若在其它环境编辑过脚本后报 `pipefail` 错误,先转 LF:
|
||||
|
||||
```bash
|
||||
sed -i 's/\r$//' deploy/setup_env.sh
|
||||
@@ -53,16 +53,16 @@ sed -i 's/\r$//' deploy/setup_env.sh
|
||||
| `crypto_monitor_*` | 各目录 `.venv` + `pip install -r ../requirements.txt` |
|
||||
| `manual_trading_hub` | 独立 `requirements.txt` |
|
||||
| `.env` | 不存在则从 `.env.example` 复制 |
|
||||
| 部署密钥 | `python3 scripts/bootstrap_deploy_secrets.py`(不覆盖已有值) |
|
||||
| 目录 | `static/images`、`static/images/order_charts` |
|
||||
| 部署密钥 | `python3 scripts/bootstrap_deploy_secrets.py`(不覆盖已有值) |
|
||||
| 目录 | `static/images`,`static/images/order_charts` |
|
||||
| PM2 | 已装 Node 时 `npm install -g pm2` |
|
||||
|
||||
---
|
||||
|
||||
## 部署之后
|
||||
|
||||
1. 编辑各子目录 **`.env`**(交易所 API、企业微信等;**AI 请在中控系统设置 → AI 配置**)。
|
||||
2. **仅用 PM2 常驻**(见 [docs/ubuntu-server.md](../docs/ubuntu-server.md) §3):
|
||||
1. 编辑各子目录 **`.env`**(交易所 API,企业微信等;**AI 请在中控系统设置 → AI 配置**).
|
||||
2. **仅用 PM2 常驻**(见 [docs/ubuntu-server.md](../docs/ubuntu-server.md) §3):
|
||||
|
||||
```bash
|
||||
cd /opt/crypto_monitor/crypto_monitor_binance && pm2 start ecosystem.config.cjs
|
||||
@@ -71,13 +71,13 @@ sed -i 's/\r$//' deploy/setup_env.sh
|
||||
pm2 save
|
||||
```
|
||||
|
||||
或一条命令:`bash deploy/pm2_start_all.sh`
|
||||
或一条命令:`bash deploy/pm2_start_all.sh`
|
||||
|
||||
3. 三所 `.env` 同步脚本见 **[docs/env-sync-scripts.md](../docs/env-sync-scripts.md)**。
|
||||
3. 三所 `.env` 同步脚本见 **[docs/env-sync-scripts.md](../docs/env-sync-scripts.md)**.
|
||||
|
||||
---
|
||||
|
||||
## 依赖说明
|
||||
|
||||
- 三个监控子项目共用根目录 **[requirements.txt](../requirements.txt)**。
|
||||
- 走 SOCKS 须 **PySocks**(已包含在 requirements 中)。
|
||||
- 三个监控子项目共用根目录 **[requirements.txt](../requirements.txt)**.
|
||||
- 走 SOCKS 须 **PySocks**(已包含在 requirements 中).
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
#!/usr/bin/env bash
|
||||
# 按推荐顺序启动三所 Flask + 中控 hub/三 agent(PM2)。
|
||||
# 用法(仓库根或任意目录):
|
||||
# 按推荐顺序启动三所 Flask + 中控 hub/三 agent(PM2).
|
||||
# 用法(仓库根或任意目录):
|
||||
# bash deploy/pm2_start_all.sh
|
||||
#
|
||||
# 与 deploy/setup_env.sh 独立:setup_env 只建 venv;本脚本负责 PM2 启动。
|
||||
# 与 deploy/setup_env.sh 独立:setup_env 只建 venv;本脚本负责 PM2 启动.
|
||||
set -e
|
||||
set -u
|
||||
if [ -n "${BASH_VERSION:-}" ]; then
|
||||
@@ -26,7 +26,7 @@ start_one() {
|
||||
}
|
||||
|
||||
if ! command -v pm2 >/dev/null 2>&1; then
|
||||
echo "未找到 pm2,请先安装 Node.js 与 pm2(见 docs/ubuntu-server.md)" >&2
|
||||
echo "未找到 pm2,请先安装 Node.js 与 pm2(见 docs/ubuntu-server.md)" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
@@ -37,5 +37,5 @@ start_one manual_trading_hub
|
||||
|
||||
pm2 save 2>/dev/null || true
|
||||
echo ""
|
||||
echo "PM2 进程:"
|
||||
echo "PM2 进程:"
|
||||
pm2 list
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#!/usr/bin/env bash
|
||||
# 服务器上拉代码、同步 env、应用强制清仓策略并重启 PM2。
|
||||
# 用法(/opt/crypto_monitor 下 root):
|
||||
# 服务器上拉代码,同步 env,应用强制清仓策略并重启 PM2.
|
||||
# 用法(/opt/crypto_monitor 下 root):
|
||||
# bash deploy/pull_and_restart.sh
|
||||
# bash deploy/pull_and_restart.sh --dry-run
|
||||
set -euo pipefail
|
||||
|
||||
+19
-19
@@ -1,32 +1,32 @@
|
||||
# Plan B:整目录重装(生产清库)
|
||||
# Plan B:整目录重装(生产清库)
|
||||
|
||||
适用于:**保留三所 `.env` 与中控配置,丢弃旧代码、旧 SQLite、脏 PM2 名单**(例如移除 `gate_bot` 后偶发重启)。
|
||||
适用于:**保留三所 `.env` 与中控配置,丢弃旧代码,旧 SQLite,脏 PM2 名单**(例如移除 `gate_bot` 后偶发重启).
|
||||
|
||||
与 **[setup_env.sh](./setup_env.sh)** 的关系:
|
||||
与 **[setup_env.sh](./setup_env.sh)** 的关系:
|
||||
|
||||
| 脚本 | 用途 |
|
||||
|------|------|
|
||||
| `setup_env.sh` | **首次安装 / 日常**:建 venv、装依赖、从 `.env.example` 复制(**不变**) |
|
||||
| `reinstall.sh` | **整目录重装**:备份 → 移走旧目录 → `git clone` → 调 `setup_env.sh` → 恢复配置 → PM2 |
|
||||
| `setup_env.sh` | **首次安装 / 日常**:建 venv,装依赖,从 `.env.example` 复制(**不变**) |
|
||||
| `reinstall.sh` | **整目录重装**:备份 → 移走旧目录 → `git clone` → 调 `setup_env.sh` → 恢复配置 → PM2 |
|
||||
|
||||
---
|
||||
|
||||
## 一键执行(推荐)
|
||||
## 一键执行(推荐)
|
||||
|
||||
在现有服务器安装上以 **root** 执行:
|
||||
在现有服务器安装上以 **root** 执行:
|
||||
|
||||
```bash
|
||||
cd /opt/crypto_monitor
|
||||
bash deploy/reinstall.sh --yes
|
||||
```
|
||||
|
||||
交互确认(不加 `--yes`):
|
||||
交互确认(不加 `--yes`):
|
||||
|
||||
```bash
|
||||
bash deploy/reinstall.sh
|
||||
```
|
||||
|
||||
仅预览步骤:
|
||||
仅预览步骤:
|
||||
|
||||
```bash
|
||||
bash deploy/reinstall.sh --dry-run
|
||||
@@ -39,20 +39,20 @@ bash deploy/reinstall.sh --dry-run
|
||||
1. 备份到 **`/root/backups/pre-reinstall-YYYYMMDD-HHMMSS/`**
|
||||
- 三所 `crypto_monitor_*/.env`
|
||||
- `manual_trading_hub/.env`
|
||||
- `manual_trading_hub/hub_settings.json`(若有)
|
||||
- 可选:仓库内 `one_shot` 备份目录
|
||||
- `manual_trading_hub/hub_settings.json`(若有)
|
||||
- 可选:仓库内 `one_shot` 备份目录
|
||||
2. **`pm2 stop all` + `pm2 delete all`**
|
||||
3. **`mv /opt/crypto_monitor /opt/crypto_monitor.old.时间戳`**
|
||||
4. **`git clone`** 到 `/opt/crypto_monitor`(默认 `main`)
|
||||
4. **`git clone`** 到 `/opt/crypto_monitor`(默认 `main`)
|
||||
5. **`bash deploy/setup_env.sh --skip-env-copy --recreate-venv --skip-pm2`**
|
||||
6. 从备份 **恢复 `.env` / `hub_settings.json`**
|
||||
7. **`deploy/sanitize_hub_settings.py`** 去掉 `gate_bot` / 第四账户
|
||||
8. **`deploy/pm2_start_all.sh`** + `pm2 save`
|
||||
9. 为三所重装 **每日 0 点备份 cron**(可用 `--no-backup-cron` 跳过)
|
||||
9. 为三所重装 **每日 0 点备份 cron**(可用 `--no-backup-cron` 跳过)
|
||||
|
||||
**不会备份/恢复**:`crypto.db`、hub `data/*.db`、`static/images`(符合「全新启动」)。
|
||||
**不会备份/恢复**:`crypto.db`,hub `data/*.db`,`static/images`(符合「全新启动」).
|
||||
|
||||
**不会动**:宝塔/Nginx 反代、SSH SOCKS 隧道(tmux 内)。
|
||||
**不会动**:宝塔/Nginx 反代,SSH SOCKS 隧道(tmux 内).
|
||||
|
||||
---
|
||||
|
||||
@@ -77,13 +77,13 @@ pm2 list
|
||||
curl -s -o /dev/null -w '%{http_code}\n' http://127.0.0.1:5100/
|
||||
```
|
||||
|
||||
浏览器:中控 `/monitor` 登录,三所 LINK 绿,监控区为空库。
|
||||
浏览器:中控 `/monitor` 登录,三所 LINK 绿,监控区为空库.
|
||||
|
||||
---
|
||||
|
||||
## 回滚
|
||||
|
||||
旧目录默认保留为 `/opt/crypto_monitor.old.时间戳`,配置在 `/root/backups/pre-reinstall-*`:
|
||||
旧目录默认保留为 `/opt/crypto_monitor.old.时间戳`,配置在 `/root/backups/pre-reinstall-*`:
|
||||
|
||||
```bash
|
||||
pm2 delete all
|
||||
@@ -92,7 +92,7 @@ mv /opt/crypto_monitor.old.XXXXXXXX /opt/crypto_monitor
|
||||
bash /opt/crypto_monitor/deploy/pm2_start_all.sh
|
||||
```
|
||||
|
||||
确认新环境稳定后再删 `.old.*` 目录。
|
||||
确认新环境稳定后再删 `.old.*` 目录.
|
||||
|
||||
---
|
||||
|
||||
@@ -100,7 +100,7 @@ bash /opt/crypto_monitor/deploy/pm2_start_all.sh
|
||||
|
||||
| 文件 | 说明 |
|
||||
|------|------|
|
||||
| [pm2_start_all.sh](./pm2_start_all.sh) | 按顺序 PM2 启动三所 + hub(setup_env 之后手动用) |
|
||||
| [pm2_start_all.sh](./pm2_start_all.sh) | 按顺序 PM2 启动三所 + hub(setup_env 之后手动用) |
|
||||
| [sanitize_hub_settings.py](./sanitize_hub_settings.py) | 清理 `hub_settings.json` 中 gate_bot 条目 |
|
||||
|
||||
---
|
||||
|
||||
+20
-20
@@ -1,11 +1,11 @@
|
||||
#!/usr/bin/env bash
|
||||
# Plan B:整目录重装 /opt/crypto_monitor(备份 .env → 移走旧目录 → git clone → setup_env → 恢复配置 → PM2)
|
||||
# Plan B:整目录重装 /opt/crypto_monitor(备份 .env → 移走旧目录 → git clone → setup_env → 恢复配置 → PM2)
|
||||
#
|
||||
# 与 deploy/setup_env.sh 分工:
|
||||
# setup_env.sh — 首次 / 日常:建 venv、装依赖、复制 .env.example(一键安装,不变)
|
||||
# reinstall.sh — 生产清库重装:保留密钥与 hub 配置,丢弃旧代码/旧库/脏 PM2
|
||||
# 与 deploy/setup_env.sh 分工:
|
||||
# setup_env.sh — 首次 / 日常:建 venv,装依赖,复制 .env.example(一键安装,不变)
|
||||
# reinstall.sh — 生产清库重装:保留密钥与 hub 配置,丢弃旧代码/旧库/脏 PM2
|
||||
#
|
||||
# 用法(在现有安装目录以 root 执行):
|
||||
# 用法(在现有安装目录以 root 执行):
|
||||
# cd /opt/crypto_monitor
|
||||
# bash deploy/reinstall.sh # 交互确认
|
||||
# bash deploy/reinstall.sh --yes # 跳过确认
|
||||
@@ -109,7 +109,7 @@ backup_configs() {
|
||||
fi
|
||||
done
|
||||
if [[ "${copied}" -eq 0 ]]; then
|
||||
echo "错误: 未备份到任何配置文件,请检查 ${src_root}" >&2
|
||||
echo "错误: 未备份到任何配置文件,请检查 ${src_root}" >&2
|
||||
exit 1
|
||||
fi
|
||||
if [[ -f "${src_root}/scripts/one_shot_backup_config_before_cleanup.py" ]]; then
|
||||
@@ -174,20 +174,20 @@ install_instance_backup_cron() {
|
||||
}
|
||||
|
||||
verify_pm2() {
|
||||
log "预期 PM2 进程(7 个): crypto_binance crypto_gate crypto_okx manual-trading-hub manual-agent-*"
|
||||
log "预期 PM2 进程(7 个): crypto_binance crypto_gate crypto_okx manual-trading-hub manual-agent-*"
|
||||
if [[ "${DRY_RUN}" -eq 1 ]]; then
|
||||
return 0
|
||||
fi
|
||||
pm2 list || true
|
||||
if pm2 list 2>/dev/null | grep -qiE 'gate_bot|15203'; then
|
||||
log "警告: PM2 列表仍含 gate_bot 相关进程,请 pm2 delete 后 pm2 save"
|
||||
log "警告: PM2 列表仍含 gate_bot 相关进程,请 pm2 delete 后 pm2 save"
|
||||
fi
|
||||
}
|
||||
|
||||
# --- 前置检查 ---
|
||||
|
||||
if [[ "$(id -u)" -ne 0 ]]; then
|
||||
echo "请使用 root 执行(推荐路径 ${INSTALL_ROOT})" >&2
|
||||
echo "请使用 root 执行(推荐路径 ${INSTALL_ROOT})" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
@@ -197,7 +197,7 @@ if [[ ! -f "${REPO_ROOT}/deploy/setup_env.sh" ]]; then
|
||||
fi
|
||||
|
||||
if [[ "${REPO_ROOT}" != "${INSTALL_ROOT}" ]]; then
|
||||
log "提示: 当前仓库 ${REPO_ROOT} 与 INSTALL_ROOT=${INSTALL_ROOT} 不一致;将备份当前仓库并克隆到 INSTALL_ROOT"
|
||||
log "提示: 当前仓库 ${REPO_ROOT} 与 INSTALL_ROOT=${INSTALL_ROOT} 不一致;将备份当前仓库并克隆到 INSTALL_ROOT"
|
||||
fi
|
||||
|
||||
STAMP="$(TZ="${TZ_NAME}" date +%Y%m%d-%H%M%S)"
|
||||
@@ -216,9 +216,9 @@ echo " 旧目录移走: ${OLD_DIR}"
|
||||
echo " 新克隆: ${GIT_URL} (${GIT_BRANCH}) -> ${INSTALL_ROOT}"
|
||||
echo " 环境: deploy/setup_env.sh --skip-env-copy --recreate-venv --skip-pm2"
|
||||
echo ""
|
||||
echo " 将停止并 delete 全部 PM2 进程;不备份 crypto.db / hub data / 图片。"
|
||||
echo " 将停止并 delete 全部 PM2 进程;不备份 crypto.db / hub data / 图片."
|
||||
|
||||
if ! confirm "确认执行 Plan B 整目录重装?"; then
|
||||
if ! confirm "确认执行 Plan B 整目录重装?"; then
|
||||
log "已取消"
|
||||
exit 0
|
||||
fi
|
||||
@@ -235,7 +235,7 @@ if command -v pm2 >/dev/null 2>&1; then
|
||||
run pm2 stop all || true
|
||||
run pm2 delete all || true
|
||||
else
|
||||
log "未安装 pm2,跳过"
|
||||
log "未安装 pm2,跳过"
|
||||
fi
|
||||
|
||||
# --- 3. 移走旧目录 ---
|
||||
@@ -248,7 +248,7 @@ if [[ -d "${INSTALL_ROOT}" ]]; then
|
||||
mv "${INSTALL_ROOT}" "${OLD_DIR}"
|
||||
fi
|
||||
else
|
||||
log "目标目录不存在,跳过 mv"
|
||||
log "目标目录不存在,跳过 mv"
|
||||
fi
|
||||
|
||||
# --- 4. 克隆 ---
|
||||
@@ -260,7 +260,7 @@ else
|
||||
git clone -b "${GIT_BRANCH}" "${GIT_URL}" "${INSTALL_ROOT}"
|
||||
fi
|
||||
|
||||
# --- 5. setup_env(一键安装逻辑,不复制 .env)---
|
||||
# --- 5. setup_env(一键安装逻辑,不复制 .env)---
|
||||
|
||||
step "重建 Python 虚拟环境 (setup_env.sh)"
|
||||
if [[ "${DRY_RUN}" -eq 1 ]]; then
|
||||
@@ -281,10 +281,10 @@ if command -v pm2 >/dev/null 2>&1; then
|
||||
run bash "${INSTALL_ROOT}/deploy/pm2_start_all.sh"
|
||||
run pm2 save
|
||||
else
|
||||
log "未安装 pm2;请手动: bash ${INSTALL_ROOT}/deploy/pm2_start_all.sh"
|
||||
log "未安装 pm2;请手动: bash ${INSTALL_ROOT}/deploy/pm2_start_all.sh"
|
||||
fi
|
||||
|
||||
# --- 8. 定时备份 cron(可选)---
|
||||
# --- 8. 定时备份 cron(可选)---
|
||||
|
||||
if [[ "${INSTALL_BACKUP_CRON}" -eq 1 ]]; then
|
||||
step "安装三所每日备份 cron"
|
||||
@@ -297,14 +297,14 @@ step "完成"
|
||||
verify_pm2
|
||||
echo ""
|
||||
echo "备份: ${BACKUP_DIR}"
|
||||
echo "旧目录(确认无误后可删): ${OLD_DIR}"
|
||||
echo "旧目录(确认无误后可删): ${OLD_DIR}"
|
||||
echo ""
|
||||
echo "验收建议:"
|
||||
echo " pm2 list"
|
||||
echo " curl -s -o /dev/null -w '%{http_code}\n' http://127.0.0.1:5100/"
|
||||
echo " 浏览器打开中控 /monitor,确认三所 LINK 正常"
|
||||
echo " 浏览器打开中控 /monitor,确认三所 LINK 正常"
|
||||
echo ""
|
||||
echo "回滚(未删旧目录时):"
|
||||
echo "回滚(未删旧目录时):"
|
||||
echo " pm2 delete all"
|
||||
echo " rm -rf ${INSTALL_ROOT}"
|
||||
echo " mv ${OLD_DIR} ${INSTALL_ROOT}"
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#!/usr/bin/env python3
|
||||
"""重装后清理 hub_settings.json 中已废弃的 gate_bot / 第四账户条目。"""
|
||||
"""重装后清理 hub_settings.json 中已废弃的 gate_bot / 第四账户条目."""
|
||||
from __future__ import annotations
|
||||
|
||||
import json
|
||||
@@ -92,7 +92,7 @@ def main(argv: list[str] | None = None) -> int:
|
||||
for line in removed:
|
||||
print(f" - {line}")
|
||||
else:
|
||||
print("无需修改(未发现 gate_bot / 第四账户)")
|
||||
print("无需修改(未发现 gate_bot / 第四账户)")
|
||||
return 0
|
||||
|
||||
|
||||
|
||||
+17
-17
@@ -1,5 +1,5 @@
|
||||
#!/usr/bin/env bash
|
||||
# crypto_monitor 一键环境部署(Ubuntu / root /opt/crypto_monitor)
|
||||
# crypto_monitor 一键环境部署(Ubuntu / root /opt/crypto_monitor)
|
||||
#
|
||||
# 用法:
|
||||
# bash deploy/setup_env.sh
|
||||
@@ -10,7 +10,7 @@
|
||||
#
|
||||
set -e
|
||||
set -u
|
||||
# 避免 Windows CRLF 导致 set -euo pipefail 一行报错;pipefail 仅 bash 支持
|
||||
# 避免 Windows CRLF 导致 set -euo pipefail 一行报错;pipefail 仅 bash 支持
|
||||
if [ -n "${BASH_VERSION:-}" ]; then
|
||||
set -o pipefail
|
||||
fi
|
||||
@@ -69,7 +69,7 @@ find_python() {
|
||||
echo python
|
||||
return
|
||||
fi
|
||||
echo "未找到 python3/python,请先安装 Python 3.10+" >&2
|
||||
echo "未找到 python3/python,请先安装 Python 3.10+" >&2
|
||||
exit 1
|
||||
}
|
||||
|
||||
@@ -81,7 +81,7 @@ check_python_version() {
|
||||
major="${ver%%.*}"
|
||||
minor="${ver#*.}"
|
||||
if [[ "${major}" -lt 3 ]] || [[ "${major}" -eq 3 && "${minor}" -lt 10 ]]; then
|
||||
echo "需要 Python 3.10+,当前: ${ver}" >&2
|
||||
echo "需要 Python 3.10+,当前: ${ver}" >&2
|
||||
exit 1
|
||||
fi
|
||||
echo "Python: $("${py}" --version 2>&1)"
|
||||
@@ -109,11 +109,11 @@ install_debian_venv_packages() {
|
||||
local ver
|
||||
ver="$(python_minor_version "${py}")"
|
||||
if ! command -v apt-get >/dev/null 2>&1; then
|
||||
echo " 未检测到 apt-get,请手动安装 python${ver}-venv 与 python3-pip" >&2
|
||||
echo " 未检测到 apt-get,请手动安装 python${ver}-venv 与 python3-pip" >&2
|
||||
return 1
|
||||
fi
|
||||
if [[ "$(id -u)" -ne 0 ]]; then
|
||||
echo " 需要 root 安装系统包,请执行:" >&2
|
||||
echo " 需要 root 安装系统包,请执行:" >&2
|
||||
echo " sudo apt update && sudo apt install -y python${ver}-venv python3-pip curl" >&2
|
||||
echo " 或: sudo bash deploy/setup_env.sh --install-system-deps" >&2
|
||||
return 1
|
||||
@@ -131,7 +131,7 @@ ensure_venv_prereqs() {
|
||||
if check_venv_available "${py}"; then
|
||||
return 0
|
||||
fi
|
||||
echo " 当前 Python 无法创建 venv(缺少 ensurepip,常见于未安装 python*-venv)" >&2
|
||||
echo " 当前 Python 无法创建 venv(缺少 ensurepip,常见于未安装 python*-venv)" >&2
|
||||
if [[ "${INSTALL_APT_DEPS}" -eq 1 ]] || [[ "$(id -u)" -eq 0 ]]; then
|
||||
install_debian_venv_packages "${py}" || exit 1
|
||||
if check_venv_available "${py}"; then
|
||||
@@ -171,7 +171,7 @@ setup_monitor() {
|
||||
local dir_name="$1"
|
||||
local proj="${REPO_ROOT}/${dir_name}"
|
||||
if [[ ! -d "${proj}" ]]; then
|
||||
echo " 跳过(目录不存在): ${dir_name}"
|
||||
echo " 跳过(目录不存在): ${dir_name}"
|
||||
return
|
||||
fi
|
||||
step "${dir_name}"
|
||||
@@ -188,7 +188,7 @@ setup_monitor() {
|
||||
elif [[ -f .env ]]; then
|
||||
echo " 保留已有 .env"
|
||||
else
|
||||
echo " 无 .env.example,请手动配置 .env"
|
||||
echo " 无 .env.example,请手动配置 .env"
|
||||
fi
|
||||
fi
|
||||
mkdir -p static/images/order_charts
|
||||
@@ -198,7 +198,7 @@ setup_monitor() {
|
||||
setup_hub() {
|
||||
local proj="${REPO_ROOT}/manual_trading_hub"
|
||||
if [[ ! -d "${proj}" ]]; then
|
||||
echo " 跳过 hub(目录不存在)"
|
||||
echo " 跳过 hub(目录不存在)"
|
||||
return
|
||||
fi
|
||||
step "manual_trading_hub"
|
||||
@@ -219,9 +219,9 @@ install_pm2() {
|
||||
if [[ "${SKIP_PM2}" -eq 1 ]]; then
|
||||
return
|
||||
fi
|
||||
step "PM2(可选)"
|
||||
step "PM2(可选)"
|
||||
if ! command -v node >/dev/null 2>&1; then
|
||||
echo " 未检测到 Node.js,跳过。安装后执行: npm install -g pm2"
|
||||
echo " 未检测到 Node.js,跳过.安装后执行: npm install -g pm2"
|
||||
return
|
||||
fi
|
||||
if command -v pm2 >/dev/null 2>&1; then
|
||||
@@ -249,15 +249,15 @@ should_include hub && setup_hub
|
||||
|
||||
install_pm2
|
||||
|
||||
step "部署密钥(首次自动生成,不覆盖已有)"
|
||||
step "部署密钥(首次自动生成,不覆盖已有)"
|
||||
if command -v python3 >/dev/null 2>&1; then
|
||||
python3 "${REPO_ROOT}/scripts/bootstrap_deploy_secrets.py" || true
|
||||
else
|
||||
echo " 跳过 bootstrap_deploy_secrets(未找到 python3)"
|
||||
echo " 跳过 bootstrap_deploy_secrets(未找到 python3)"
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "部署完成。下一步:"
|
||||
echo " 1. 编辑各子目录 .env(交易所 API 等;AI 请在中控系统设置配置)"
|
||||
echo " 2. 编辑各目录 .env 后使用 PM2: pm2 start ecosystem.config.cjs(见 docs/ubuntu-server.md)"
|
||||
echo "部署完成.下一步:"
|
||||
echo " 1. 编辑各子目录 .env(交易所 API 等;AI 请在中控系统设置配置)"
|
||||
echo " 2. 编辑各目录 .env 后使用 PM2: pm2 start ecosystem.config.cjs(见 docs/ubuntu-server.md)"
|
||||
echo ""
|
||||
|
||||
Reference in New Issue
Block a user