# 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 +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/.txt` и в `scripts/indexnow.js`. Запускается из CI после успешного healthcheck. ## История - **2026-05-22:** инициализация v2 (скаффолд Astro). Старый WP-сайт — одностраничник «Мы переехали» (Люблинская 100, Аквапарк ФЭНТАЗИ, 4 телефона), все остальные пункты меню в WP возвращали 404, 20+ плагинов держались ради одной страницы.