version 1.4: обновление из GitHub через mita-ctl

- mita-ctl.sh: пункт 12 — обновление панели/бота/CLI из репозитория grendervilll/mitactl
- mita-ctl.sh: перед обновлением показывает что обновляется (код) и что сохраняется (конфиги)
- mita-ctl.sh: запрос подтверждения, shallow clone, авто-перезапуск сервисов
- README: обновлена дорожная карта
This commit is contained in:
2026-06-28 15:19:52 +03:00
parent e75e5ee211
commit 43d99ba867
2 changed files with 104 additions and 2 deletions
+2 -2
View File
@@ -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
### ⬜ Запланировано
+102
View File
@@ -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. ПОЛНОЕ УДАЛЕНИЕ
# ════════════════════════════════════════════════════════════════════════════