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:
2026-09-17 09:30:52 +00:00
commit 6457a8904e
50 changed files with 14486 additions and 0 deletions
+71
View File
@@ -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 успешно завершены! ==="