striker db0d27cf4e
Some checks failed
Deploy to web.hhivp.com / deploy (push) Failing after 3s
build: Dockerfile + nginx.conf + docker-compose + Gitea CI + 404 page
- Dockerfile multi-stage: node:22-alpine builds Astro → nginx:1.29-alpine
  отдаёт dist/. healthcheck wget --spider /
- nginx.conf: gzip с подходящими типами (RSS/JSON/SVG/woff2), кэш /_astro/
  immutable 1y, кэш css/js/img 30d, MIME application/rss+xml для feed,
  text/plain для robots/ai/llms/sitemap, кастомная 404
- docker-compose: контейнер anotherreflections-ru-v2 на 127.0.0.1:4084
  (старый WP на :4080 остаётся для отката)
- .gitea/workflows/deploy.yml: push в main → SSH-деплой на web,
  git fetch+reset → docker compose build → up -d → docker image prune
  (retention 7d по правилу проекта). Verify-шаг curl на :4084
- src/pages/404.astro — тематическая страница «не найдено» с навигацией
2026-05-21 02:37:46 +03:00

anotherreflections.ru — v2

Главный сайт-портал ролевой группы «Иные Отражения» — переделан со старого WordPress (тема darkness-10) на статический Astro 5.

Стек

  • Astro 5 + Content Collections (markdown)
  • @astrojs/rss — RSS-фиды (общий + per-category), формат под IPB RSS Importer
  • @astrojs/sitemap — sitemap.xml автоматически
  • sanitize-html — очистка HTML тела поста для <content:encoded> в RSS

Содержимое

  • src/content/posts/*.md — 50 постов 20092015, мигрированы из WP (frontmatter включает legacyId для трассировки и categorySlugs для категорий)
  • src/content/pages/*.md — 6 страниц: /o-nas/, /nashi-druzya/, страницы про игры
  • src/content/_categories.json — справочник категорий из WP (10 шт.)
  • _wp-export.json — исходный дамп WP, оставлен в репо для трассируемости миграции; не используется в build

Структура URL

  • / — главная (лента всех постов)
  • /<slug>/ — пост или статическая страница
  • /category/<slug>/ — лента категории
  • /feed.xml — общий RSS
  • /category/<slug>/feed.xml — RSS категории
  • /sitemap-index.xml — sitemap

URL постов совпадают с историческими WP-slug, т.к. permalink_structure='/%postname%/'. Никаких 301-редиректов не требуется — slug сохранены 1:1.

RSS для IPB Importer

Фид заточен под ACP → Community → RSS Feeds → Add Feed:

  • RSS 2.0 strict, <pubDate> в RFC-822, абсолютные <link>
  • <guid isPermaLink="true"> = URL поста — IPB по нему дедуплицирует темы при повторных сканах
  • <content:encoded> с CDATA — полное HTML тело поста, IPB подставит его в тело темы
  • <lastBuildDate> обновляется при каждом build — Importer проверяет, изменился ли фид
  • Cutoff: фид отдаёт только посты с pubDate >= RSS_CUTOFF (см. src/consts.ts). Архив 20092015 остаётся на сайте для людей, но в форумы не вбрасывается одной волной.

Разработка

npm install
npm run dev     # http://localhost:4321
npm run build   # → dist/
npm run preview

Миграция (одноразово, уже выполнено)

npm run migrate  # _wp-export.json → src/content/{posts,pages}/*.md

Скрипт scripts/migrate-wp.mjs конвертирует HTML тела постов в markdown (минимальный конвертер без внешних зависимостей: <a>/<strong>/<em>/<li>/<ul>/<blockquote>/<br>/<p> + HTML entities).

Деплой

Контейнер nginx:alpine на web.hhivp.com, шаблон по образцу stbolshevik.ru (CI/CD: Gitea → SSH-деплой на свободный порт). См. CLAUDE.md после первого деплоя.

История

  • v1: WordPress 6.9 + тема darkness-10 + 23 активных плагина, БД anotherreflctions_ru (sic) на db.hhivp.com, контейнер anotherreflections-ru:4080 на web.hhivp.com. Репо: git.striker.su/striker/anotherreflections-website (ветка feat/dockerize). Оставлен для отката.
  • v2 (этот репо): Astro 5 static, 2026-05-20.
Description
anotherreflections.ru v2 � Astro 5 static site (markdown + RSS for IPB importer)
Readme 578 KiB
Languages
Astro 41.9%
CSS 23.5%
JavaScript 18.4%
TypeScript 15.2%
Dockerfile 1%