84 lines
5.4 KiB
Markdown
84 lines
5.4 KiB
Markdown
|
|
# 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.<domain> одразу.
|
|||
|
|
- **Обмеження** (per-site різні): CDN off, compression off, повільніше, comments/ads можуть бути обмежені або тестові.
|
|||
|
|
- **AI-side:** ✅ Claude з сервера **МАЄ доступ** до t1.<domain> (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](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_<port>/
|
|||
|
|
|
|||
|
|
`~/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_<port>/ покриття — чому 14 із 94 сайтів? Поширити чи це історичний субсет? (open-разом з юзером)
|
|||
|
|
- [ ] Headless browser (Puppeteer / Playwright) на сервері для visual regression / ad-render check — варто setup-нути на потребу?
|