Files
vtube/docs/DEPLOY.md
goboss 981a0ad9b6 Document granular hook policy + ad architecture + 94-site scale
Hook redesign (guard-readonly.sh + guard-bash.sh):
- ALLOW edits: /home/nosfortube/frontend_<port>/ (digits-only, all subdirs)
  + /home/nosfortube/orest/ (user working zone + screenshots)
- DENY: lang variants (frontend_<port>_<lang>/), frontend_core/, .git/,
  system paths (/etc/, /usr/, /boot/, /var/* except /var/log/claude/)
- 19/19 readonly + 18/19 bash tests pass (1 pre-existing sed-i regex gap)
- Backup попередньої версії: .bak.2026-05-02

Doc updates:
- New: PROJECT.md, ARCHITECTURE.md, DEPLOY.md, ADS.md, PERFORMANCE.md,
  INTERLINKING.md, ADMINS.md (topic-split docs/)
- CLAUDE.md: 94-site scale, granular edit zones, doc index
- INFRASTRUCTURE.md: hook table updated
- SITES.md: scope note (14 backup-tracked of 94 total)
- RECOMMENDATIONS.md: W1 (hook conflict) → DONE; W2-W3, D1-D4 added

Site architecture findings (audit 2026-05-02):
- 94 frontend_<port>/ sites, 71 in site-name-routing.csv, 14 backup-tracked
- 3 ad-architectures coexist: 8148 modern bundle (1), modern partials (~23),
  legacy inline surstrom (31)
- 8148 unique: ad-bundle.min.js source files, build-ad-bundle.sh, terser
- Server IP 185.73.222.75 у t1.* allowlist (curl probes work)
- CDN: custom + Cloudflare на 8081 etc; purge-cache при prod deploy

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-02 13:26:25 +00:00

5.4 KiB
Raw Blame History

tubev — Deploy Flow

Як зміна потрапляє з робочого місця → у prod.

Two-tier model

Edit /home/nosfortube/frontend_<port>/      ← work / source-of-truth
        │
        ├──→  t1.<domain>                   ← test (instant, IP-allowlist)
        │
        └──→  admin panel "site/control"    ← prod деплой per-site (юзер натискає)
                або через Адміна             ← для var.lua / нових файлів
                  │
                  └──→ <domain>             ← live, з CDN

Test environment — t1.<domain>

  • Доступ: IP-allowlist (ймовірно nginx-level, не точно). Юзер заходить через VPN щоб мати стабільний IP.
  • Apply: instant — змінив файл у frontend_<port>/ → видно на t1. одразу.
  • Обмеження (per-site різні): CDN off, compression off, повільніше, comments/ads можуть бути обмежені або тестові.
  • AI-side: Claude з сервера МАЄ доступ до t1. (server IP 185.73.222.75 у allowlist). Перевірено 2026-05-01: curl -I https://t1.atube.sex → 200 OK, curl -I https://t1.hdsexvideo.xxx → 200 OK. Можна робити HTTP probes для health-check, regression smoke, response inspection.

Prod deploy — три шляхи

A) Через admin panel "site control" (юзер сам, instant per-site)

https://rss.g--o.info/admin/site/control — список усіх сайтів, кнопка викатати оновлення з тесту → прод.

Покриває: templates .etlua, CSS, JS (звичайні per-site файли).

Не покриває (потрібен Адмін):

  • lib/<port>/var.lua — нові/змінені змінні
  • Нові файли (yet not in admin's git)
  • Shared views/static/js/lib/, lib2/ (cross-site impact)

B) Через admin panels (settings / translations / sitemap)

Контент-шар, не код. Самостійно, без Адміна:

  • Per-site settings: https://<domain>/admin/index, /admin/settings
  • Languages set: https://<domain>/moderation/languages/langs
  • Translations (UI strings): https://<domain>/moderation/languages/translation/
  • Sitemap: https://rss.g--o.info/admin/site

Деталі: ADMINS.md.

C) Через Адміна (Орест / основний програміст)

  • Нові файли потрапляють у Адмінів git → kor pull/reload
  • var.lua зміни → kor reboot
  • Mass operations (mirror swaps, multi-site fixes)

Trigger: попросити (чат / задача).

kor reload

  • lib/<port>/var.lua зміни → потрібен kor reboot щоб env змінні підвантажилися
  • Templates .etlua — підхоплюються hot (без reboot)
  • Static assets — hot, але CDN cache може тримати стару версію → потрібен cache-bust (через ?v=<md5> у layout — реалізовано у ~/git-save-all.sh)

CDN

  • Custom CDN для більшості сайтів (наявний; провайдер невідомий поки)
  • Cloudflare на двох сайтах (наприклад 8081) — додаткове edge кешування
  • При оновленні prod для Cloudflare-сайтів: треба purge cache + враховувати у логіці що зміни не миттєві (cache TTL до purge)
  • Cache-bust через ?v=<md5> у layout.etlua працює для обох (custom + CF)

git-save-all.sh — git-snapshot для backup_/

~/git-save-all.sh "msg" ітерує /home/w4/backup_*/:

  1. sync.sh per backup — копіює з prod (/home/nosfortube/frontend_<port>/) у backup. Tracked subset (whitelist у sync.sh): templates (layout.etlua, id_index.etlua, video.etlua, banner modules), ad orchestration JS (ad-config.js, ad-core.js, vast-preroll.js, ad-bundle.min.js), player files, тести, robots.txt. Решта prod-коду — поза git.
  2. Auto-rebuild ad-bundle: якщо будь-який з 5 source JS (ad-config.js, ad-core.js, ad-mute.js, vast-preroll.js, ad-bootstrap.js) новіший за ad-bundle.min.js → запуск bash build-ad-bundle.sh (terser concat+minify).
  3. Cache-bust: md5sum bundle → перші 7 hex → sed -i ?v=... у views/layout.etlua. Idempotent (однаковий контент = однаковий хеш).
  4. Commit per backup: message формат YYYY-MM-DD_HH:MM - <msg> [backup_<port>]. Кожен backup repo окремо — N changed sites = N commits у різних repos.

Призначення: git-tracking для recovery / audit / blame. Не deploy mechanism.

Open questions

  • CDN — який провайдер (Cloudflare / BunnyCDN / Fastly)? Per-site чи unified?
  • Backup_/ покриття — чому 14 із 94 сайтів? Поширити чи це історичний субсет? (open-разом з юзером)
  • Headless browser (Puppeteer / Playwright) на сервері для visual regression / ad-render check — варто setup-нути на потребу?