ADR-011: статика игры вынесена из куба на nginx (LXC 152 game-web), версии каталогами

- корень 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
This commit is contained in:
Porfiry
2026-09-15 17:07:30 +03:00
parent 21a3a37a66
commit f105c1adff
8 changed files with 405 additions and 2 deletions
+50
View File
@@ -0,0 +1,50 @@
#!/bin/bash
# Публикация сборки игры на nginx (LXC 152, game-web).
#
# publish-release.sh <тег> [--activate]
#
# Что делает:
# 1. тянет образ images.binom.pw/fun/game-front2:<тег> из реестра (skopeo copy в dir);
# 2. распаковывает статику в /opt/game/releases/<тег>/;
# 3. без --activate оставляет активной текущую сборку (корень не меняется);
# с --activate переключает симлинк /opt/game/current на новую версию;
# 4. печатает проверку.
#
# Итог: https://smart-updown.binom.pw/ -> активная сборка
# https://smart-updown.binom.pw/<тег>/ -> конкретная сборка
set -euo pipefail
TAG="${1:?использование: publish-release.sh <тег> [--activate]}"
ACTIVATE="${2:-}"
REG="images.binom.pw/fun/game-front2"
CREDS="subochev:Drovosek319"
IMG="/tmp/gameimg-${TAG}"
echo "=== 1/4 тяну образ ${REG}:${TAG} ==="
rm -rf "$IMG"
skopeo copy --src-creds "$CREDS" "docker://${REG}:${TAG}" "dir:${IMG}"
# креды не нужны при распаковке
chmod -R a+rX "$IMG"
echo "=== 2/4 распаковываю статику в /opt/game/releases/${TAG} ==="
/opt/game/tools/unpack-release.sh "$TAG" "$IMG"
if [ "$ACTIVATE" = "--activate" ]; then
echo "=== 3/4 переключаю активную сборку на ${TAG} ==="
PREV="$(readlink -f /opt/game/current || echo none)"
rm -f /opt/game/current
ln -s "/opt/game/releases/${TAG}" /opt/game/current
echo "было: $PREV"
echo "стало: $(readlink -f /opt/game/current)"
else
echo "=== 3/4 активную сборку НЕ трогаю (нет --activate) ==="
echo "активна: $(readlink -f /opt/game/current)"
fi
echo "=== 4/4 проверка ==="
systemctl reload nginx
for u in "/" "/${TAG}/" "/${TAG}/index.html" "/${TAG}/Build/WebGL.framework.js"; do
printf ' %-42s %s\n' "$u" "$(curl -s -o /dev/null -w '%{http_code}' "http://127.0.0.1${u}")"
done
echo "готово: сборка ${TAG}"
rm -rf "$IMG"