feat: Initial commit Plants vs Zombies Web Edition v2.4
- 5 Biomes: Day, Night, Pool, Fog, Roof (25 Campaign levels) - Minigames: Wall-nut Bowling, I Zombie, Roguelike, Boss Rush & Dr. Zomboss - Systems: Zen Garden, Workshop Crafting, Almanac, Tree of Wisdom, Achievements - Backend: REST API + SQLite Accounts & Save Synchronization - Infrastructure: Nginx HTTPS & Docker deployment
This commit is contained in:
Executable
+71
@@ -0,0 +1,71 @@
|
||||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
PROJECT_DIR="$(cd "$(dirname "$0")/.." && pwd)"
|
||||
cd "$PROJECT_DIR"
|
||||
|
||||
DOMAIN="ai.qpid.pro"
|
||||
EMAIL="admin@qpid.pro"
|
||||
|
||||
echo "=== [1/5] Проверка и создание директорий Certbot ==="
|
||||
mkdir -p "$PROJECT_DIR/certbot/conf" "$PROJECT_DIR/certbot/www"
|
||||
chmod -R 755 "$PROJECT_DIR/certbot/www"
|
||||
|
||||
echo "=== [2/5] Проверка существующих SSL сертификатов ==="
|
||||
CERT_PATH="$PROJECT_DIR/certbot/conf/live/$DOMAIN/fullchain.pem"
|
||||
|
||||
if [ -f "$CERT_PATH" ]; then
|
||||
echo "Сертификат для $DOMAIN уже существует."
|
||||
cp "$PROJECT_DIR/nginx/conf.d/ai.qpid.pro.conf.ssl" "$PROJECT_DIR/nginx/conf.d/ai.qpid.pro.conf"
|
||||
docker compose up -d --build
|
||||
echo "Nginx и Certbot запущены с существующим SSL."
|
||||
else
|
||||
echo "Сертификат не найден. Запуск временного HTTP-сервера для верификации ACME..."
|
||||
cp "$PROJECT_DIR/nginx/conf.d/ai.qpid.pro.conf.http" "$PROJECT_DIR/nginx/conf.d/ai.qpid.pro.conf"
|
||||
|
||||
# Сборка и запуск nginx в HTTP-режиме
|
||||
docker compose up -d --build nginx
|
||||
|
||||
echo "Ожидание готовности Nginx на порту 80..."
|
||||
sleep 3
|
||||
|
||||
echo "=== [3/5] Запрос SSL-сертификата через Certbot ==="
|
||||
SUCCESS=0
|
||||
for ATTEMPT in 1 2 3; do
|
||||
echo "Попытка $ATTEMPT получения сертификата через Certbot..."
|
||||
if docker compose run --rm certbot certonly \
|
||||
--webroot \
|
||||
--webroot-path=/var/www/certbot \
|
||||
-d "$DOMAIN" \
|
||||
--email "$EMAIL" \
|
||||
--agree-tos \
|
||||
--no-eff-email \
|
||||
--non-interactive; then
|
||||
SUCCESS=1
|
||||
echo "Сертификат успешно получен!"
|
||||
break
|
||||
else
|
||||
echo "Попытка $ATTEMPT не удалась. Пауза 5 секунд..."
|
||||
sleep 5
|
||||
fi
|
||||
done
|
||||
|
||||
if [ "$SUCCESS" -ne 1 ]; then
|
||||
echo "❌ Ошибка: Не удалось получить SSL-сертификат для $DOMAIN."
|
||||
echo "Проверьте, что DNS A-запись для $DOMAIN указывает на публичный IP этого сервера."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "=== [4/5] Применение полной SSL-конфигурации Nginx ==="
|
||||
cp "$PROJECT_DIR/nginx/conf.d/ai.qpid.pro.conf.ssl" "$PROJECT_DIR/nginx/conf.d/ai.qpid.pro.conf"
|
||||
docker compose restart nginx
|
||||
fi
|
||||
|
||||
echo "=== [5/5] Настройка регулярного обновления сертификатов ==="
|
||||
chmod +x "$PROJECT_DIR/scripts/renew-certs.sh"
|
||||
|
||||
# Добавление задачи обновления в cron (если еще не добавлена)
|
||||
CRON_JOB="0 3 * * * $PROJECT_DIR/scripts/renew-certs.sh >> /var/log/certbot-renew.log 2>&1"
|
||||
(crontab -l 2>/dev/null | grep -Fv "$PROJECT_DIR/scripts/renew-certs.sh" ; echo "$CRON_JOB") | crontab - || true
|
||||
|
||||
echo "=== Развертывание и настройка SSL успешно завершены! ==="
|
||||
Reference in New Issue
Block a user