Skip to content

msdong/MEINEEPAAPP

Repository files navigation

🏥 Meine ePA (Elektronische Patientenakte)

Eine selbstgehostete Web-Anwendung zur Verwaltung persönlicher Gesundheitsdaten (z.B. Diagnosen, Vitalwerte, Blutwerte, Dokumente) mit Fokus auf Sicherheit (Login, 2FA/Passkeys, Rate Limiting, verschlüsselte Dateispeicherung) und Backup/Restore.

✨ Highlights

  • 🔐 Sicherheit
    • Login via Flask-Login
    • 2FA (TOTP) und Passkeys (WebAuthn)
    • CSRF-Schutz, Rate Limiting (Redis)
    • Uploads mit MIME-Type Validierung (libmagic)
    • Verschlüsselte Speicherung (Fernet via DATABASE_KEY)
  • 🗄️ Datenverwaltung
    • Profile, Diagnosen, Vitalwerte, Blutwerte, Dokumente
  • ♻️ Backup & Restore
    • Backup enthält Datenbank + Uploads + .env (wichtig für DATABASE_KEY)

🧱 Tech-Stack

  • Backend: Python / Flask
  • DB: SQLite (persistiert über Volume)
  • Cache/Rate limiting: Redis
  • Webserver: Gunicorn
  • Deployment: Docker / Docker Compose

�️ Screenshots

Dashboard

Diagnosen

Profil & Einstellungen

Gefahrenzone

Medikamentenplan

�🚀 Installation (Docker) – Schritt für Schritt

Ziel: Die Webversion auf deinem eigenen Server starten.

1) Voraussetzungen

  • Docker und Docker Compose installiert
  • Optional (empfohlen): Reverse Proxy (z.B. Nginx Proxy Manager)

2) Projekt auf den Server holen

git clone <DEIN_GITHUB_REPO_URL>
cd MEINEEPAAPP

3) Persistenz-Ordner anlegen

mkdir -p epa-data/instance epa-data/uploads epa-data/redis

4) .env vorbereiten (wichtig)

Diese App nutzt env_file: .env in docker-compose.yml.

  • Wenn keine ./.env existiert, kann docker compose (je nach Version) beim Laden der env_file scheitern.
  • Lege daher zunächst eine leere .env an:
touch .env
chmod 600 .env

Hinweis: In dieser Compose-Konfiguration wird die .env zusätzlich als Volume gemountet (./.env:/app/.env). Je nach Host-Setup/UID-Mapping kann es vorkommen, dass die Datei nach dem Start andere Owner/Permissions bekommt. Falls danach z.B. docker compose ps mit permission denied auf .env scheitert, setze die Rechte/Owner auf dem Host wieder passend.

Wichtig: Beim ersten Start erzeugt die Anwendung automatisch folgende Werte und schreibt sie in .env, falls sie fehlen:

  • SECRET_KEY (Flask Session Secret)
  • DATABASE_KEY (Fernet Key zur Ver-/Entschlüsselung)

5) Container starten (Standard)

docker compose up -d --build

Optional: Reverse Proxy / Nginx Proxy Manager (Netzwerk npm_default)

Wenn du Nginx Proxy Manager (oder einen anderen Reverse Proxy) nutzt, der im Netzwerk npm_default läuft, kannst du die App zusätzlich in dieses externe Netzwerk hängen.

  1. Falls das Netzwerk noch nicht existiert:
docker network create npm_default
  1. Dann mit zusätzlicher Compose-Datei starten:
docker compose -f docker-compose.yml -f docker-compose.npm.yml up -d --build

6) Zugriff auf die Web-App

Standardmäßig wird kein Port nach außen gemappt. Das ist ideal, wenn du die App über einen Reverse Proxy erreichst.

  • Mit Reverse Proxy: Route auf den Container-Service meine-epa und Port 8000.

Wenn du ohne Reverse Proxy testen willst, gibt es zwei Optionen:

  • Option A (empfohlen): Lege eine docker-compose.override.yml an (wird von Compose automatisch mitgeladen) und mappe den Port nach außen:
services:
  meine-epa:
    ports:
      - "8000:8000"

Dann erreichst du die App unter http://localhost:8000.

  • Option B: Greife intern über das Docker-Netzwerk zu (z.B. via Reverse Proxy/Container-zu-Container).

⚙️ Wichtige Umgebungsvariablen

Diese Werte werden über .env/Compose gesetzt oder automatisch erzeugt:

  • SECRET_KEY – Flask Secret
  • DATABASE_KEY – Verschlüsselungsschlüssel (kritisch für Entschlüsselung bestehender Uploads)
  • REDIS_URL – wird in docker-compose.yml gesetzt (redis://epa-redis:6379/0)

🧰 Betrieb / Hinweise

  • Persistenz:

    • ./epa-data/instance/app/instance
    • ./epa-data/uploads/app/uploads
    • ./epa-data/redis/data
    • ./.env/app/.env
  • Backup/Restore:

    • Backups beinhalten .env (damit DATABASE_KEY erhalten bleibt).
    • Beim Restore kann die aktuelle .env als .env.old gesichert werden.

🔒 Security-Notes (Kurz)

  • Halte die .env privat und sichere sie (Permissions 600).
  • Nutze HTTPS über einen Reverse Proxy.
  • Betreibe Redis nicht öffentlich erreichbar.

📄 Lizenz

Falls du eine Lizenz nutzen willst, ergänze hier eine passende Lizenz (z.B. MIT/Apache-2.0).

About

Webversion MeineePa (elektronische Patientenakte)

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published