feat: CI/CD, per-domain HTTPS, backup, config generator

- sites.yml — единый источник истины для всех сайтов
- generate-configs.sh — генератор nginx конфигов, certbot domains.txt, .env
- nginx: per-domain HTTPS (вместо all-or-nothing switch-config)
- certbot: единый renew-all.sh, динамический init (без 5 дублирующих скриптов)
- backup: контейнер с pg_dump + rclone (Яндекс.Диск), ежедневно в 3AM
- Gitea + Gitea Runner в docker-compose (self-hosted Git + CI/CD)
- .gitea/workflows/deploy.yml — CI/CD pipeline: push → авто-деплой
- Makefile: generate-configs, reconfig, deploy, backup, restore, gitea, help
This commit is contained in:
valitovgaziz
2026-06-12 12:22:19 +05:00
parent abcb327278
commit 8e766b540e
31 changed files with 1535 additions and 343 deletions
+118 -1
View File
@@ -237,4 +237,121 @@ start_yalarba:
docker compose up yalarba -d
# Полный цикл обновления yalarba-nuxt
yalarba: stop_yalarba git build_yalarba start_yalarba wn
yalarba: stop_yalarba git build_yalarba start_yalarba wn
# ═══════════════════════════════════════════════
# НОВЫЕ ЦЕЛИ: generate-configs, deploy, backup
# ═══════════════════════════════════════════════
# Генерация конфигов из sites.yml
generate-configs:
bash generate-configs.sh
# Генерация + рестарт nginx
reconfig: generate-configs
docker compose restart nginx
$(MAKE) wn
# Авто-детект изменённых сервисов и деплой только их
deploy: git
@echo "=== Detecting changes ==="
@CHANGED=$$(git diff --name-only HEAD~1 HEAD | grep -oP 'main_dc/\K[^/]+' | sort -u); \
for svc in $$CHANGED; do \
case "$$svc" in \
BB) name="api_bb" ;; \
certbot) name="certbot" ;; \
backup) name="backup" ;; \
gitea) name="gitea" ;; \
*) name="$$svc" ;; \
esac; \
if grep -q "^ $$name:" docker-compose.yml 2>/dev/null; then \
echo " → Rebuilding $$name..."; \
$(MAKE) stop_$$name build_$$name start_$$name 2>/dev/null || \
$(MAKE) stop_$$svc build_$$svc start_$$svc 2>/dev/null || true; \
fi; \
done; \
if echo "$$CHANGED" | grep -q 'sites.yml\|nginx'; then \
echo " → Regenerating configs..."; \
bash generate-configs.sh; \
docker compose restart nginx; \
fi
# Ручной запуск бэкапа
backup:
docker compose exec backup /opt/backup.sh
# Ручной запуск бэкапа (разовый контейнер)
backup-run:
docker compose run --rm backup /opt/backup.sh
# Восстановление из бэкапа: make restore [DATE=2026-06-11]
restore:
docker compose run --rm backup /opt/restore.sh $(DATE)
# Gitea — полный цикл обновления
gitea: stop_gitea git build_gitea start_gitea wn
stop_gitea:
docker compose down gitea
build_gitea:
docker compose build gitea --no-cache
start_gitea:
docker compose up gitea -d
# Gitea Runner — полный цикл
gitea-runner: stop_gitea-runner git build_gitea-runner start_gitea-runner wn
stop_gitea-runner:
docker compose down gitea-runner
build_gitea-runner:
docker compose build gitea-runner --no-cache
start_gitea-runner:
docker compose up gitea-runner -d
# Gitea first-time setup helper
gitea-setup:
@echo "=== Gitea Setup ==="
@echo "1. Open http://94.41.23.97:3001 in browser"
@echo "2. Complete initial setup (DB: SQLite3 is fine)"
@echo "3. Create admin user"
@echo "4. Create new repository 'tp' and push:"
@echo " git remote add gitea http://94.41.23.97:3001/USER/tp.git"
@echo " git push -u gitea main"
@echo "5. Register runner:"
@echo " Settings → Actions → Runners → Create Token"
@echo " Update GITEA_RUNNER_REGISTRATION_TOKEN in docker-compose.yml"
@echo " Then: docker compose up -d gitea-runner"
@echo "6. Add secrets in repo Settings → Actions → Secrets:"
@echo " (none needed — runner runs locally)"
# Показать все доступные цели
help:
@echo "=== Make targets ==="
@echo ""
@echo "Site management:"
@echo " generate-configs — generate nginx configs from sites.yml"
@echo " reconfig — generate configs + restart nginx"
@echo ""
@echo "Deploy:"
@echo " all — full cycle all services"
@echo " deploy — auto-detect changes, rebuild only changed"
@echo " <service> — full cycle for one service"
@echo ""
@echo "Backup:"
@echo " backup — run backup via running container"
@echo " backup-run — run backup in one-shot container"
@echo " restore DATE=... — restore from backup"
@echo ""
@echo "Gitea:"
@echo " gitea — full cycle Gitea"
@echo " gitea-runner — full cycle Runner"
@echo " gitea-setup — first-time setup instructions"
@echo ""
@echo "Monitoring:"
@echo " wn — watch docker ps"
@echo " logs_<service> — logs for a service"
@echo " bb_db — psql into bb_db"