Nur noch eine docker-compose.yml und eine .env
Der zweite Stack unter docker/ war ein Duplikat aus Februar, das nie mitgepflegt wurde - und genau deshalb schwer zu finden und leicht falsch zu bedienen. Statt ihn zu loeschen (Caddy ist fuer Betreiber ohne eigenen Reverse-Proxy zurecht gewuenscht) ist er jetzt in den Hauptstack integriert: - caddy als optionaler Dienst mit `profiles: ["caddy"]` in docker-compose.yml. Ohne `--profile caddy` wird er nicht einmal angelegt - empirisch geprueft mit einem separaten Testprojekt: `up -d` startete nur den ungeschuetzten Dienst. Der laufende Stack bleibt damit unveraendert. - Caddyfile in den Projektstamm verschoben, proxy-Ziel auf den Dienstnamen `opencrm` angepasst, Zertifikate unter ./data/caddy wie alle anderen Daten. - DOMAIN, CADDY_DIR und CADDY_CONFIG_DIR in die .env.example aufgenommen. - docker/ entfernt (Dockerfile, entrypoint.sh, docker-compose.yml, .env.example, README.md). Das dortige Dockerfile basierte noch auf Alpine - genau die Variante, von der das Projekt wegen Prisma-/TLS-Problemen bewusst auf node:20-slim gewechselt ist. Das gepflegte backend/Dockerfile baut Frontend und Backend ebenso. - README: Abschnitt "Docker (Produktion)" ersetzt durch "Betrieb mit eigenem SSL", inkl. Hinweisen zu Let's-Encrypt-Limits, DNS-Voraussetzung, HTTPS_ENABLED und dem weiterhin offenen App-Port. Projektbaum und .dockerignore nachgezogen. Geprueft: docker-compose config gueltig, caddy validate gueltig, laufende Container unberuehrt. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,42 @@
|
||||
# OpenCRM Caddyfile
|
||||
# ===================
|
||||
# Wird NUR gebraucht, wenn du den optionalen Caddy-Dienst startest:
|
||||
# docker-compose --profile caddy up -d
|
||||
# Caddy holt und erneuert dann das SSL-Zertifikat automatisch fuer ${DOMAIN}.
|
||||
# Betreibst du bereits einen eigenen Reverse-Proxy (nginx, NPM, Traefik),
|
||||
# brauchst du diese Datei nicht - dann laeuft alles ueber deinen Proxy.
|
||||
|
||||
{$DOMAIN:localhost} {
|
||||
# Reverse proxy to OpenCRM app
|
||||
reverse_proxy opencrm:3001
|
||||
|
||||
# Logging
|
||||
log {
|
||||
output stdout
|
||||
format console
|
||||
}
|
||||
|
||||
# Security headers
|
||||
header {
|
||||
# Clickjacking protection
|
||||
X-Frame-Options "SAMEORIGIN"
|
||||
# XSS protection
|
||||
X-Content-Type-Options "nosniff"
|
||||
X-XSS-Protection "1; mode=block"
|
||||
# Referrer policy
|
||||
Referrer-Policy "strict-origin-when-cross-origin"
|
||||
}
|
||||
|
||||
# Gzip compression – NUR fuer statische Assets, NICHT fuer /api/*.
|
||||
# Komprimierte API-Antworten ermoeglichen die BREACH-Attacke
|
||||
# (CVE-2013-3587): aus der Antwortgroesse liessen sich unter bestimmten
|
||||
# Bedingungen Geheimnisse aus JSON-Responses ableiten. Statische Dateien
|
||||
# sind davon nicht betroffen und bleiben komprimiert.
|
||||
@nicht_api not path /api/*
|
||||
encode @nicht_api gzip
|
||||
|
||||
# Handle file uploads (increase body limit)
|
||||
request_body {
|
||||
max_size 50MB
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user