From 0573f867c9e243807e051e63db2c1f876766ee62 Mon Sep 17 00:00:00 2001 From: Asger Geel Weirsoee Date: Thu, 1 Oct 2026 21:56:00 +0200 Subject: [PATCH] =?UTF-8?q?Generisk=20driftsbeskrivelse=20i=20stedet=20for?= =?UTF-8?q?=20konkret=20ops=C3=A6tning?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Deploy-script og systemd-unit beskrev én bestemt installation og hører ikke hjemme i et offentligt repo. README beskriver nu kravene til proxy og headere generelt, og eksempelmiljøet bruger neutrale værdier. Claude-Session: https://claude.ai/code/session_01JmhJG6JnhXfzNiKv8f2vHu --- README.md | 8 ++----- deploy/bots.py | 4 ++-- deploy/deploy.sh | 48 ------------------------------------------ deploy/wpp.env.example | 13 +++++++----- deploy/wpp.service | 15 ------------- party/tests/test_ws.py | 2 +- partyhub/settings.py | 2 +- 7 files changed, 14 insertions(+), 78 deletions(-) delete mode 100755 deploy/deploy.sh delete mode 100644 deploy/wpp.service diff --git a/README.md b/README.md index 1fbbb8f..5b5f490 100644 --- a/README.md +++ b/README.md @@ -31,13 +31,9 @@ export DJANGO_DEBUG=true DEV_HOST_USER=dev ## Drift -CT143 (`192.168.11.143`), uvicorn bag NPMplus (`custom_nginx/hosts/party-weircon.conf` i CT101). Deploy fra Proxmox-værten: +Én uvicorn-proces (`--workers 1`) bag en reverse proxy med TLS. Proxyen beskytter `/host/`, `/ws/host/` og `/admin/` med Authentik forward-auth og sender `X-authentik-username` og `X-authentik-groups` videre; på alle andre stier skal den blanke de headere. Appen stoler kun på dem fra adresserne i `TRUSTED_PROXIES`, så appens port bør kun kunne nås fra proxyen. Se `deploy/wpp.env.example` for miljøvariabler. -```bash -deploy/deploy.sh # seneste main fra dev-klonen i CT132 -``` - -Miljø i `/etc/wpp/wpp.env` (se `deploy/wpp.env.example`), database i `/var/lib/wpp/db.sqlite3`. +`deploy/bots.py` spiller et helt spil mod en kørende server og kan også fylde et spil op med bots (`--code`). ## Spørgsmål diff --git a/deploy/bots.py b/deploy/bots.py index a214bdb..0f4f8dd 100644 --- a/deploy/bots.py +++ b/deploy/bots.py @@ -1,8 +1,8 @@ #!/usr/bin/env python3 """Spil et helt spil med bots mod en kørende server (røgtest). -Kør i CT143 (eller lokalt), hvor værts-headeren stoles på fra 127.0.0.1: - /opt/wpp/venv/bin/python deploy/bots.py --base http://127.0.0.1:8000 --players 3 --audience 1 +Kør på samme maskine som serveren, hvor værts-headeren stoles på fra 127.0.0.1: + python deploy/bots.py --base http://127.0.0.1:8000 --players 3 --audience 1 Opretter et rum som vært, joiner N spillere og M publikummer, og lader dem lyve, gætte og like tilfældigt, indtil spillet er slut. Afslutter med kode 0, hvis alle diff --git a/deploy/deploy.sh b/deploy/deploy.sh deleted file mode 100755 index 90d27d0..0000000 --- a/deploy/deploy.sh +++ /dev/null @@ -1,48 +0,0 @@ -#!/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 (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 diff --git a/deploy/wpp.env.example b/deploy/wpp.env.example index 72f4cae..ad54352 100644 --- a/deploy/wpp.env.example +++ b/deploy/wpp.env.example @@ -1,6 +1,9 @@ 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 +DJANGO_ALLOWED_HOSTS=party.example.com,localhost +PUBLIC_URL=https://party.example.com +# Adresser på den reverse proxy, der sætter X-authentik-*-headerne +TRUSTED_PROXIES=127.0.0.1 +DB_PATH=/path/to/db.sqlite3 +STATIC_ROOT=/path/to/static +# Valgfrit: oplæsning +ELEVENLABS_API_KEY= diff --git a/deploy/wpp.service b/deploy/wpp.service deleted file mode 100644 index 7e7db99..0000000 --- a/deploy/wpp.service +++ /dev/null @@ -1,15 +0,0 @@ -[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 diff --git a/party/tests/test_ws.py b/party/tests/test_ws.py index 1f5856c..b74d571 100644 --- a/party/tests/test_ws.py +++ b/party/tests/test_ws.py @@ -49,7 +49,7 @@ class WebSocketGameTests(TransactionTestCase): async def test_header_from_untrusted_ip_is_ignored(self): room = await self._sync(self._room) comm = WebsocketCommunicator(application, f"/ws/host/{room.code}/", headers=HOST_HEADERS) - comm.scope["client"] = ("10.0.0.9", 5000) + comm.scope["client"] = ("203.0.113.9", 5000) connected, _ = await comm.connect() self.assertFalse(connected) diff --git a/partyhub/settings.py b/partyhub/settings.py index 1992b4b..772eaa6 100644 --- a/partyhub/settings.py +++ b/partyhub/settings.py @@ -24,7 +24,7 @@ SESSION_COOKIE_SECURE = CSRF_COOKIE_SECURE = PUBLIC_URL.startswith("https://") # Authentik: forward-auth i NPMplus sætter X-authentik-*-headers på /host og /admin. # Headerne stoles kun på, når forespørgslen kommer fra disse adresser. -TRUSTED_PROXIES = [h for h in env("TRUSTED_PROXIES", "127.0.0.1,192.168.10.201").split(",") if h] +TRUSTED_PROXIES = [h for h in env("TRUSTED_PROXIES", "127.0.0.1").split(",") if h] HOST_ADMIN_GROUP = env("HOST_ADMIN_GROUP", "authentik Admins") # Kun til lokal udvikling: lader som om denne bruger er logget ind som vært. DEV_HOST_USER = env("DEV_HOST_USER") if DEBUG else None