diff --git a/README.md b/README.md index f006701..3eb9a6f 100644 --- a/README.md +++ b/README.md @@ -85,7 +85,7 @@ curl -Ls https://raw.githubusercontent.com/grendervilll/mitactl/main/bootstrap.s - [x] Управление файрволом (UFW/iptables) через CLI и панель - [x] Режим SSH-туннеля: панель только на 127.0.0.1 - [x] Ежедневное автообновление списков WARP (cron + dlc.dat v2fly) -- [x] CLI `mita-ctl` — интерактивное меню (10+ функций) +- [x] CLI `mita-ctl` — интерактивное меню (12 функций), обновление из GitHub с сохранением данных - [x] CLI `manage-users.sh` — add/remove/list/quota - [x] Полное удаление всех компонентов (+ self-destruct утилиты) - [x] Инструкция для клиента Karing (iOS/Android) @@ -94,7 +94,7 @@ curl -Ls https://raw.githubusercontent.com/grendervilll/mitactl/main/bootstrap.s - [x] Мониторинг сервера: CPU, RAM, диск на дашборде (автообновление каждые 2 сек) - [x] Telegram-бот: inline-кнопки, создание/удаление/WARP/дашборд, конфиг/Karing, fail2ban-безопасность - [x] Установка бота: веб-панель, CLI, полный установщик; автоопределение Telegram ID через API -- [x] Бот в venv (обход externally-managed), авто-SSL и SSH-туннель через веб-панель +- [x] Бот в venv (обход externally-managed), авто-SSL, SSH-туннель, обновление из GitHub ### ⬜ Запланировано diff --git a/mita-ctl.sh b/mita-ctl.sh index 1a9e989..61ff07b 100755 --- a/mita-ctl.sh +++ b/mita-ctl.sh @@ -87,6 +87,7 @@ main_menu() { echo -e " ${RED}${BOLD}9.${NC} ${RED}Полное удаление mita, панели и WARP${NC}" echo -e " ${BOLD}10.${NC} Показать текущую конфигурацию" echo -e " ${BOLD}11.${NC} Управление Telegram-ботом" + echo -e " ${BOLD}12.${NC} ${CYAN}Обновить панель и утилиты из GitHub${NC}" echo -e " ${BOLD}0.${NC} Выход" echo "" read -r -p " Выберите пункт: " choice @@ -102,6 +103,7 @@ main_menu() { 9) menu_uninstall ;; 10) menu_show_config ;; 11) menu_bot ;; + 12) menu_update ;; 0) exit 0 ;; *) warn "Неверный выбор" ;; esac @@ -1260,6 +1262,106 @@ _bot_uninstall() { pause } +# ════════════════════════════════════════════════════════════════════════════ +# 12. ОБНОВЛЕНИЕ ПАНЕЛИ И УТИЛИТ ИЗ GITHUB +# ════════════════════════════════════════════════════════════════════════════ +menu_update() { + section "Обновление панели и утилит из GitHub" + + REPO_URL="https://github.com/grendervilll/mitactl.git" + TMP_DIR="/tmp/mita-update-$$" + PANEL_DIR="/opt/mita-panel" + BOT_DIR="/opt/mita-bot" + + echo "" + echo -e " ${GREEN}Будут обновлены только файлы кода:${NC}" + echo -e " • веб-панель: app.py, templates/, static/" + echo -e " • Telegram-бот: bot.py" + echo -e " • CLI-утилита: mita-ctl.sh" + echo "" + echo -e " ${GREEN}НЕ затрагиваются:${NC}" + echo -e " • пользователи и пароли (/etc/mita/server_config.json)" + echo -e " • данные админа, SSL, fail2ban, WARP (/etc/mita/panel.json)" + echo -e " • сертификаты (/etc/mita/ssl/)" + echo -e " • токен бота и ID админов (/etc/mita/bot.json)" + echo -e " • все конфиги и настройки остаются нетронутыми" + echo "" + + read -r -p " Продолжить обновление? [y/N]: " confirm + [[ "${confirm,,}" != "y" && "${confirm,,}" != "yes" ]] && { warn "Отменено"; pause; return; } + + echo "" + info "Репозиторий: $REPO_URL" + + if ! command -v git &>/dev/null; then + info "Установка git..." + apt-get install -y -qq git 2>/dev/null || { error "Не удалось установить git"; return; } + fi + + info "Клонирование репозитория..." + rm -rf "$TMP_DIR" + if ! git clone --depth 1 "$REPO_URL" "$TMP_DIR" 2>/dev/null; then + error "Не удалось клонировать репозиторий. Проверьте URL и доступ в интернет." + rm -rf "$TMP_DIR" + pause + return + fi + ok "Клонировано в $TMP_DIR" + + local updated=() + + # ── веб-панель ───────────────────────────────────────────────── + if [[ -d "$PANEL_DIR" && -d "$PANEL_DIR/templates" ]]; then + info "Обновление веб-панели..." + [[ -f "$TMP_DIR/app.py" ]] && cp "$TMP_DIR/app.py" "$PANEL_DIR/" && updated+=("веб-панель (app.py)") + if [[ -d "$TMP_DIR/templates" ]]; then + rsync -a --delete "$TMP_DIR/templates/" "$PANEL_DIR/templates/" 2>/dev/null || \ + cp -r "$TMP_DIR/templates/"* "$PANEL_DIR/templates/" + updated+=("веб-панель (templates)") + fi + [[ -d "$TMP_DIR/static" ]] && mkdir -p "$PANEL_DIR/static" && cp -r "$TMP_DIR/static/"* "$PANEL_DIR/static/" 2>/dev/null && updated+=("веб-панель (static)") + systemctl restart mita-panel 2>/dev/null || true + ok "Веб-панель обновлена" + else + info "Веб-панель не установлена — пропускаем" + fi + + # ── Telegram-бот ──────────────────────────────────────────────── + if [[ -d "$BOT_DIR" && -f "$TMP_DIR/bot.py" ]]; then + info "Обновление Telegram-бота..." + cp "$TMP_DIR/bot.py" "$BOT_DIR/" + systemctl restart mita-bot 2>/dev/null || true + ok "Бот обновлён" + updated+=("Telegram-бот") + else + info "Бот не установлен — пропускаем" + fi + + # ── mita-ctl ──────────────────────────────────────────────────── + if [[ -f "$TMP_DIR/mita-ctl.sh" ]]; then + info "Обновление mita-ctl..." + cp "$TMP_DIR/mita-ctl.sh" /usr/local/bin/mita-ctl + chmod +x /usr/local/bin/mita-ctl + ok "mita-ctl обновлён" + updated+=("mita-ctl") + fi + + # ── install-bot.sh ────────────────────────────────────────────── + [[ -f "$TMP_DIR/install-bot.sh" ]] && cp "$TMP_DIR/install-bot.sh" "$PANEL_DIR/" 2>/dev/null && updated+=("install-bot.sh") + + rm -rf "$TMP_DIR" + + echo "" + if [[ ${#updated[@]} -gt 0 ]]; then + ok "Обновлено: ${updated[*]}" + else + warn "Ничего не обновлено — установите компоненты перед обновлением" + fi + + echo -e " ${YELLOW}Рекомендуется перезапустить сессию mita-ctl для применения обновления самой утилиты.${NC}" + pause +} + # ════════════════════════════════════════════════════════════════════════════ # 9. ПОЛНОЕ УДАЛЕНИЕ # ════════════════════════════════════════════════════════════════════════════