diff --git a/rproxy b/rproxy index 74281a7..d04f286 100644 --- a/rproxy +++ b/rproxy @@ -3,7 +3,7 @@ # Публикация локальных сервисов через SSH-туннели + nginx на VPS # http://5.104.75.50:3000/Petro1990/rProxy -VERSION="1.0.3" +VERSION="1.0.4" CONF_DIR="/opt/etc/rproxy" CONF_FILE="$CONF_DIR/rproxy.conf" SERVICES_DIR="$CONF_DIR/services" @@ -171,27 +171,29 @@ main_menu() { draw_separator printf " ${BOLD}4)${NC} ▶️ Запустить туннель\n" printf " ${BOLD}5)${NC} ⏹️ Остановить туннель\n" - printf " ${CYAN}${BOLD}6)${NC} 🔄 Перезапустить туннель\n" - draw_separator - printf " ${BOLD}7)${NC} 🔒 Получить/Обновить SSL (Certbot)\n" - printf " ${BOLD}8)${NC} ⚙️ Настройки VPS\n" - printf " ${BOLD}9)${NC} 🚀 Обновить rProxy\n" - printf " ${BOLD}0)${NC} 🚪 Выход\n" + printf " ${BOLD}6)${NC} 🔄 Перезапустить туннель\n" + draw_separator + printf " ${BOLD}7)${NC} 🔒 Получить/Обновить SSL (Certbot)\n" + printf " ${BOLD}8)${NC} ⚙️ Настройки VPS\n" + printf " ${BOLD}9)${NC} 🚀 Обновить rProxy\n" + printf " ${BOLD}10)${NC} 🏥 Проверка VPS (Health)\n" + printf " ${BOLD}0)${NC} 🚪 Выход\n" - prompt "Выберите действие: " + prompt "Выберите действие: " - case "$REPLY" in - 1) show_status ;; - 2) do_add_interactive ;; - 3) do_remove_interactive ;; - 4) do_start_interactive ;; - 5) do_stop_interactive ;; - 6) do_restart_interactive ;; - 7) do_ssl_interactive ;; - 8) do_setup ;; - 9) do_self_update ;; - 0|q) clear_screen; exit 0 ;; - *) ;; + case "$REPLY" in + 1) show_status ;; + 2) do_add_interactive ;; + 3) do_remove_interactive ;; + 4) do_start_interactive ;; + 5) do_stop_interactive ;; + 6) do_restart_interactive ;; + 7) do_ssl_interactive ;; + 8) do_setup ;; + 9) do_self_update ;; + 10) do_health_check ;; + 0|q) clear_screen; exit 0 ;; + *) ;; esac done } @@ -505,6 +507,49 @@ do_self_update() { pause } +# ══════════════════════════════════════════════════════════════════════ +# ПРОВЕРКА СОСТОЯНИЯ VPS +# ══════════════════════════════════════════════════════════════════════ +do_health_check() { + clear_screen + draw_box "Состояние VPS и SSL" + printf "\n" + + msg "Проверяю Nginx..." + if ssh_cmd "systemctl is-active nginx >/dev/null 2>&1"; then + printf " Nginx: ${GREEN}${BOLD}Запущен${NC}\n" + else + printf " Nginx: ${RED}${BOLD}Остановлен${NC}\n" + fi + + msg "Проверяю автопродление SSL (Certbot)..." + local timer=$(ssh_cmd "systemctl is-active certbot.timer 2>/dev/null | tr -d '\r'") + if [ "$timer" = "active" ]; then + printf " SSL Timer: ${GREEN}${BOLD}Активен (Systemd)${NC}\n" + local next_run=$(ssh_cmd "systemctl list-timers certbot.timer --no-legend 2>/dev/null | awk '{print \$1, \$2}'" | head -n 1) + [ -n "$next_run" ] && printf " Следующее: $next_run\n" + else + # Проверка cron + if ssh_cmd "crontab -l 2>/dev/null | grep -q certbot"; then + printf " SSL Renewal: ${GREEN}${BOLD}Настроено (Cron)${NC}\n" + else + printf " SSL Renewal: ${RED}${BOLD}Не обнаружено${NC}\n" + fi + fi + + msg "Действующие сертификаты:" + ssh_cmd "certbot certificates 2>/dev/null | grep -E 'Expiry Date:|Domains:'" | while read -r line; do + printf " %s\n" "$line" + done + + printf "\n" + msg "Утилиты на роутере:" + [ -x "/opt/bin/ssh" ] && printf " SSH: ${GREEN}Entware OK${NC}\n" || printf " SSH: ${RED}Missing${NC}\n" + [ -x "/opt/bin/autossh" ] && printf " AutoSSH: ${GREEN}OK${NC}\n" || printf " AutoSSH: ${RED}Missing${NC}\n" + + pause +} + # ══════════════════════════════════════════════════════════════════════ # УДАЛИТЬ СЕРВИС (интерактивно) # ══════════════════════════════════════════════════════════════════════