vm:nginx:04-nginx_menu

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
vm:nginx:04-nginx_menu [2025/08/29 12:32] adminvm:nginx:04-nginx_menu [2026/03/03 12:15] (текущий) – удалено admin
Строка 1: Строка 1:
-====== Nginx Proxy Manager - Скрипт управления ====== 
  
-===== Описание ===== 
- 
-Скрипт для удобного управления nginx-proxy инстансом с Let's Encrypt через интерактивное меню. 
- 
-**Расположение:** ''/opt/nginx/nginx-manager.sh'' 
- 
-**Контейнеры:** 
-  * ''nginx_proxy'' - основной прокси-сервер 
-  * ''nginx_letsencrypt'' - управление SSL сертификатами 
- 
-===== Установка скрипта ===== 
- 
-==== Шаг 1: Создание файла ==== 
- 
-<code bash> 
-# Переходим в директорию nginx-proxy 
-cd /opt/nginx 
- 
-# Создаем файл скрипта 
-nano nginx-manager.sh 
-</code> 
- 
-**Содержимое файла nginx-manager.sh:** 
- 
-<code bash> 
-#!/bin/bash 
- 
-# Путь к папке с docker-compose.yml 
-NGINX_PATH="/opt/nginx" 
-COMPOSE_FILE="$NGINX_PATH/docker-compose.yml" 
- 
-# Цвета для вывода 
-RED='\033[0;31m' 
-GREEN='\033[0;32m' 
-YELLOW='\033[1;33m' 
-BLUE='\033[0;34m' 
-CYAN='\033[0;36m' 
-NC='\033[0m' # No Color 
- 
-# Функция для отображения заголовка 
-show_header() { 
-    clear 
-    echo -e "${BLUE}╔══════════════════════════════════════════════════════════════════╗${NC}" 
-    echo -e "${BLUE}║                    NGINX PROXY MANAGER                           ║${NC}" 
-    echo -e "${BLUE}║                        v1.0                                      ║${NC}" 
-    echo -e "${BLUE}╚══════════════════════════════════════════════════════════════════╝${NC}" 
-    echo "" 
-} 
- 
-# Функция для проверки статуса контейнеров 
-check_status() { 
-    echo -e "${CYAN}Статус контейнеров:${NC}" 
-    echo "─────────────────────────────────────────────────────────" 
-     
-    # Проверяем nginx_proxy 
-    if docker ps --filter "name=nginx_proxy" --filter "status=running" -q | grep -q .; then 
-        echo -e "nginx_proxy:      ${GREEN}●${NC} Запущен" 
-    else 
-        echo -e "nginx_proxy:      ${RED}●${NC} Остановлен" 
-    fi 
-     
-    # Проверяем nginx_letsencrypt 
-    if docker ps --filter "name=nginx_letsencrypt" --filter "status=running" -q | grep -q .; then 
-        echo -e "nginx_letsencrypt: ${GREEN}●${NC} Запущен" 
-    else 
-        echo -e "nginx_letsencrypt: ${RED}●${NC} Остановлен" 
-    fi 
-     
-    echo "─────────────────────────────────────────────────────────" 
-    echo "" 
-} 
- 
-# Функция для запуска сервисов 
-start_services() { 
-    echo -e "${YELLOW}Запуск сервисов...${NC}" 
-    cd "$NGINX_PATH" || exit 1 
-    docker-compose up -d 
-    if [ $? -eq 0 ]; then 
-        echo -e "${GREEN}✓ Сервисы успешно запущены${NC}" 
-    else 
-        echo -e "${RED}✗ Ошибка при запуске сервисов${NC}" 
-    fi 
-    read -p "Нажмите Enter для продолжения..." 
-} 
- 
-# Функция для остановки сервисов 
-stop_services() { 
-    echo -e "${YELLOW}Остановка сервисов...${NC}" 
-    cd "$NGINX_PATH" || exit 1 
-    docker-compose stop 
-    if [ $? -eq 0 ]; then 
-        echo -e "${GREEN}✓ Сервисы успешно остановлены${NC}" 
-    else 
-        echo -e "${RED}✗ Ошибка при остановке сервисов${NC}" 
-    fi 
-    read -p "Нажмите Enter для продолжения..." 
-} 
- 
-# Функция для перезагрузки сервисов 
-restart_services() { 
-    echo -e "${YELLOW}Перезагрузка сервисов...${NC}" 
-    cd "$NGINX_PATH" || exit 1 
-    docker-compose restart 
-    if [ $? -eq 0 ]; then 
-        echo -e "${GREEN}✓ Сервисы успешно перезагружены${NC}" 
-    else 
-        echo -e "${RED}✗ Ошибка при перезагрузке сервисов${NC}" 
-    fi 
-    read -p "Нажмите Enter для продолжения..." 
-} 
- 
-# Функция для просмотра логов nginx_proxy 
-view_nginx_logs() { 
-    echo -e "${CYAN}Логи nginx_proxy (последние 50 строк):${NC}" 
-    echo "─────────────────────────────────────────────────────────" 
-    docker logs --tail 50 nginx_proxy 
-    echo "─────────────────────────────────────────────────────────" 
-    read -p "Нажмите Enter для продолжения..." 
-} 
- 
-# Функция для просмотра логов nginx_letsencrypt 
-view_letsencrypt_logs() { 
-    echo -e "${CYAN}Логи nginx_letsencrypt (последние 50 строк):${NC}" 
-    echo "─────────────────────────────────────────────────────────" 
-    docker logs --tail 50 nginx_letsencrypt 
-    echo "─────────────────────────────────────────────────────────" 
-    read -p "Нажмите Enter для продолжения..." 
-} 
- 
-# Функция для просмотра логов nginx_proxy в реальном времени 
-follow_nginx_logs() { 
-    echo -e "${CYAN}Логи nginx_proxy в реальном времени (Ctrl+C для выхода):${NC}" 
-    echo "─────────────────────────────────────────────────────────" 
-    docker logs -f nginx_proxy 
-} 
- 
-# Функция для просмотра логов nginx_letsencrypt в реальном времени 
-follow_letsencrypt_logs() { 
-    echo -e "${CYAN}Логи nginx_letsencrypt в реальном времени (Ctrl+C для выхода):${NC}" 
-    echo "─────────────────────────────────────────────────────────" 
-    docker logs -f nginx_letsencrypt 
-} 
- 
-# Функция для показа дополнительной информации 
-show_info() { 
-    echo -e "${CYAN}Дополнительная информация:${NC}" 
-    echo "─────────────────────────────────────────────────────────" 
-    echo -e "Путь к конфигурации: ${YELLOW}$NGINX_PATH${NC}" 
-    echo -e "Docker Compose файл: ${YELLOW}$COMPOSE_FILE${NC}" 
-    echo "" 
-    echo -e "${CYAN}Статистика контейнеров:${NC}" 
-    docker stats --no-stream --format "table {{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}" nginx_proxy nginx_letsencrypt 2>/dev/null || echo "Контейнеры не запущены" 
-    echo "" 
-    echo -e "${CYAN}Порты:${NC}" 
-    echo "HTTP:  80" 
-    echo "HTTPS: 443" 
-    echo "" 
-    echo -e "${CYAN}Полезные команды:${NC}" 
-    echo "• Проверка nginx конфигурации: docker exec nginx_proxy nginx -t" 
-    echo "• Перезагрузка nginx: docker exec nginx_proxy nginx -s reload" 
-    echo "• Просмотр сертификатов: ls -la $NGINX_PATH/certs/" 
-    echo "─────────────────────────────────────────────────────────" 
-    read -p "Нажмите Enter для продолжения..." 
-} 
- 
-# Основное меню 
-show_menu() { 
-    show_header 
-    check_status 
-     
-    echo -e "${CYAN}Выберите действие:${NC}" 
-    echo "" 
-    echo -e "  ${GREEN}1)${NC} Запустить сервисы" 
-    echo -e "  ${RED}2)${NC} Остановить сервисы"  
-    echo -e "  ${YELLOW}3)${NC} Перезагрузить сервисы" 
-    echo "" 
-    echo -e "  ${BLUE}4)${NC} Просмотр логов nginx_proxy" 
-    echo -e "  ${BLUE}5)${NC} Просмотр логов nginx_letsencrypt" 
-    echo "" 
-    echo -e "  ${CYAN}6)${NC} Логи nginx_proxy в реальном времени" 
-    echo -e "  ${CYAN}7)${NC} Логи nginx_letsencrypt в реальном времени" 
-    echo "" 
-    echo -e "  ${YELLOW}8)${NC} Дополнительная информация" 
-    echo "" 
-    echo -e "  ${RED}0)${NC} Выход" 
-    echo "" 
-    echo -n "Ваш выбор: " 
-} 
- 
-# Основной цикл программы 
-main() { 
-    # Проверяем существование docker-compose файла 
-    if [ ! -f "$COMPOSE_FILE" ]; then 
-        echo -e "${RED}Ошибка: Docker Compose файл не найден по пути $COMPOSE_FILE${NC}" 
-        echo "Убедитесь, что файл существует и путь указан правильно." 
-        exit 1 
-    fi 
-     
-    while true; do 
-        show_menu 
-        read -r choice 
-         
-        case $choice in 
-            1) 
-                start_services 
-                ;; 
-            2) 
-                stop_services 
-                ;; 
-            3) 
-                restart_services 
-                ;; 
-            4) 
-                view_nginx_logs 
-                ;; 
-            5) 
-                view_letsencrypt_logs 
-                ;; 
-            6) 
-                follow_nginx_logs 
-                ;; 
-            7) 
-                follow_letsencrypt_logs 
-                ;; 
-            8) 
-                show_info 
-                ;; 
-            0) 
-                echo -e "${GREEN}До свидания!${NC}" 
-                exit 0 
-                ;; 
-            *) 
-                echo -e "${RED}Неверный выбор. Попробуйте еще раз.${NC}" 
-                sleep 2 
-                ;; 
-        esac 
-    done 
-} 
- 
-# Запуск основной функции 
-main 
-</code> 
- 
-==== Шаг 2: Настройка прав доступа ==== 
- 
-<code bash> 
-# Делаем файл исполняемым   
-chmod +x nginx-manager.sh 
- 
-# Создаем символическую ссылку для глобального доступа 
-sudo ln -sf /opt/nginx/nginx-manager.sh /usr/local/bin/nginx-manager 
-</code> 
- 
-===== Запуск скрипта ===== 
- 
-==== Из директории /opt/nginx ==== 
-<code bash> 
-cd /opt/nginx 
-./nginx-manager.sh 
-</code> 
- 
-==== Из любой директории ==== 
-<code bash> 
-nginx-manager 
-</code> 
- 
-===== Функции меню ===== 
- 
-==== Управление сервисами ==== 
- 
-^ Пункт меню ^ Действие ^ Описание ^ 
-| **1** | Запустить сервисы | Выполняет ''docker-compose up -d'' | 
-| **2** | Остановить сервисы | Выполняет ''docker-compose stop'' | 
-| **3** | Перезагрузить сервисы | Выполняет ''docker-compose restart'' | 
- 
-==== Просмотр логов ==== 
- 
-^ Пункт меню ^ Действие ^ Описание ^ 
-| **4** | Логи nginx_proxy | Показывает последние 50 строк | 
-| **5** | Логи nginx_letsencrypt | Показывает последние 50 строк | 
-| **6** | Real-time nginx_proxy | Отслеживание в реальном времени | 
-| **7** | Real-time nginx_letsencrypt | Отслеживание в реальном времени | 
- 
-==== Дополнительные функции ==== 
- 
-^ Пункт меню ^ Действие ^ Описание ^ 
-| **8** | Информация | Статистика, порты, полезные команды | 
-| **0** | Выход | Завершение работы скрипта | 
- 
-===== Особенности интерфейса ===== 
- 
-  * **Цветовая схема:** Зеленый = активен, красный = остановлен 
-  * **Статус в реальном времени:** Отображается при каждом открытии меню 
-  * **Обработка ошибок:** Уведомления об успешных/неуспешных операциях 
-  * **Навигация:** Простые цифровые команды 
- 
-===== Автозапуск сервиса (опционально) ===== 
- 
-==== Создание systemd сервиса ==== 
- 
-<code bash> 
-# Создаем файл сервиса 
-sudo nano /etc/systemd/system/nginx-proxy.service 
-</code> 
- 
-<file> 
-[Unit] 
-Description=Nginx Proxy with Let's Encrypt 
-Requires=docker.service 
-After=docker.service 
- 
-[Service] 
-Type=oneshot 
-RemainAfterExit=yes 
-WorkingDirectory=/opt/nginx 
-ExecStart=/usr/local/bin/docker-compose up -d 
-ExecStop=/usr/local/bin/docker-compose stop 
-TimeoutStartSec=0 
- 
-[Install] 
-WantedBy=multi-user.target 
-</file> 
- 
-==== Активация автозапуска ==== 
- 
-<code bash> 
-# Перезагружаем systemd 
-sudo systemctl daemon-reload 
- 
-# Включаем автозапуск 
-sudo systemctl enable nginx-proxy.service 
- 
-# Запускаем сервис 
-sudo systemctl start nginx-proxy.service 
- 
-# Проверяем статус 
-sudo systemctl status nginx-proxy.service 
-</code> 
- 
-===== Полезные алиасы ===== 
- 
-==== Добавление в ~/.bashrc ==== 
- 
-<code bash> 
-# Алиасы для nginx-proxy 
-alias nginx-start='cd /opt/nginx && docker-compose up -d' 
-alias nginx-stop='cd /opt/nginx && docker-compose stop' 
-alias nginx-restart='cd /opt/nginx && docker-compose restart' 
-alias nginx-logs='docker logs nginx_proxy' 
-alias nginx-logs-ssl='docker logs nginx_letsencrypt' 
-alias nginx-menu='/opt/nginx/nginx-manager.sh' 
-</code> 
- 
-==== Применение изменений ==== 
- 
-<code bash> 
-source ~/.bashrc 
-</code> 
- 
-===== Диагностика и устранение проблем ===== 
- 
-==== Проверка статуса контейнеров ==== 
- 
-<code bash> 
-# Все запущенные контейнеры 
-docker ps 
- 
-# Все контейнеры (включая остановленные) 
-docker ps -a 
- 
-# Только nginx контейнеры 
-docker ps --filter "name=nginx" 
-</code> 
- 
-==== Проверка логов ==== 
- 
-<code bash> 
-# Логи nginx-proxy 
-docker logs nginx_proxy 
- 
-# Логи Let's Encrypt 
-docker logs nginx_letsencrypt 
- 
-# Логи в реальном времени 
-docker logs -f nginx_proxy 
-</code> 
- 
-==== Проверка конфигурации ==== 
- 
-<code bash> 
-# Тест nginx конфигурации 
-docker exec nginx_proxy nginx -t 
- 
-# Перезагрузка nginx без перезапуска контейнера 
-docker exec nginx_proxy nginx -s reload 
- 
-# Просмотр активной конфигурации 
-docker exec nginx_proxy cat /etc/nginx/conf.d/default.conf 
-</code> 
- 
-==== Проверка сертификатов ==== 
- 
-<code bash> 
-# Список сертификатов 
-ls -la /opt/nginx/certs/ 
- 
-# Проверка срока действия сертификата 
-openssl x509 -in /opt/nginx/certs/your-domain.com.crt -text -noout | grep "Not After" 
-</code> 
- 
-===== Структура файлов ===== 
- 
-<file> 
-/opt/nginx/ 
-├── docker-compose.yml      # Основная конфигурация 
-├── nginx-manager.sh        # Скрипт управления 
-├── certs/                  # SSL сертификаты 
-├── vhost.d/               # Виртуальные хосты 
-├── html/                  # Веб-файлы 
-└── acme/                  # ACME данные 
-</file> 
- 
-===== Безопасность ===== 
- 
-<note warning> 
-**Важно:** Убедитесь, что скрипт доступен только авторизованным пользователям: 
- 
-<code bash> 
-# Ограничение доступа к скрипту 
-chmod 750 /opt/nginx/nginx-manager.sh 
- 
-# Создание группы для управления nginx 
-sudo groupadd nginx-admins 
-sudo usermod -a -G nginx-admins username 
-</code> 
-</note> 
- 
-===== Мониторинг ===== 
- 
-==== Простой мониторинг через cron ==== 
- 
-<code bash> 
-# Добавляем в crontab проверку каждые 5 минут 
-*/5 * * * * /usr/bin/docker ps | grep nginx_proxy || /opt/nginx/nginx-manager.sh start >/dev/null 2>&1 
-</code> 
- 
-==== Уведомления о статусе ==== 
- 
-<code bash> 
-# Скрипт проверки статуса с уведомлениями 
-#!/bin/bash 
-if ! docker ps | grep -q nginx_proxy; then 
-    echo "Nginx Proxy не запущен!" | mail -s "Nginx Alert" admin@domain.com 
-fi 
-</code> 
- 
-===== Обновление ===== 
- 
-==== Обновление образов ==== 
- 
-<code bash> 
-# Переходим в директорию 
-cd /opt/nginx 
- 
-# Останавливаем сервисы 
-docker-compose stop 
- 
-# Обновляем образы 
-docker-compose pull 
- 
-# Запускаем с новыми образами 
-docker-compose up -d 
- 
-# Удаляем старые образы 
-docker image prune -f 
-</code> 
- 
-<note important> 
-Всегда создавайте резервные копии перед обновлением: 
- 
-<code bash> 
-# Резервная копия конфигураций 
-tar -czf nginx-backup-$(date +%Y%m%d).tar.gz /opt/nginx/ 
-</code> 
-</note> 
  • vm/nginx/04-nginx_menu.1756470766.txt.gz
  • Последнее изменение: 2025/08/29 12:32
  • admin