version 1.4.1: per-user WARP флаг, fallback-установка PyPI

- app.py: full_warp флаг в warp_rules, _rebuild_egress читает с диска, race condition fix
- bot.py: full_warp поддержка в toggle_warp
- templates/index.html: чекбокс «Весь трафик через WARP» с full_warp, не авто-включается
- install-panel.sh: зеркала PyPI (aliyun), таймаут 120с на pip, fallback на apt --system-site-packages
- install-bot.sh: зеркала и fallback для python-telegram-bot
- README: версия 1.4, обновлён roadmap
This commit is contained in:
2026-06-28 23:59:47 +03:00
parent 43d99ba867
commit 423ee4fdbb
6 changed files with 189 additions and 166 deletions
+38 -2
View File
@@ -74,8 +74,44 @@ PANEL_DIR="/opt/mita-panel"
mkdir -p "$PANEL_DIR"
python3 -m venv "$PANEL_DIR/venv"
"$PANEL_DIR/venv/bin/pip" install -q flask gunicorn pyyaml psutil 2>/dev/null
ok "Python venv, Flask и зависимости установлены"
info "Установка Flask и зависимостей (может занять до минуты)..."
_pip_install() {
# Принудительно IPv4 + таймаут 15 секунд на соединение
timeout 120 "$PANEL_DIR/venv/bin/pip" install \
--no-input --quiet --disable-pip-version-check \
--timeout 15 \
"$@"
}
MIRRORS=(
"https://pypi.org/simple/"
"https://mirrors.aliyun.com/pypi/simple/"
)
pip_ok=false
for mirror in "${MIRRORS[@]}"; do
info "Пробую зеркало: $mirror"
if _pip_install --index-url "$mirror" flask gunicorn pyyaml psutil; then
pip_ok=true
break
fi
warn "Зеркало $mirror недоступно, пробую дальше..."
done
if ! $pip_ok; then
warn "pip не смог установить зависимости. Пробую через apt..."
apt-get install -y -qq python3-flask python3-gunicorn python3-yaml python3-psutil 2>/dev/null || {
error "Не удалось установить Flask ни через pip, ни через apt"
exit 1
}
# Создаём venv с системными пакетами чтобы gunicorn был доступен
rm -rf "$PANEL_DIR/venv"
python3 -m venv --system-site-packages "$PANEL_DIR/venv"
ok "Flask установлен через системные пакеты (venv с --system-site-packages)"
else
ok "Python venv, Flask и зависимости установлены"
fi
# ── копирование файлов ─────────────────────────────────────────────
section "Копирование файлов панели"