Budget: - Modelle + Migration 0003: budget_template_lines, planned_income_lines, budget_periods, budget_period_lines. - services/budget: Perioden-Grenzen (einstellbarer Starttag, Label nach Endmonat), Standard-Vorlage vs. Monats-Override (Snapshot-on-Customize), Soll/Ist inkl. budgetierter Sparen-Transfers, geplante Einnahmen (Soll/Ist). - routers/budgets: Vorlage, geplante Einnahmen (CRUD), Monats-Soll/Ist, Monats-Override, Zurücksetzen. pytest: Perioden, Soll/Ist, Override/Reset, Einnahmen. - Frontend: Budget-Seite (Monat + Standard-Budget), Fortschrittsbalken grün/rot, Monats-Navigation, editierbare Soll-Beträge; Sparen-Option im Transfer-Formular. Deployment-Fix (Nutzer-Anforderung: http://IP:Port muss funktionieren): - Dienst bindet an APP_BIND_HOST=0.0.0.0 (direkt im LAN erreichbar). - APP_COOKIE_SECURE=false als Standard (sonst kein Login über reines HTTP); für reinen HTTPS-Betrieb umstellbar. Doku + install.sh entsprechend angepasst. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
60 lines
2.3 KiB
Markdown
60 lines
2.3 KiB
Markdown
# Deployment (Proxmox-LXC + Nginx Proxy Manager)
|
||
|
||
## Installation
|
||
|
||
Im LXC (Debian/Ubuntu) das Repo klonen und als root installieren:
|
||
|
||
```bash
|
||
git clone <repo-url> /opt/certain-finance
|
||
cd /opt/certain-finance
|
||
sudo ./deploy/install.sh
|
||
```
|
||
|
||
Das Skript installiert Python/Node, richtet eine venv ein, baut das Frontend,
|
||
erzeugt `/etc/certain-finance/env` (mit Zufallsgeheimnissen), legt den systemd-
|
||
Dienst `certain-finance` an und startet ihn. Node wird **nur zum Bauen** gebraucht;
|
||
der laufende Dienst ist reines Python.
|
||
|
||
## Direktzugriff (http://IP:Port)
|
||
|
||
Standardmäßig lauscht der Dienst auf `0.0.0.0:<APP_PORT>` (Standard-Port `8071`) und
|
||
ist damit direkt im LAN erreichbar: `http://<LXC-IP>:8071`. Dafür ist
|
||
`APP_COOKIE_SECURE=false` gesetzt (sonst speichert der Browser die Sitzung über
|
||
reines HTTP nicht). Möchtest du den Zugriff auf einen Reverse-Proxy **auf demselben
|
||
Host** beschränken, setze `APP_BIND_HOST=127.0.0.1` in `/etc/certain-finance/env`.
|
||
|
||
## Optional: HTTPS über Nginx Proxy Manager
|
||
|
||
Wenn du von außen per HTTPS zugreifen willst, einen **Proxy Host** anlegen:
|
||
|
||
- **Domain Names:** deine (Sub-)Domain
|
||
- **Scheme:** `http`
|
||
- **Forward Hostname / IP:** IP dieses LXC
|
||
- **Forward Port:** Wert von `APP_PORT` (Standard `8071`)
|
||
- **Block Common Exploits:** an
|
||
- **Websockets Support:** nicht nötig
|
||
- **SSL:** Let's Encrypt-Zertifikat anfordern, „Force SSL" an
|
||
|
||
Für spätere CSV-/PDF-Uploads in den *Advanced*-Einstellungen des Hosts
|
||
`client_max_body_size 20m;` setzen.
|
||
|
||
Bei ausschließlichem HTTPS-Zugriff kannst du `APP_COOKIE_SECURE=true` in
|
||
`/etc/certain-finance/env` setzen (danach `systemctl restart certain-finance`) –
|
||
dann werden die Sitzungs-Cookies nur über HTTPS gesendet. Für gemischten Zugriff
|
||
(HTTP im LAN **und** HTTPS von außen) belasse es bei `false`.
|
||
|
||
## Betrieb
|
||
|
||
```bash
|
||
systemctl status certain-finance # Status
|
||
journalctl -u certain-finance -f # Logs
|
||
systemctl restart certain-finance # Neustart
|
||
sudo ./deploy/update.sh # Update (git pull + build + Migration + Neustart)
|
||
```
|
||
|
||
## Backup
|
||
|
||
Die Datenbank liegt unter `/var/lib/certain-finance/app.db`. `update.sh` legt vor
|
||
jeder Migration automatisch eine Kopie unter `/var/lib/certain-finance/backups/`
|
||
an. Zusätzlich empfiehlt sich ein Proxmox-`vzdump`-Snapshot des Containers.
|