====== Nginx Proxy Manager - Скрипт управления ======
===== Описание =====
Скрипт для удобного управления nginx-proxy инстансом с Let's Encrypt через интерактивное меню.
**Расположение:** ''/opt/nginx/nginx-manager.sh''
**Контейнеры:**
* ''nginx_proxy'' - основной прокси-сервер
* ''nginx_letsencrypt'' - управление SSL сертификатами
===== Установка скрипта =====
==== Шаг 1: Создание файла ====
# Переходим в директорию nginx-proxy
cd /opt/nginx
# Создаем файл скрипта
nano nginx-manager.sh
**Содержимое файла nginx-manager.sh:**
#!/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
==== Шаг 2: Настройка прав доступа ====
# Делаем файл исполняемым
chmod +x nginx-manager.sh
# Создаем символическую ссылку для глобального доступа
sudo ln -sf /opt/nginx/nginx-manager.sh /usr/local/bin/nginx-manager
===== Запуск скрипта =====
==== Из директории /opt/nginx ====
cd /opt/nginx
./nginx-manager.sh
==== Из любой директории ====
nginx-manager
===== Функции меню =====
==== Управление сервисами ====
^ Пункт меню ^ Действие ^ Описание ^
| **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 сервиса ====
# Создаем файл сервиса
sudo nano /etc/systemd/system/nginx-proxy.service
[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
==== Активация автозапуска ====
# Перезагружаем systemd
sudo systemctl daemon-reload
# Включаем автозапуск
sudo systemctl enable nginx-proxy.service
# Запускаем сервис
sudo systemctl start nginx-proxy.service
# Проверяем статус
sudo systemctl status nginx-proxy.service
===== Полезные алиасы =====
==== Добавление в ~/.bashrc ====
# Алиасы для 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'
==== Применение изменений ====
source ~/.bashrc
===== Диагностика и устранение проблем =====
==== Проверка статуса контейнеров ====
# Все запущенные контейнеры
docker ps
# Все контейнеры (включая остановленные)
docker ps -a
# Только nginx контейнеры
docker ps --filter "name=nginx"
==== Проверка логов ====
# Логи nginx-proxy
docker logs nginx_proxy
# Логи Let's Encrypt
docker logs nginx_letsencrypt
# Логи в реальном времени
docker logs -f nginx_proxy
==== Проверка конфигурации ====
# Тест 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
==== Проверка сертификатов ====
# Список сертификатов
ls -la /opt/nginx/certs/
# Проверка срока действия сертификата
openssl x509 -in /opt/nginx/certs/your-domain.com.crt -text -noout | grep "Not After"
===== Структура файлов =====
/opt/nginx/
├── docker-compose.yml # Основная конфигурация
├── nginx-manager.sh # Скрипт управления
├── certs/ # SSL сертификаты
├── vhost.d/ # Виртуальные хосты
├── html/ # Веб-файлы
└── acme/ # ACME данные
===== Безопасность =====
**Важно:** Убедитесь, что скрипт доступен только авторизованным пользователям:
# Ограничение доступа к скрипту
chmod 750 /opt/nginx/nginx-manager.sh
# Создание группы для управления nginx
sudo groupadd nginx-admins
sudo usermod -a -G nginx-admins username
===== Мониторинг =====
==== Простой мониторинг через cron ====
# Добавляем в crontab проверку каждые 5 минут
*/5 * * * * /usr/bin/docker ps | grep nginx_proxy || /opt/nginx/nginx-manager.sh start >/dev/null 2>&1
==== Уведомления о статусе ====
# Скрипт проверки статуса с уведомлениями
#!/bin/bash
if ! docker ps | grep -q nginx_proxy; then
echo "Nginx Proxy не запущен!" | mail -s "Nginx Alert" admin@domain.com
fi
===== Обновление =====
==== Обновление образов ====
# Переходим в директорию
cd /opt/nginx
# Останавливаем сервисы
docker-compose stop
# Обновляем образы
docker-compose pull
# Запускаем с новыми образами
docker-compose up -d
# Удаляем старые образы
docker image prune -f
Всегда создавайте резервные копии перед обновлением:
# Резервная копия конфигураций
tar -czf nginx-backup-$(date +%Y%m%d).tar.gz /opt/nginx/