Start forfra: server-autoritativ spilmotor over WebSocket
Den tidligere version (Angular-SPA, REST og polling) er gemt på branchen legacy. Denne version samler alle regler i en ren Python-spilmotor (fupogfakta/engine.py), holder rummene i hukommelsen i én proces og sender hele spiltilstanden pr. rolle over én WebSocket. Vært-login sker via Authentik forward-auth i NPMplus. Claude-Session: https://claude.ai/code/session_01JmhJG6JnhXfzNiKv8f2vHu
This commit is contained in:
Executable
+48
@@ -0,0 +1,48 @@
|
||||
#!/bin/bash
|
||||
# Kør på Proxmox-værten: deploy main fra dev-klonen i CT132 til CT143.
|
||||
# deploy/deploy.sh (seneste commit på main)
|
||||
# deploy/deploy.sh <ref> (vilkårlig ref)
|
||||
set -euo pipefail
|
||||
REF=${1:-main}
|
||||
DEV_CT=132; PROD_CT=143
|
||||
REPO=/home/coder/repos/weirsoe-party-protocol
|
||||
TS=$(date +%Y%m%d-%H%M%S)
|
||||
TMP=$(mktemp -d)
|
||||
trap 'rm -rf "$TMP"' EXIT
|
||||
|
||||
pct exec $DEV_CT -- su - coder -s /bin/bash -c "cd $REPO && git archive --format=tar $REF" > "$TMP/release.tar"
|
||||
SHA=$(pct exec $DEV_CT -- su - coder -s /bin/bash -c "cd $REPO && git rev-parse --short $REF")
|
||||
pct push $PROD_CT "$TMP/release.tar" /tmp/wpp-release-$TS.tar
|
||||
|
||||
pct exec $PROD_CT -- bash -euo pipefail -c "
|
||||
id wpp >/dev/null 2>&1 || useradd --system --home /var/lib/wpp --shell /usr/sbin/nologin wpp
|
||||
install -d -o wpp -g wpp /var/lib/wpp /opt/wpp/releases
|
||||
install -d -m 750 -o root -g wpp /etc/wpp
|
||||
D=/opt/wpp/releases/$TS-$SHA
|
||||
mkdir -p \$D && tar -C \$D -xf /tmp/wpp-release-$TS.tar && rm /tmp/wpp-release-$TS.tar
|
||||
echo $SHA > \$D/REVISION
|
||||
[ -d /opt/wpp/venv ] || python3 -m venv /opt/wpp/venv
|
||||
/opt/wpp/venv/bin/pip install -q --disable-pip-version-check -r \$D/requirements.txt
|
||||
chown -R wpp:wpp \$D
|
||||
set -a; . /etc/wpp/wpp.env; set +a
|
||||
cd \$D
|
||||
runuser -u wpp -- /opt/wpp/venv/bin/python manage.py migrate --noinput
|
||||
runuser -u wpp -- /opt/wpp/venv/bin/python manage.py collectstatic --noinput -v0
|
||||
runuser -u wpp -- /opt/wpp/venv/bin/python manage.py load_questions
|
||||
ln -sfn \$D /opt/wpp/current
|
||||
cp \$D/deploy/wpp.service /etc/systemd/system/wpp.service
|
||||
systemctl daemon-reload
|
||||
systemctl enable -q wpp
|
||||
systemctl restart wpp
|
||||
# behold de 5 nyeste releases
|
||||
ls -1dt /opt/wpp/releases/* | tail -n +6 | xargs -r rm -rf
|
||||
"
|
||||
for i in $(seq 1 20); do
|
||||
if pct exec $PROD_CT -- curl -fsS -m 2 http://127.0.0.1:8000/healthz >/dev/null 2>&1; then
|
||||
echo "Deployet $SHA til CT$PROD_CT"; exit 0
|
||||
fi
|
||||
sleep 1
|
||||
done
|
||||
echo "healthz svarer ikke efter deploy" >&2
|
||||
pct exec $PROD_CT -- journalctl -u wpp -n 30 --no-pager >&2
|
||||
exit 1
|
||||
@@ -0,0 +1,6 @@
|
||||
DJANGO_SECRET_KEY=skift-mig
|
||||
DJANGO_ALLOWED_HOSTS=party.weircon.dk,192.168.11.143,localhost
|
||||
PUBLIC_URL=https://party.weircon.dk
|
||||
TRUSTED_PROXIES=127.0.0.1,192.168.10.201
|
||||
DB_PATH=/var/lib/wpp/db.sqlite3
|
||||
STATIC_ROOT=/var/lib/wpp/static
|
||||
@@ -0,0 +1,15 @@
|
||||
[Unit]
|
||||
Description=Weirsøe Party Protocol (uvicorn, én worker: spiltilstand ligger i hukommelsen)
|
||||
After=network.target
|
||||
|
||||
[Service]
|
||||
User=wpp
|
||||
Group=wpp
|
||||
WorkingDirectory=/opt/wpp/current
|
||||
EnvironmentFile=/etc/wpp/wpp.env
|
||||
ExecStart=/opt/wpp/venv/bin/uvicorn partyhub.asgi:application --host 0.0.0.0 --port 8000 --workers 1 --ws-ping-interval 20 --no-server-header
|
||||
Restart=always
|
||||
RestartSec=2
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
Reference in New Issue
Block a user