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
51 lines
2.1 KiB
Bash
51 lines
2.1 KiB
Bash
#!/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"
|