Files
opencrm/docker
duffyduck 48fe69cdab Security-Hardening Runde 17: JWT-TTL + Pentest-Marker-Detection
Pentest Runde 17:

21.1 Access-Token TTL war 7 Tage statt 15min:
docker-compose.yml und .env.example standen schon richtig auf 15m
als Default. Die alten Beispiel-.env-Files (backend/.env.example,
docker/.env.example) hatten noch die alte Konvention "7d". Beide
auf 15m korrigiert + explizites JWT_REFRESH_EXPIRES_IN=7d ergänzt.
Auf prod muss die echte .env entsprechend angepasst werden.

17.5 Alte Pentest-Daten in DB:
Cleanup-Script erweitert um Pentest-Marker-Erkennung:
- Email-Pattern: ^hacker@, ^attacker@, ^pentest@, @evil\.
- XSS-Marker: <script, onerror=, javascript:
- Sonstige: SQL-Injection, Path-Traversal

Bewusst eng gefasst (Marker MUSS am Email-Anfang stehen), damit
legitime Kunden wie "stefanhacker@gmx.de" nicht als Pentest-Daten
durchgehen.

Default: nur warnen + Records auflisten. Opt-In via
CLEANUP_PURGE_PENTEST=true löscht die markierten Customer/User.

Live-verifiziert:
- stefanhacker@gmx.de (echt) → durchgelassen
- hacker@evil.de (Pentest) → erkannt + Warnung
- Mit Purge-Env → gelöscht

18.4 Klartext-Portal-PW-Abruf:
Bewusst drin gelassen (Admin-UI-Komfort). Endpoint ist mit
customers:update-Permission gated + Audit-Log (READ →
PortalPassword) – kein Bypass-Risiko, nur explizite Audit-Pflicht.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-18 20:06:03 +02:00
..
2026-02-08 19:59:49 +01:00
2026-02-08 19:59:49 +01:00
2026-02-08 19:59:49 +01:00
2026-02-08 19:59:49 +01:00

OpenCRM Docker Deployment

Schnellstart

  1. Umgebungsvariablen konfigurieren:

    cd docker
    cp .env.example .env
    nano .env  # Sichere Werte setzen
    
  2. Container starten (erster Start mit RUN_SEED=true):

    docker compose up -d
    

    Beim ersten Start wird automatisch:

    • Auf die Datenbank gewartet
    • Migrationen ausgeführt
    • Seed-Daten geladen (wenn RUN_SEED=true)
  3. Nach erfolgreicher Installation:

    # RUN_SEED in .env auf false setzen
    sed -i 's/RUN_SEED=true/RUN_SEED=false/' .env
    
  4. Anwendung aufrufen:

    • Mit Domain: https://your-domain.com
    • Lokal: http://localhost
  5. Login:

    • E-Mail: admin@admin.com
    • Passwort: admin

Architektur

                    ┌─────────────┐
                    │   Caddy     │
                    │  (SSL/TLS)  │
                    │   :80/:443  │
                    └──────┬──────┘
                           │
                    ┌──────▼──────┐
                    │   OpenCRM   │
                    │   (Node.js) │
                    │    :3001    │
                    └──────┬──────┘
                           │
                    ┌──────▼──────┐
                    │   MariaDB   │
                    │    :3306    │
                    └─────────────┘

Befehle

Container verwalten

# Starten
docker compose up -d

# Stoppen
docker compose down

# Logs anzeigen
docker compose logs -f app

# Neustart
docker compose restart app

Datenbank

# Migration ausführen
docker compose exec app npx prisma migrate deploy

# Seed-Daten laden
docker compose exec app npx tsx prisma/seed.ts

# Prisma Studio (Datenbank-UI)
docker compose exec app npx prisma studio

Backup & Restore

# Backup-Verzeichnis ist unter /app/backups gemountet
# Backups werden über die Anwendung erstellt/wiederhergestellt

Update

# Image neu bauen und Container aktualisieren
docker compose build --no-cache
docker compose up -d
# Migrationen werden automatisch beim Start ausgeführt

Volumes

Volume Beschreibung
mariadb_data Datenbank-Dateien
uploads_data Hochgeladene Dokumente
backups_data Backup-Dateien
caddy_data SSL-Zertifikate
caddy_config Caddy-Konfiguration

SSL-Zertifikat

Caddy holt automatisch ein Let's Encrypt Zertifikat wenn:

  • Die Domain in .env korrekt gesetzt ist
  • Port 80 und 443 von außen erreichbar sind
  • DNS auf den Server zeigt

Für lokale Entwicklung mit DOMAIN=localhost wird ein selbstsigniertes Zertifikat verwendet.

Troubleshooting

Container startet nicht

docker compose logs app

Datenbank-Verbindung fehlgeschlagen

# Warten bis MariaDB bereit ist
docker compose logs db

SSL-Zertifikat Probleme

docker compose logs caddy
# Caddy-Daten zurücksetzen
docker compose down
docker volume rm opencrm_caddy_data opencrm_caddy_config
docker compose up -d