Deployment-Fixes (Dienst startete nicht -> 203/EXEC "uvicorn not found"): - Unit ohne ProtectHome/ProtectSystem: Repo/venv dürfen unter /root oder /home liegen (ProtectHome=true blendete diese Pfade für den Dienst aus). - install.sh: Python-3.11+-Prüfung mit klarer Meldung; prüft nach der Installation, dass uvicorn wirklich in der venv liegt. - EZB-Kursabruf läuft beim Start jetzt im Hintergrund (blockiert den Start nie). Phase-3-Backend (Dashboard): - Modell + Migration 0004: dashboard_layouts (JSON-Layout je Nutzer). - routers/dashboard: Layout speichern/laden/zurücksetzen + Kartendaten (Budget-Donut, Budget-Fortschritt, Einnahmen/Ausgaben, Kontostände, Vermögensverlauf, letzte Buchungen). - Frontend-Infrastruktur: Chart-Komponenten (Donut/Line), palette, API-Methoden, react-grid-layout. (Dashboard-Seite folgt im nächsten Commit.) Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
33 lines
1.2 KiB
Desktop File
33 lines
1.2 KiB
Desktop File
# systemd-Unit für Certain Finance (Referenz).
|
|
# install.sh erzeugt die tatsächliche Unit unter /etc/systemd/system/certain-finance.service
|
|
# mit den konkreten Pfaden deines Klons. Diese Datei zeigt die Standardform
|
|
# (Repo unter /opt/certain-finance).
|
|
|
|
[Unit]
|
|
Description=Certain Finance
|
|
After=network-online.target
|
|
Wants=network-online.target
|
|
|
|
[Service]
|
|
Type=simple
|
|
User=certain-finance
|
|
Group=certain-finance
|
|
WorkingDirectory=/opt/certain-finance/backend
|
|
EnvironmentFile=/etc/certain-finance/env
|
|
# Adresse/Port kommen aus der EnvironmentFile. APP_BIND_HOST=0.0.0.0 macht den
|
|
# Dienst direkt über http://<LXC-IP>:<APP_PORT> erreichbar; 127.0.0.1 beschränkt
|
|
# ihn auf einen Reverse-Proxy auf demselben Host.
|
|
ExecStart=/opt/certain-finance/backend/.venv/bin/uvicorn app.main:app --host ${APP_BIND_HOST} --port ${APP_PORT}
|
|
Restart=on-failure
|
|
RestartSec=3
|
|
|
|
# Härtung. Bewusst KEIN ProtectHome/ProtectSystem: das Repo (inkl. venv) darf
|
|
# auch unter /root oder /home liegen; ProtectHome=true würde diese Pfade für den
|
|
# Dienst ausblenden und zu "Failed to locate executable .../uvicorn" führen.
|
|
NoNewPrivileges=true
|
|
PrivateTmp=true
|
|
ReadWritePaths=/var/lib/certain-finance
|
|
|
|
[Install]
|
|
WantedBy=multi-user.target
|