L10b Betrieb & Aufräumen: Deploy – craftvia-worker, CI-Testjob, DEPLOY.md, Certvia-Doku archiviert
- docker-compose.coolify(.prebuilt).yml: Service craftvia-worker (Target worker, Chromium, shm_size 1gb, gleiche Härtung), Craftvia-Variablen für app und worker. - Dockerfile: worker-Stage mit HOME=/home/app (Chromium-Profil für non-root); lokaler docker build der Targets runner und worker erfolgreich, PDF-Erzeugung im Image geprüft. - .env.example/.env.prod.example/.env.coolify.example: alle Craftvia-Variablen inkl. RLS, KI-Provider, PDF_CHROMIUM_PATH, OFFLINE_MAX_DAYS, API_RATE_LIMIT_*, AI_GENERATION_RETENTION_DAYS, AI_MONTHLY_TOKEN_LIMIT. - CI (.github, .gitea): Job gate mit Postgres (pgvector) und Redis als Service: migrate deploy, seed, Passwort für craftvia_app, tsc, lint, build, npm run test. - docs/craftvia/DEPLOY.md (aus den Certvia-Deploy-Docs abgeleitet): Architektur, Domains, Secrets, Worker, Migrationen, RLS-Aktivierung, Backup/Restore, KI, Rate Limits, Aufbewahrung, Smoke, Update/Rollback. build-and-push-images.sh baut craftvia-worker. - Certvia-/ISMS-Dokumente aus docs/ nach docs/_certvia-archiv/ (mit README); Verweise in README.md und Skript-Kommentaren angepasst. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
+46
-8
@@ -1,7 +1,8 @@
|
||||
# Referenz für die Coolify-Environment-Variablen (Testserver, intern).
|
||||
# ECHTE Secrets NUR in Coolify eintragen – diese Datei enthält nur Platzhalter.
|
||||
# ECHTE Secrets NUR in Coolify eintragen – diese Datei enthält nur Platzhalter.
|
||||
# In Coolify: Ressource -> Environment Variables (Bulk-Paste möglich).
|
||||
# Hostnamen sind die Compose-Service-Namen (postgres/redis/garage), NICHT localhost.
|
||||
# Betriebsdoku: docs/craftvia/DEPLOY.md
|
||||
|
||||
# --- Datenbank (Service "postgres") ---
|
||||
POSTGRES_USER=craftvia
|
||||
@@ -9,6 +10,12 @@ POSTGRES_PASSWORD=CHANGE_ME_db_password
|
||||
POSTGRES_DB=craftvia
|
||||
DATABASE_URL=postgresql://craftvia:CHANGE_ME_db_password@postgres:5432/craftvia?schema=public
|
||||
|
||||
# --- Row Level Security (F-04) ---
|
||||
# Auf dem Testserver zunächst false (Owner-Betrieb). Zum Scharfschalten craftvia_app mit
|
||||
# LOGIN + Passwort versehen (ALTER ROLE craftvia_app WITH LOGIN PASSWORD '<pw>';), dann:
|
||||
RLS_ENFORCED=false
|
||||
# RLS_DATABASE_URL=postgresql://craftvia_app:CHANGE_ME_app_password@postgres:5432/craftvia?schema=public
|
||||
|
||||
# --- Redis (Service "redis") ---
|
||||
# F-18: Redis läuft mit requirepass. NUR REDIS_PASSWORD setzen — REDIS_URL wird in der
|
||||
# docker-compose.coolify.yml daraus abgeleitet (redis://:${REDIS_PASSWORD}@redis:6379)
|
||||
@@ -44,29 +51,60 @@ GARAGE_ADMIN_TOKEN=CHANGE_ME_openssl_rand_hex_32
|
||||
# `backups` auf /app/.backups (app + backup-worker) — Pfad hier NICHT aendern, ausser
|
||||
# der Mount wird angepasst.
|
||||
BACKUP_LOCAL_DIR=/app/.backups
|
||||
# BACKUP_ENC_KEY= (leer = AUTH_SECRET)
|
||||
|
||||
# --- Auth (NextAuth) ---
|
||||
# --- Auth (Auth.js v5) ---
|
||||
# AUTH_SECRET: openssl rand -base64 32
|
||||
# AUTH_URL: exakt die Coolify-Domain des app-Service (http:// für intern)
|
||||
AUTH_SECRET=CHANGE_ME_openssl_rand_base64_32
|
||||
# PASSWORD_PEPPER (Härtung §1): openssl rand -hex 32 — frisch je Umgebung, NICHT rotierbar, nie ins Artefakt.
|
||||
PASSWORD_PEPPER=CHANGE_ME_openssl_rand_hex_32
|
||||
# MFA_ENC_KEY= (leer = aus AUTH_SECRET abgeleitet; nach dem Setzen nicht mehr ändern)
|
||||
AUTH_URL=http://REPLACE-WITH-COOLIFY-SSLIP-DOMAIN
|
||||
# Hinter Reverse-Proxy (Coolify/Traefik) für Auth.js v5 zwingend, sonst UntrustedHost:
|
||||
AUTH_TRUST_HOST=true
|
||||
|
||||
# --- Demo-Seed (NUR Testserver!) ---
|
||||
# true => migrate-Job legt nach der Migration den Demo-Mandanten + Nutzer an
|
||||
# true => migrate-Job legt nach der Migration die Demo-Mandanten + Nutzer an
|
||||
# (admin@demo.example / Demo1234!). In Produktion NICHT setzen / auf false lassen.
|
||||
RUN_DEMO_SEED=true
|
||||
|
||||
# --- KI-Provider (optional, aktuell ungenutzt) ---
|
||||
AI_PROVIDER=anthropic
|
||||
AI_API_KEY=
|
||||
|
||||
# --- E-Mail (optional, im Test ungenutzt) ---
|
||||
# --- E-Mail (optional; ohne SMTP bleiben Mails "pending") ---
|
||||
SMTP_HOST=
|
||||
SMTP_PORT=1025
|
||||
SMTP_SECURE=
|
||||
SMTP_USER=
|
||||
SMTP_PASSWORD=
|
||||
SMTP_FROM=craftvia@example.com
|
||||
MAIL_FROM_NAME=Craftvia
|
||||
MAIL_REPLY_TO=
|
||||
# Basis für absolute Links in Mails/PDFs; leer = AUTH_URL.
|
||||
APP_BASE_URL=
|
||||
|
||||
# --- KI: Auftragsimport-Extraktion & Lotse (Anthropic, optional) ---
|
||||
# Ohne ANTHROPIC_API_KEY: manuelle Erfassung, kein Lotse-Entwurf.
|
||||
AI_EXTRACTION_PROVIDER=anthropic
|
||||
ANTHROPIC_API_KEY=
|
||||
ANTHROPIC_MODEL=
|
||||
|
||||
# --- KI: Transkription (Whisper-kompatibel, optional) ---
|
||||
TRANSCRIPTION_PROVIDER=openai-compatible
|
||||
TRANSCRIPTION_API_URL=https://api.openai.com/v1/audio/transcriptions
|
||||
TRANSCRIPTION_API_KEY=
|
||||
TRANSCRIPTION_MODEL=whisper-1
|
||||
|
||||
# --- KI: Kostenbremse & Aufbewahrung KI-Protokoll ---
|
||||
# Tokens je Mandant je Kalendermonat (ein+aus), 0 = unbegrenzt.
|
||||
AI_MONTHLY_TOKEN_LIMIT=0
|
||||
# Ein-/Ausgaben im KI-Protokoll (AiGeneration) nach N Tagen leeren/pseudonymisieren.
|
||||
AI_GENERATION_RETENTION_DAYS=180
|
||||
|
||||
# --- Craftvia: API-Rate-Limits (je Nutzer/Minute) ---
|
||||
API_RATE_LIMIT_PER_MINUTE=300
|
||||
# /api/v1/sync, /api/v1/uploads, /api/v1/field/**
|
||||
API_FIELD_RATE_LIMIT_PER_MINUTE=1200
|
||||
|
||||
# --- Craftvia: Offline/PWA & Malware-Scan ---
|
||||
OFFLINE_MAX_DAYS=7
|
||||
CLAMAV_HOST=
|
||||
CLAMAV_PORT=3310
|
||||
|
||||
Reference in New Issue
Block a user