Ret INSTALL.md: systemd-service skal køre som root, ikke en dedikeret bruger

uv's managede Python-interpreter installeres under den kørende brugers
hjemmemappe (fx /root/... hvis uv sync køres som root) — en separat
lavprivilegeret servicebruger kan ikke eksekvere den, hvilket fejler
med systemd status=203/EXEC. Fundet under den første rigtige
produktionsopsætning.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
Carsten Gram 2026-09-29 12:32:04 +02:00
parent 5b9d7d5219
commit 17cbc1af57

View file

@ -129,7 +129,6 @@ After=network.target postgresql.service
[Service]
Type=simple
User=vinindkoeb
WorkingDirectory=/sti/til/vinindkoeb
ExecStart=/sti/til/vinindkoeb/.venv/bin/uvicorn app.main:app --host 0.0.0.0 --port 8000
Restart=always
@ -144,6 +143,19 @@ sudo systemctl daemon-reload
sudo systemctl enable --now vinindkoeb
```
**Om `User=`:** eksemplet ovenfor kører som root (ingen `User=`-linje)
— simplest, og rimeligt for en lille, isoleret container som denne.
Vil du hellere køre som en dedikeret systembruger
(`useradd --system --no-create-home --shell /usr/sbin/nologin
vinindkoeb`, `chown -R vinindkoeb:vinindkoeb /sti/til/vinindkoeb`,
`User=vinindkoeb` i unit-filen), **skal `uv sync` også køres som den
samme bruger** — `uv` installerer sin egen Python-interpreter under
den kørende brugers hjemmemappe (fx `/root/.local/share/uv/...`),
som andre brugere ikke kan tilgå. Kører man `uv sync` som root og
prøver bagefter at starte servicen som en anden bruger, fejler
`systemd` med `status=203/EXEC` (kunne ikke eksekvere programmet) —
fundet under den første rigtige produktionsopsætning.
Da reverse proxy'en (CloudPanel) kører i en anden container, skal
backend'en kunne nås over Proxmox' interne netværk — deraf
`--host 0.0.0.0` i stedet for `127.0.0.1`. Det skal dog **ikke** stå