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:
agw
2026-10-01 20:40:00 +02:00
parent d86941fef8
commit 9a53d8fe04
198 changed files with 3064 additions and 30073 deletions
+48
View File
@@ -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
+6
View File
@@ -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
+15
View File
@@ -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