#!/bin/bash set -e echo "==========================================" echo " AegisOne Nginx Fix Script" echo "==========================================" NGINX_DIR="/opt/projects/nginx-proxy" # 1. Остановить текущий nginx, если запущен echo "" echo "[1/7] Остановка текущего nginx..." cd "$NGINX_DIR" docker compose down 2>/dev/null || true # 2. Сохранить старые конфиги echo "" echo "[2/7] Резервное копирование старых конфигов..." BACKUP_DIR="/root/nginx-backup-$(date +%s)" mkdir -p "$BACKUP_DIR" if [ -f "$NGINX_DIR/nginx.conf" ]; then cp "$NGINX_DIR/nginx.conf" "$BACKUP_DIR/" fi if [ -d "$NGINX_DIR/conf.d" ]; then cp -r "$NGINX_DIR/conf.d" "$BACKUP_DIR/" fi echo " ✅ Бэкап: $BACKUP_DIR" # 3. Создать структуру директорий echo "" echo "[3/7] Создание структуры..." mkdir -p "$NGINX_DIR/certs/live/aegisone.ru" mkdir -p "$NGINX_DIR/conf.d" mkdir -p "$NGINX_DIR/html" mkdir -p "$NGINX_DIR/certs" # 4. Сгенерировать самоподписанный сертификат (временный, пока Let's Encrypt не выдаст настоящий) echo "" echo "[4/7] Генерация временного самоподписанного сертификата..." if [ ! -f "$NGINX_DIR/certs/live/aegisone.ru/fullchain.pem" ]; then openssl req -x509 -nodes -days 30 -newkey rsa:2048 \ -keyout "$NGINX_DIR/certs/live/aegisone.ru/privkey.pem" \ -out "$NGINX_DIR/certs/live/aegisone.ru/fullchain.pem" \ -subj "/CN=aegisone.ru" \ 2>/dev/null || { echo " ⚠️ OpenSSL не найден, генерируем через Docker..." docker run --rm -v "$NGINX_DIR/certs:/certs" alpine:latest sh -c " apk add openssl >/dev/null 2>&1 mkdir -p /certs/live/aegisone.ru openssl req -x509 -nodes -days 30 -newkey rsa:2048 \ -keyout /certs/live/aegisone.ru/privkey.pem \ -out /certs/live/aegisone.ru/fullchain.pem \ -subj '/CN=aegisone.ru' " } echo " ✅ Самоподписанный сертификат создан" else echo " ℹ️ Сертификат уже существует" fi # 5. Копирование конфигов echo "" echo "[5/7] Установка новых конфигов..." cp nginx.conf "$NGINX_DIR/nginx.conf" cp -r conf.d/* "$NGINX_DIR/conf.d/" echo " ✅ Конфиги скопированы" # 6. Создать html/index.html для webroot (нужен certbot) echo "" echo "[6/7] Подготовка webroot..." mkdir -p "$NGINX_DIR/html/.well-known/acme-challenge" cat > "$NGINX_DIR/html/index.html" << 'EOF' AegisOne

AegisOne Engineering

EOF echo " ✅ Webroot готов" # 7. Запуск nginx echo "" echo "[7/7] Запуск nginx..." cd "$NGINX_DIR" docker compose up -d sleep 3 # Проверка echo "" echo "==========================================" echo " Проверка..." echo "==========================================" if docker compose exec nginx nginx -t 2>/dev/null; then echo " ✅ nginx: конфиг валидный" else echo " ❌ nginx: ошибка в конфиге" docker compose logs --tail=20 nginx exit 1 fi # Проверить отвечает ли nginx HTTP_CODE=$(curl -s -o /dev/null -w "%{http_code}" http://localhost/ 2>/dev/null || echo "FAIL") echo " HTTP localhost: $HTTP_CODE" echo "" echo "==========================================" echo " Далее: получить Let's Encrypt сертификаты" echo "==========================================" echo "" echo "Запустите:" echo " cd $NGINX_DIR" echo " docker compose run --rm certbot certonly --webroot \\" echo " --webroot-path=/var/www/certbot \\" echo " -d aegisone.ru -d www.aegisone.ru \\" echo " -d service.aegisone.ru \\" echo " -d git.aegisone.ru \\" echo " --email admin@aegisone.ru \\" echo " --agree-tos --non-interactive" echo "" echo "После получения сертификатов перезапустите nginx:" echo " docker compose exec nginx nginx -s reload" echo "" echo "Готово!"