From 683a62a3f5aebee5b23d399f2570594ac527523a Mon Sep 17 00:00:00 2001 From: Petro1990 Date: Fri, 13 Mar 2026 15:32:02 +0300 Subject: [PATCH] =?UTF-8?q?=D1=84=D0=B8=D1=87=D0=B0:=20=D0=B4=D0=BE=D0=B1?= =?UTF-8?q?=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=D0=B0=20=D0=B2=D0=BE=D0=B7=D0=BC?= =?UTF-8?q?=D0=BE=D0=B6=D0=BD=D0=BE=D1=81=D1=82=D1=8C=20=D0=BF=D0=BE=D0=B2?= =?UTF-8?q?=D1=82=D0=BE=D1=80=D0=BD=D0=BE=D0=B3=D0=BE=20=D0=BF=D0=BE=D0=BB?= =?UTF-8?q?=D1=83=D1=87=D0=B5=D0=BD=D0=B8=D1=8F=20SSL=20=D0=B8=20=D1=83?= =?UTF-8?q?=D0=BB=D1=83=D1=87=D1=88=D0=B5=D0=BD=D0=B0=20=D1=83=D1=81=D1=82?= =?UTF-8?q?=D0=B0=D0=BD=D0=BE=D0=B2=D0=BA=D0=B0=20Certbot=20=D0=BD=D0=B0?= =?UTF-8?q?=20VPS?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- rproxy | 60 ++++++++++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 54 insertions(+), 6 deletions(-) diff --git a/rproxy b/rproxy index 198758a..b6547eb 100644 --- a/rproxy +++ b/rproxy @@ -173,7 +173,8 @@ main_menu() { printf " ${BOLD}5)${NC} ⏹️ Остановить туннель\n" printf " ${BOLD}6)${NC} 🔄 Перезапустить туннель\n" draw_separator - printf " ${BOLD}7)${NC} ⚙️ Настройки VPS\n" + printf " ${BOLD}7)${NC} 🔒 Получить/Обновить SSL (Certbot)\n" + printf " ${BOLD}8)${NC} ⚙️ Настройки VPS\n" printf " ${BOLD}0)${NC} 🚪 Выход\n" prompt "Выберите действие: " @@ -185,7 +186,8 @@ main_menu() { 4) do_start_interactive ;; 5) do_stop_interactive ;; 6) do_restart_interactive ;; - 7) do_setup ;; + 7) do_ssl_interactive ;; + 8) do_setup ;; 0|q) clear_screen; exit 0 ;; *) ;; esac @@ -432,6 +434,53 @@ EOF pause } +# ══════════════════════════════════════════════════════════════════════ +# ПОЛУЧИТЬ SSL (Certbot) +# ══════════════════════════════════════════════════════════════════════ +do_ssl_interactive() { + clear_screen + draw_box "Получить SSL сертификат (Certbot)" + printf "\n" + + select_service "Выпуститиь SSL для" "all" || { pause; return; } + local name="$SELECTED_SERVICE" + [ "$name" = "__ALL__" ] && { warn "Выберите конкретный сервис"; pause; return; } + + load_service "$name" || { pause; return; } + + if [ -z "$SVC_DOMAIN" ]; then + err "Для получения SSL сервису должен быть назначен домен" + pause + return + fi + + if [ -z "$CERTBOT_EMAIL" ]; then + prompt "Введите Email для регистрации в Certbot: " + CERTBOT_EMAIL="$REPLY" + sed -i "/CERTBOT_EMAIL=/d" "$CONF_FILE" + echo "CERTBOT_EMAIL=\"$CERTBOT_EMAIL\"" >> "$CONF_FILE" + fi + + msg "Проверяю наличие Certbot на VPS..." + ssh_cmd "command -v certbot >/dev/null 2>&1 || (apt-get update && apt-get install -y certbot python3-certbot-nginx || yum install -y certbot python3-certbot-nginx)" || { + err "Не удалось установить Certbot на VPS" + pause + return + } + + msg "Запрашиваю сертификат для $SVC_DOMAIN..." + if ssh_cmd "certbot --nginx -d $SVC_DOMAIN --non-interactive --agree-tos -m $CERTBOT_EMAIL"; then + msg "SSL сертификат успешно получен!" + # Обновляем конфиг сервиса + sed -i "s/SVC_SSL=.*/SVC_SSL=\"yes\"/" "$SERVICES_DIR/$name.conf" + sed -i "s/SVC_EXT_PORT=.*/SVC_EXT_PORT=\"443\"/" "$SERVICES_DIR/$name.conf" + else + err "Certbot не смог выпустить сертификат" + warn "Убедитесь, что домен $SVC_DOMAIN указывает на этот VPS и порт 80 открыт" + fi + pause +} + # ══════════════════════════════════════════════════════════════════════ # УДАЛИТЬ СЕРВИС (интерактивно) # ══════════════════════════════════════════════════════════════════════ @@ -832,10 +881,9 @@ do_setup() { sed -i \"/http {/a\\\\ include /etc/nginx/sites-enabled/*.conf;\" /etc/nginx/nginx.conf 2>/dev/null fi - if ! command -v certbot >/dev/null 2>&1; then - echo \"Устанавливаю Certbot...\" - apt-get install -y -qq certbot python3-certbot-nginx >/dev/null 2>&1 || \ - yum install -y certbot python3-certbot-nginx >/dev/null 2>&1 + if ! ssh_cmd "command -v certbot" >/dev/null 2>&1; then + msg "Устанавливаю Certbot на VPS (может занять пару минут)..." + ssh_cmd "apt-get update -qq && apt-get install -y -qq certbot python3-certbot-nginx || yum install -y certbot python3-certbot-nginx" >/dev/null 2>&1 fi systemctl enable nginx 2>/dev/null