f105c1adff
- корень smart-updown.binom.pw -> nginx на Proxmox (LXC 152, 192.168.76.152) - /api,/ws -> куб (router PathPrefix на внешнем Traefik VDS), куб не менялся - версионирование: /opt/game/releases/<N>/, активная = симлинк /opt/game/current - tools/proxmox-nginx: unpack-release.sh, publish-release.sh, game.nginx.conf, smart-updown.traefik.yaml, README - приёмка живьём: корень 200 nginx/1.24.0 (Ubuntu), /27/ /28/ 200, /api/state 200 JSON, /api/ws цена, autoclose-check 9/9 - питфоллы: OCI-manifest в skopeo dir-дампе, слэш в конце версии, /solana-rpc мимо PathPrefix /api
3.6 KiB
3.6 KiB
nginx на Proxmox — раздача статики игры (LXC 152)
Боевой веб-слой игры «Бинарная ракета»: корень smart-updown.binom.pw раздаётся nginx'ом
на LXC 152 с версионированием по каталогам. Бэк (API/WS) остаётся в кубе — см. ADR-011.
Что где живёт
| Что | Где |
|---|---|
| LXC | 152 game-web, 192.168.76.152 (Server3, pct exec 152 через root@192.168.76.66) |
| nginx-конфиг | /etc/nginx/sites-available/game (симлинк в sites-enabled/) |
| Сборки | /opt/game/releases/<N>/ — Build/, TemplateData/, index.html, ServiceWorker.js |
| Активная сборка | /opt/game/current → симлинк на releases/<N> |
| Инструменты | /opt/game/tools/ (unpack-release.sh, publish-release.sh) |
| Логи | /var/log/nginx/game-access.log, game-error.log |
Адреса
https://smart-updown.binom.pw/— активная сборка;https://smart-updown.binom.pw/<N>/— конкретная сборка (обязательно со слэшем);https://smart-updown.binom.pw/<N>/Build/WebGL.data— ассет конкретной сборки;/api,/ws— не nginx: их забирает внешний Traefik (VDS) → куб (ingresssmart-updown-api).
Публикация сборки
# CI fun-game-front2 пушит образ images.binom.pw/fun/game-front2:<N>
# затем на хосте Proxmox:
ssh root@192.168.76.66 "pct exec 152 -- /opt/game/tools/publish-release.sh <N> --activate"
Без --activate сборка ляжет в /opt/game/releases/<N>/ и будет доступна по /<N>/,
но корень останется прежним. Откат = publish-release.sh <старый N> --activate.
Проверка
curl -sI https://smart-updown.binom.pw/ | grep -iE 'server|last-modified' # nginx/1.24.0 (Ubuntu)
curl -s -o /dev/null -w '%{http_code}\n' https://smart-updown.binom.pw/<N>/
curl -s https://smart-updown.binom.pw/api/state | head -c 80 # JSON от шлюза в кубе
# сквозная живая приёмка (ставит реальную ставку):
cd ~/WORK/games/pump-game-ops && BASE=https://smart-updown.binom.pw/api \
WS_URL=wss://smart-updown.binom.pw/api/ws node tools/autoclose-check.cjs # ждём 9/9
Питфоллы
- Слэш в конце обязателен для версии:
/28→ 301 (редирект на/28/). Unity грузит ассеты относительным путём (Build/WebGL.loader.js), поэтому без слэшаBuild/...уедет в корень → 404. skopeo ... dir:пишет OCI-манифест, гдеlayers— словари.unpack-release.shберётdigestкаждого слоя и распаковывает по имени файла<hex>(неsha256:...).- Кэш больше не прилипает между релизами: URL содержит номер сборки →
immutableкорректен. Внутри версии каталог не перезаписывается, поэтому ассеты действительно неизменяемы. - Сборки копятся (~68 МБ на версию) — ретеншен пока ручной, см.
TASKS.md. - Откат схемы целиком: вернуть
/opt/traefik/static/smart-updown.yamlиз/root/bak-smart-updown-nginx-2026-09-15/на VDS — домен снова пойдёт целиком в куб.