- Mehrstufige Dockerfiles je Dienst mit Stufen für Entwicklung und Betrieb, beide Images laufen als unprivilegierter Benutzer - Backend-Entrypoint wartet auf die Datenbank, migriert und seedt nur bei leerem Kategoriebaum (neues Flag --if-empty) - docker-compose.yml mit Netz-Trennung, Healthchecks und benannten Volumes; die Datenbank ist ausschließlich im internen Netz erreichbar - nginx liefert das Bundle aus und reicht /api weiter; index.html ungecacht, gehashte Assets ein Jahr - Gitea-Workflows: ci.yml für Lint, Tests und Bundle-Bau, build.yml für die Images nach linux/amd64 ohne Deploy-Schritt - docs/runner.md und docs/deployment.md, .dockerignore je Dienst Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014e7t8UpmoVNMtWivY5LiSH
91 lines
3.6 KiB
Bash
91 lines
3.6 KiB
Bash
# =============================================================================
|
||
# moneyfy – Beispielkonfiguration
|
||
# Kopieren nach `.env` und anpassen. Niemals echte Secrets committen.
|
||
# =============================================================================
|
||
|
||
# --- Allgemein ---------------------------------------------------------------
|
||
ENVIRONMENT=production # development | production | test
|
||
DEBUG=false
|
||
TIMEZONE=Europe/Berlin # Durchgängige Zeitzone der Anwendung
|
||
HOLIDAY_REGION=DE-NW # Feiertagsregion für Werktagsverschiebungen
|
||
DEFAULT_CURRENCY=EUR
|
||
# Öffentliche Basis-URL, u. a. für Links in Benachrichtigungen
|
||
PUBLIC_BASE_URL=https://moneyfy.menzel.center
|
||
# Image-Tag, den docker-compose zieht (main, 0.1.0, latest, sha-abc1234)
|
||
TAG=latest
|
||
|
||
# --- Datenbank ---------------------------------------------------------------
|
||
POSTGRES_DB=moneyfy
|
||
POSTGRES_USER=moneyfy
|
||
POSTGRES_PASSWORD=bitte-aendern
|
||
# Wird beim Betrieb mit Compose aus den drei Werten darüber zusammengesetzt und
|
||
# muss dort nicht gesetzt werden. Nur für den Betrieb ohne Compose nötig.
|
||
# `postgresql://` wird automatisch auf asyncpg umgestellt.
|
||
DATABASE_URL=postgresql+asyncpg://moneyfy:bitte-aendern@moneyfy-db:5432/moneyfy
|
||
|
||
# --- Sicherheit --------------------------------------------------------------
|
||
# Signaturschlüssel für JWTs, mindestens 32 Zeichen.
|
||
# Erzeugen mit: openssl rand -hex 32
|
||
SECRET_KEY=bitte-aendern-mindestens-32-zeichen-lang
|
||
ACCESS_TOKEN_TTL_MINUTES=30
|
||
REFRESH_TOKEN_TTL_DAYS=14
|
||
COOKIE_SECURE=true # Hinter HTTPS-Proxy true, für lokales HTTP false
|
||
COOKIE_DOMAIN=
|
||
|
||
# Wird beim ersten Start angelegt (danach mit erzwungenem Passwortwechsel).
|
||
MONEYFY_ADMIN_USER=admin
|
||
MONEYFY_ADMIN_PASSWORD=bitte-aendern
|
||
|
||
# --- OIDC (vorbereitet, noch nicht implementiert) ----------------------------
|
||
OIDC_ENABLED=false
|
||
OIDC_ISSUER=
|
||
OIDC_CLIENT_ID=
|
||
OIDC_CLIENT_SECRET=
|
||
OIDC_SCOPES=openid profile email
|
||
|
||
# --- Logo-Service ------------------------------------------------------------
|
||
# Verzeichnis für den lokalen Logo-Cache. Beim Betrieb mit Compose zeigt es fest
|
||
# auf das Volume und muss hier nicht gesetzt werden. Logos werden ausschließlich
|
||
# von dort ausgeliefert – im Seitenaufruf entsteht kein Zugriff nach außen.
|
||
LOGO_STORAGE_DIR=/data/logos
|
||
|
||
# Der lokale simple-icons-Katalog deckt die meisten Marken ohne Netzzugriff ab.
|
||
# Die folgenden Provider sind optional; ohne Schlüssel wird der jeweilige
|
||
# Adapter stillschweigend übersprungen.
|
||
|
||
# logo.dev: veröffentlichbarer Token von https://www.logo.dev
|
||
# Achtung: Auf dem kostenlosen Tarif verlangt logo.dev bei kommerzieller
|
||
# Nutzung einen sichtbaren Rückverweis. Für private Nutzung entfällt das.
|
||
LOGODEV_API_KEY=
|
||
|
||
# Brandfetch: API-Schlüssel der Brand API (https://docs.brandfetch.com).
|
||
# Wird nur genutzt, wenn zur Firma eine Domain hinterlegt ist.
|
||
BRANDFETCH_API_KEY=
|
||
|
||
LOGO_HTTP_TIMEOUT_SECONDS=5
|
||
LOGO_HTTP_RETRIES=2
|
||
LOGO_MAX_UPLOAD_BYTES=1048576
|
||
# Sucht nach dem Anlegen einer Firma automatisch im Hintergrund nach einem Logo.
|
||
LOGO_AUTO_RESOLVE=true
|
||
|
||
# --- Benachrichtigungen ------------------------------------------------------
|
||
NOTIFICATIONS_ENABLED=true
|
||
SCHEDULER_ENABLED=true
|
||
NOTIFICATION_HOUR=7 # Täglicher Lauf um 07:00 Europe/Berlin
|
||
NOTIFICATION_MINUTE=0
|
||
|
||
SMTP_HOST=
|
||
SMTP_PORT=587
|
||
SMTP_USER=
|
||
SMTP_PASSWORD=
|
||
SMTP_FROM=moneyfy@example.com
|
||
SMTP_USE_TLS=true # STARTTLS
|
||
SMTP_USE_SSL=false # Implizites TLS (Port 465)
|
||
|
||
# Komma-separierte Apprise-URLs, z. B. ntfy://host/topic,discord://...
|
||
APPRISE_URLS=
|
||
|
||
# --- CORS --------------------------------------------------------------------
|
||
# Nur für getrennte Frontend-Entwicklung nötig, z. B. http://localhost:5173
|
||
CORS_ORIGINS=
|