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>
5.4 KiB
5.4 KiB
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_*/:
sync.shper 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.- 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). - Cache-bust: md5sum bundle → перші 7 hex →
sed -i ?v=...уviews/layout.etlua. Idempotent (однаковий контент = однаковий хеш). - 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-нути на потребу?