Различия
Показаны различия между двумя версиями страницы.
| Предыдущая версия справа и слева Предыдущая версия | |||
| vm:nginx:04-nginx_menu [2025/08/29 12:32] – admin | vm:nginx:04-nginx_menu [2026/03/03 12:15] (текущий) – удалено admin | ||
|---|---|---|---|
| Строка 1: | Строка 1: | ||
| - | ====== Nginx Proxy Manager - Скрипт управления ====== | ||
| - | ===== Описание ===== | ||
| - | |||
| - | Скрипт для удобного управления nginx-proxy инстансом с Let's Encrypt через интерактивное меню. | ||
| - | |||
| - | **Расположение: | ||
| - | |||
| - | **Контейнеры: | ||
| - | * '' | ||
| - | * '' | ||
| - | |||
| - | ===== Установка скрипта ===== | ||
| - | |||
| - | ==== Шаг 1: Создание файла ==== | ||
| - | |||
| - | <code bash> | ||
| - | # Переходим в директорию nginx-proxy | ||
| - | cd /opt/nginx | ||
| - | |||
| - | # Создаем файл скрипта | ||
| - | nano nginx-manager.sh | ||
| - | </ | ||
| - | |||
| - | **Содержимое файла nginx-manager.sh: | ||
| - | |||
| - | <code bash> | ||
| - | #!/bin/bash | ||
| - | |||
| - | # Путь к папке с docker-compose.yml | ||
| - | NGINX_PATH="/ | ||
| - | COMPOSE_FILE=" | ||
| - | |||
| - | # Цвета для вывода | ||
| - | RED=' | ||
| - | GREEN=' | ||
| - | YELLOW=' | ||
| - | BLUE=' | ||
| - | CYAN=' | ||
| - | NC=' | ||
| - | |||
| - | # Функция для отображения заголовка | ||
| - | show_header() { | ||
| - | clear | ||
| - | echo -e " | ||
| - | echo -e " | ||
| - | echo -e " | ||
| - | echo -e " | ||
| - | echo "" | ||
| - | } | ||
| - | |||
| - | # Функция для проверки статуса контейнеров | ||
| - | check_status() { | ||
| - | echo -e " | ||
| - | echo " | ||
| - | | ||
| - | # Проверяем nginx_proxy | ||
| - | if docker ps --filter " | ||
| - | echo -e " | ||
| - | else | ||
| - | echo -e " | ||
| - | fi | ||
| - | | ||
| - | # Проверяем nginx_letsencrypt | ||
| - | if docker ps --filter " | ||
| - | echo -e " | ||
| - | else | ||
| - | echo -e " | ||
| - | fi | ||
| - | | ||
| - | echo " | ||
| - | echo "" | ||
| - | } | ||
| - | |||
| - | # Функция для запуска сервисов | ||
| - | start_services() { | ||
| - | echo -e " | ||
| - | cd " | ||
| - | docker-compose up -d | ||
| - | if [ $? -eq 0 ]; then | ||
| - | echo -e " | ||
| - | else | ||
| - | echo -e " | ||
| - | fi | ||
| - | read -p " | ||
| - | } | ||
| - | |||
| - | # Функция для остановки сервисов | ||
| - | stop_services() { | ||
| - | echo -e " | ||
| - | cd " | ||
| - | docker-compose stop | ||
| - | if [ $? -eq 0 ]; then | ||
| - | echo -e " | ||
| - | else | ||
| - | echo -e " | ||
| - | fi | ||
| - | read -p " | ||
| - | } | ||
| - | |||
| - | # Функция для перезагрузки сервисов | ||
| - | restart_services() { | ||
| - | echo -e " | ||
| - | cd " | ||
| - | docker-compose restart | ||
| - | if [ $? -eq 0 ]; then | ||
| - | echo -e " | ||
| - | else | ||
| - | echo -e " | ||
| - | fi | ||
| - | read -p " | ||
| - | } | ||
| - | |||
| - | # Функция для просмотра логов nginx_proxy | ||
| - | view_nginx_logs() { | ||
| - | echo -e " | ||
| - | echo " | ||
| - | docker logs --tail 50 nginx_proxy | ||
| - | echo " | ||
| - | read -p " | ||
| - | } | ||
| - | |||
| - | # Функция для просмотра логов nginx_letsencrypt | ||
| - | view_letsencrypt_logs() { | ||
| - | echo -e " | ||
| - | echo " | ||
| - | docker logs --tail 50 nginx_letsencrypt | ||
| - | echo " | ||
| - | read -p " | ||
| - | } | ||
| - | |||
| - | # Функция для просмотра логов nginx_proxy в реальном времени | ||
| - | follow_nginx_logs() { | ||
| - | echo -e " | ||
| - | echo " | ||
| - | docker logs -f nginx_proxy | ||
| - | } | ||
| - | |||
| - | # Функция для просмотра логов nginx_letsencrypt в реальном времени | ||
| - | follow_letsencrypt_logs() { | ||
| - | echo -e " | ||
| - | echo " | ||
| - | docker logs -f nginx_letsencrypt | ||
| - | } | ||
| - | |||
| - | # Функция для показа дополнительной информации | ||
| - | show_info() { | ||
| - | echo -e " | ||
| - | echo " | ||
| - | echo -e " | ||
| - | echo -e " | ||
| - | echo "" | ||
| - | echo -e " | ||
| - | docker stats --no-stream --format "table {{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}" | ||
| - | echo "" | ||
| - | echo -e " | ||
| - | echo " | ||
| - | echo " | ||
| - | echo "" | ||
| - | echo -e " | ||
| - | echo "• Проверка nginx конфигурации: | ||
| - | echo "• Перезагрузка nginx: docker exec nginx_proxy nginx -s reload" | ||
| - | echo "• Просмотр сертификатов: | ||
| - | echo " | ||
| - | read -p " | ||
| - | } | ||
| - | |||
| - | # Основное меню | ||
| - | show_menu() { | ||
| - | show_header | ||
| - | check_status | ||
| - | | ||
| - | echo -e " | ||
| - | echo "" | ||
| - | echo -e " | ||
| - | echo -e " | ||
| - | echo -e " | ||
| - | echo "" | ||
| - | echo -e " | ||
| - | echo -e " | ||
| - | echo "" | ||
| - | echo -e " | ||
| - | echo -e " | ||
| - | echo "" | ||
| - | echo -e " | ||
| - | echo "" | ||
| - | echo -e " | ||
| - | echo "" | ||
| - | echo -n " | ||
| - | } | ||
| - | |||
| - | # Основной цикл программы | ||
| - | main() { | ||
| - | # Проверяем существование docker-compose файла | ||
| - | if [ ! -f " | ||
| - | echo -e " | ||
| - | 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 " | ||
| - | exit 0 | ||
| - | ;; | ||
| - | *) | ||
| - | echo -e " | ||
| - | sleep 2 | ||
| - | ;; | ||
| - | esac | ||
| - | done | ||
| - | } | ||
| - | |||
| - | # Запуск основной функции | ||
| - | main | ||
| - | </ | ||
| - | |||
| - | ==== Шаг 2: Настройка прав доступа ==== | ||
| - | |||
| - | <code bash> | ||
| - | # Делаем файл исполняемым | ||
| - | chmod +x nginx-manager.sh | ||
| - | |||
| - | # Создаем символическую ссылку для глобального доступа | ||
| - | sudo ln -sf / | ||
| - | </ | ||
| - | |||
| - | ===== Запуск скрипта ===== | ||
| - | |||
| - | ==== Из директории /opt/nginx ==== | ||
| - | <code bash> | ||
| - | cd /opt/nginx | ||
| - | ./ | ||
| - | </ | ||
| - | |||
| - | ==== Из любой директории ==== | ||
| - | <code bash> | ||
| - | nginx-manager | ||
| - | </ | ||
| - | |||
| - | ===== Функции меню ===== | ||
| - | |||
| - | ==== Управление сервисами ==== | ||
| - | |||
| - | ^ Пункт меню ^ Действие ^ Описание ^ | ||
| - | | **1** | Запустить сервисы | Выполняет '' | ||
| - | | **2** | Остановить сервисы | Выполняет '' | ||
| - | | **3** | Перезагрузить сервисы | Выполняет '' | ||
| - | |||
| - | ==== Просмотр логов ==== | ||
| - | |||
| - | ^ Пункт меню ^ Действие ^ Описание ^ | ||
| - | | **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 / | ||
| - | </ | ||
| - | |||
| - | < | ||
| - | [Unit] | ||
| - | Description=Nginx Proxy with Let's Encrypt | ||
| - | Requires=docker.service | ||
| - | After=docker.service | ||
| - | |||
| - | [Service] | ||
| - | Type=oneshot | ||
| - | RemainAfterExit=yes | ||
| - | WorkingDirectory=/ | ||
| - | ExecStart=/ | ||
| - | ExecStop=/ | ||
| - | TimeoutStartSec=0 | ||
| - | |||
| - | [Install] | ||
| - | WantedBy=multi-user.target | ||
| - | </ | ||
| - | |||
| - | ==== Активация автозапуска ==== | ||
| - | |||
| - | <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 | ||
| - | </ | ||
| - | |||
| - | ===== Полезные алиасы ===== | ||
| - | |||
| - | ==== Добавление в ~/.bashrc ==== | ||
| - | |||
| - | <code bash> | ||
| - | # Алиасы для nginx-proxy | ||
| - | alias nginx-start=' | ||
| - | alias nginx-stop=' | ||
| - | alias nginx-restart=' | ||
| - | alias nginx-logs=' | ||
| - | alias nginx-logs-ssl=' | ||
| - | alias nginx-menu='/ | ||
| - | </ | ||
| - | |||
| - | ==== Применение изменений ==== | ||
| - | |||
| - | <code bash> | ||
| - | source ~/.bashrc | ||
| - | </ | ||
| - | |||
| - | ===== Диагностика и устранение проблем ===== | ||
| - | |||
| - | ==== Проверка статуса контейнеров ==== | ||
| - | |||
| - | <code bash> | ||
| - | # Все запущенные контейнеры | ||
| - | docker ps | ||
| - | |||
| - | # Все контейнеры (включая остановленные) | ||
| - | docker ps -a | ||
| - | |||
| - | # Только nginx контейнеры | ||
| - | docker ps --filter " | ||
| - | </ | ||
| - | |||
| - | ==== Проверка логов ==== | ||
| - | |||
| - | <code bash> | ||
| - | # Логи nginx-proxy | ||
| - | docker logs nginx_proxy | ||
| - | |||
| - | # Логи Let's Encrypt | ||
| - | docker logs nginx_letsencrypt | ||
| - | |||
| - | # Логи в реальном времени | ||
| - | docker logs -f nginx_proxy | ||
| - | </ | ||
| - | |||
| - | ==== Проверка конфигурации ==== | ||
| - | |||
| - | <code bash> | ||
| - | # Тест nginx конфигурации | ||
| - | docker exec nginx_proxy nginx -t | ||
| - | |||
| - | # Перезагрузка nginx без перезапуска контейнера | ||
| - | docker exec nginx_proxy nginx -s reload | ||
| - | |||
| - | # Просмотр активной конфигурации | ||
| - | docker exec nginx_proxy cat / | ||
| - | </ | ||
| - | |||
| - | ==== Проверка сертификатов ==== | ||
| - | |||
| - | <code bash> | ||
| - | # Список сертификатов | ||
| - | ls -la / | ||
| - | |||
| - | # Проверка срока действия сертификата | ||
| - | openssl x509 -in / | ||
| - | </ | ||
| - | |||
| - | ===== Структура файлов ===== | ||
| - | |||
| - | < | ||
| - | /opt/nginx/ | ||
| - | ├── docker-compose.yml | ||
| - | ├── nginx-manager.sh | ||
| - | ├── certs/ | ||
| - | ├── vhost.d/ | ||
| - | ├── html/ # Веб-файлы | ||
| - | └── acme/ # ACME данные | ||
| - | </ | ||
| - | |||
| - | ===== Безопасность ===== | ||
| - | |||
| - | <note warning> | ||
| - | **Важно: | ||
| - | |||
| - | <code bash> | ||
| - | # Ограничение доступа к скрипту | ||
| - | chmod 750 / | ||
| - | |||
| - | # Создание группы для управления nginx | ||
| - | sudo groupadd nginx-admins | ||
| - | sudo usermod -a -G nginx-admins username | ||
| - | </ | ||
| - | </ | ||
| - | |||
| - | ===== Мониторинг ===== | ||
| - | |||
| - | ==== Простой мониторинг через cron ==== | ||
| - | |||
| - | <code bash> | ||
| - | # Добавляем в crontab проверку каждые 5 минут | ||
| - | */5 * * * * / | ||
| - | </ | ||
| - | |||
| - | ==== Уведомления о статусе ==== | ||
| - | |||
| - | <code bash> | ||
| - | # Скрипт проверки статуса с уведомлениями | ||
| - | #!/bin/bash | ||
| - | if ! docker ps | grep -q nginx_proxy; | ||
| - | echo "Nginx Proxy не запущен!" | ||
| - | fi | ||
| - | </ | ||
| - | |||
| - | ===== Обновление ===== | ||
| - | |||
| - | ==== Обновление образов ==== | ||
| - | |||
| - | <code bash> | ||
| - | # Переходим в директорию | ||
| - | cd /opt/nginx | ||
| - | |||
| - | # Останавливаем сервисы | ||
| - | docker-compose stop | ||
| - | |||
| - | # Обновляем образы | ||
| - | docker-compose pull | ||
| - | |||
| - | # Запускаем с новыми образами | ||
| - | docker-compose up -d | ||
| - | |||
| - | # Удаляем старые образы | ||
| - | docker image prune -f | ||
| - | </ | ||
| - | |||
| - | <note important> | ||
| - | Всегда создавайте резервные копии перед обновлением: | ||
| - | |||
| - | <code bash> | ||
| - | # Резервная копия конфигураций | ||
| - | tar -czf nginx-backup-$(date +%Y%m%d).tar.gz /opt/nginx/ | ||
| - | </ | ||
| - | </ | ||