适配 1G 内存 armv7 设备: settings.json 低配(show_hash 关/max_workers=2/缓存64MB/上传上限256MB/ws-sse 关) + 新增 install-armv7.sh 分步安装脚本

This commit is contained in:
HYC Fixer
2026-08-30 13:20:00 +08:00
parent 08a8062a01
commit a1b3878bfc
2 changed files with 129 additions and 14 deletions
+115
View File
@@ -0,0 +1,115 @@
#!/bin/bash
# ============================================
# HYC下载站 v2.3 - ARMv7 / 低内存设备 安装脚本
#
# 电视盒子(1G 内存)上很多带 C 扩展的包没有预编译 wheel,
# 一次性 pip install -r requirements.txt 会在编译某个包时整体失败。
# 本脚本按"核心必装 / 可选按需"分开安装,单个失败不连累其他。
#
# 用法:
# bash scripts/install-armv7.sh # 只装核心
# bash scripts/install-armv7.sh --with-postgresql # 加 PostgreSQL
# bash scripts/install-armv7.sh --with-mysql # 加 MySQL
# bash scripts/install-armv7.sh --with-sftp # 加 SFTP 同步(paramiko)
#
# 环境变量:
# PYTHON=python3.11 指定 Python(默认 python3)
# VENV_DIR=./venv 虚拟环境目录(默认 ./venv)
# ============================================
set -e
PYTHON=${PYTHON:-python3}
VENV_DIR=${VENV_DIR:-./venv}
echo "=========================================="
echo " HYC下载站 v2.3 - ARMv7 安装"
echo "=========================================="
# ---------- 1. 检查 Python ----------
echo ""
echo "==> [1/5] 检查 Python 版本"
if ! command -v "$PYTHON" >/dev/null 2>&1; then
echo "错误: 找不到 $PYTHON"
echo "提示: 电视盒子 Debian 系可用: apt install python3 python3-venv"
exit 1
fi
$PYTHON --version
python_ok=$($PYTHON -c 'import sys; print(1 if sys.version_info >= (3, 8) else 0)')
if [ "$python_ok" != "1" ]; then
echo "警告: Python 版本过低(需要 3.8+),建议 python3.11"
fi
# ---------- 2. 创建虚拟环境 ----------
echo ""
echo "==> [2/5] 创建虚拟环境: $VENV_DIR"
if ! $PYTHON -m venv "$VENV_DIR" 2>/dev/null; then
echo "错误: 创建虚拟环境失败"
echo "提示: 需要先安装 python3-venv: apt install python3-venv"
exit 1
fi
# shellcheck disable=SC1091
source "$VENV_DIR/bin/activate"
pip install --upgrade pip 2>/dev/null || echo " (pip 升级跳过)"
# ---------- 3. 核心依赖(必装) ----------
echo ""
echo "==> [3/5] 安装核心依赖"
CORE_PKGS="psutil requests croniter sqlalchemy python-multipart"
for pkg in $CORE_PKGS; do
if pip install "$pkg" >/dev/null 2>&1; then
echo " ✓ $pkg"
else
echo " ✗ $pkg 安装失败(继续,不影响其他)"
fi
done
# bcrypt: armv7 可能需要编译;装不上则走 PBKDF2 回退(认证仍可用,但建议装上)
echo " ... bcrypt(密码哈希)"
if pip install bcrypt >/dev/null 2>&1; then
echo " ✓ bcrypt"
else
echo " ⚠ bcrypt 安装失败 → 将使用 PBKDF2 回退(功能可用;建议装 gcc 后重试)"
fi
# ---------- 4. 可选依赖(按参数) ----------
echo ""
echo "==> [4/5] 可选依赖"
if [[ "$*" == *"--with-postgresql"* ]]; then
echo " ... psycopg2-binary(PostgreSQL)"
pip install psycopg2-binary >/dev/null 2>&1 && echo " ✓ psycopg2" \
|| echo " ⚠ psycopg2 编译失败 → PostgreSQL 不可用(可先用 SQLite)"
fi
if [[ "$*" == *"--with-mysql"* ]]; then
echo " ... pymysql / cryptography(MySQL)"
pip install pymysql cryptography >/dev/null 2>&1 && echo " ✓ pymysql" \
|| echo " ⚠ MySQL 依赖失败(可先用 SQLite)"
fi
if [[ "$*" == *"--with-sftp"* ]]; then
echo " ... paramiko(SFTP 同步)"
pip install paramiko >/dev/null 2>&1 && echo " ✓ paramiko" \
|| echo " ⚠ paramiko 失败 → SFTP 同步不可用"
fi
# ---------- 5. 目录与收尾 ----------
echo ""
echo "==> [5/5] 创建数据目录"
mkdir -p downloads data logs
echo " ✓ downloads/ data/ logs/ 已就绪"
echo ""
echo "=========================================="
echo " 安装完成!"
echo "=========================================="
echo " 启动服务器:"
echo " source $VENV_DIR/bin/activate"
echo " python main.py --memory-limit 256M --workers 2"
echo ""
echo " 1G 内存建议(电视盒子):"
echo " - 已适配 settings.json(show_hash 关闭、max_workers=2、缓存 64MB)"
echo " - 强烈建议加 swap,否则大文件同步/上传易 OOM:"
echo " fallocate -l 1G /swapfile && chmod 600 /swapfile"
echo " mkswap /swapfile && swapon /swapfile"
echo " echo '/swapfile none swap sw 0 0' >> /etc/fstab"
echo " - 外接 300G 存储请把 settings.json 的 base_dir 指向挂载点"
echo " (如 /mnt/usb/downloads),并同步改 database.sqlite.path"
echo "=========================================="