feat: скаффолд Astro 5 SSG (главная + /privacy + consent gate)
Some checks failed
deploy / deploy (push) Failing after 14s

- Главная: hero, адрес Люблинская 100 (Аквапарк ФЭНТАЗИ), 4 кликабельных tel:, карта Яндекса
- /privacy: политика 152-ФЗ + ConsentRevoke (отозвать/сбросить)
- Аналитика перенесена 1:1 с WP: Яндекс.Метрика 47169531 (Webvisor) + GA4 GT-WRF7ZZ8
- Скрипты в type=text/plain, активируются после согласия (pit-consent в localStorage+cookie)
- robots.txt с явным Allow для GPTBot/ClaudeBot/PerplexityBot/Google-Extended/CCBot
- llms.txt + ai.txt (spawning.ai стандарт)
- IndexNow ключ 901a779d62ca4702ad810c863b45e1f7
- JSON-LD AutoPartsStore с адресом и 4 телефонами
- nginx:1.29-alpine runtime, контейнер на :4147
- Gitea Actions deploy.yml + Trivy scan + IndexNow ping
This commit is contained in:
Dmitry Gusev
2026-05-22 04:31:55 +03:00
parent 6ff1827690
commit ed27dcfc14
27 changed files with 6099 additions and 1 deletions

105
CLAUDE.md Normal file
View File

@@ -0,0 +1,105 @@
# pitstopavto.su — v2 (Astro)
Сайт-визитка магазина автозапчастей «ПитСтоп». Редизайн с WordPress на статический Astro 5.
**Прод:** https://pitstopavto.su
**Репо:** `git.striker.su/striker/pitstopavto-su-v2`
**Хост:** `web.hhivp.com` (45.10.53.206 / 45.10.53.242)
**Контейнер:** `pitstopavto-su-v2` на `127.0.0.1:4147` (nginx:alpine + Astro SSG)
**Cutover:** запланирован после согласования дизайна. Старый WP — `pitstopavto-su:4142`.
## Стек
- **Astro 5** SSG, две страницы: `/` и `/privacy/`
- **nginx:1.29-alpine** в runtime-контейнере
- **IBM Plex Sans** (через `@fontsource/ibm-plex-sans`)
- **@astrojs/sitemap** — `sitemap-index.xml` автоматически
## Структура
```
src/
├── components/
│ ├── Analytics.astro Яндекс.Метрика (47169531 с Webvisor) + GA4 (GT-WRF7ZZ8) в type=text/plain
│ ├── CookieConsent.astro 152-ФЗ-баннер, ключ pit-consent в localStorage+cookie
│ ├── ConsentRevoke.astro на /privacy/ — отозвать/сбросить выбор
│ └── Footer.astro
├── layouts/Base.astro <html>+meta+JSON-LD (AutoPartsStore)+Analytics+Footer+CookieConsent
├── pages/
│ ├── index.astro hero / адрес / телефоны / карта Яндекса
│ └── privacy.astro политика конфиденциальности 152-ФЗ
├── styles/global.css тёмный/янтарный (#f5b400) индустриальный стиль
└── consts.ts SITE_*, ADDRESS, PHONES, GEO, ANALYTICS, OPERATOR
public/
├── 901a779d62ca4702ad810c863b45e1f7.txt IndexNow key
├── ai.txt spawning.ai (Train/Cite/Quote: yes)
├── favicon.svg
├── llms.txt
└── robots.txt явные Allow для GPTBot/ClaudeBot/PerplexityBot/Google-Extended/CCBot
scripts/indexnow.js POST sitemap → yandex.com/indexnow + api.indexnow.org
```
## Аналитика (перенесена 1:1 из WP)
- **Яндекс.Метрика № 47169531** с Webvisor (запись сессий)
- **Google Analytics GT-WRF7ZZ8** (gtag)
Скрипты в `Analytics.astro` имеют `type="text/plain" data-cookieconsent="statistics"` и активируются только после клика «Принять» в баннере `CookieConsent.astro`. Согласие хранится в `localStorage` + cookie `pit-consent` (12 мес). На `/privacy/` есть виджет для отзыва/сброса согласия.
## Деплой
### Автоматический (Gitea Actions)
Push в `main``.gitea/workflows/deploy.yml`:
1. SSH на `web.hhivp.com` с ключом из секрета `SSH_DEPLOY_KEY`
2. `git fetch + reset --hard origin/main`
3. `docker compose build && up -d`
4. Trivy scan (warning-only)
5. `curl http://127.0.0.1:4147/` — health check
6. `docker image prune --filter "until=168h"`
7. `npm run indexnow` (ping Яндекса и Bing)
**Требуемые секреты в Gitea** (`/repos/striker/pitstopavto-su-v2/actions/secrets`):
- `SSH_DEPLOY_KEY` — приватный ed25519 ключ `~/.ssh/pitstopavto-v2-deploy`
- `SSH_KNOWN_HOSTS``web.hhivp.com ssh-ed25519 AAAAC3...`
Pubkey деплоя кладётся в `striker@web:~/.ssh/authorized_keys`.
### Вручную
```bash
ssh striker@web.hhivp.com
cd /opt/docker/sites/pitstopavto-su-v2
git pull && docker compose up -d --build
```
## Откат на старый WP
Старый WP-контейнер `pitstopavto-su:4142` + БД `pitstopavto_su` на `db.hhivp.com` сохранены (для отката). Откат за ~30 секунд:
```bash
ssh striker@web.hhivp.com
sudo sed -i 's|127.0.0.1:4147|127.0.0.1:4142|g' /etc/nginx/conf.d/pitstopavto.su
sudo nginx -t && sudo systemctl reload nginx
```
После ~14 дней стабильной работы v2 — старый WP можно удалить (контейнер + БД + образ).
## Локальная разработка
```bash
npm install
npm run dev # http://localhost:4321
npm run build # → dist/ (статика)
npm run preview
```
## IndexNow
Уникальный ключ `901a779d62ca4702ad810c863b45e1f7` в `public/<key>.txt` и в `scripts/indexnow.js`. Запускается из CI после успешного healthcheck.
## История
- **2026-05-22:** инициализация v2 (скаффолд Astro). Старый WP-сайт — одностраничник «Мы переехали» (Люблинская 100, Аквапарк ФЭНТАЗИ, 4 телефона), все остальные пункты меню в WP возвращали 404, 20+ плагинов держались ради одной страницы.