# Operations ## Apache - Server: Apache HTTPD - Erforderlich: `mod_rewrite` aktiv - Erforderlich: `AllowOverride All` im Projektpfad - Root-`.htaccess` muss vorhanden sein und wird für Routing/Zugriffsschutz genutzt. ## Cron Cleanup Täglich ausführen: ```bash php /pfad/zum/projekt/admin/cleanup.php ``` ## Retention - Drafts: `config/app.local.php -> retention.draft_days` (Default 14) - Submissions: `config/app.local.php -> retention.submission_days` (Default 90) ## Konfiguration (Sample-Setup) - Versionierte Vorlagen: `config/app.sample.php`, `config/mail.sample.php` - Stabile Loader-Dateien im Repo: `config/app.php`, `config/mail.php` - Lokale Runtime-Dateien: `config/app.local.php`, `config/mail.local.php` - Erstsetup: - `cp config/app.sample.php config/app.local.php` - `cp config/mail.sample.php config/mail.local.php` - `config/*.local.php` sind lokal und sollen nicht in Git versioniert werden. ## Logs - `storage/logs/cleanup.log` - `storage/logs/mail.log` - `storage/logs/app.log` - `storage/logs/php_runtime.log` - `storage/logs/php_fatal.log` ## Bot-Schutz (Honeypot) - Das öffentliche Formular nutzt das Honeypot-Feld `website` als einfachen Spam-Schutz. - Anfragen mit nicht-leerem `website` werden mit HTTP `400` und `common.request_blocked` abgewiesen. ## Backup Regelmäßig sichern: - `storage/submissions/` - `storage/uploads/` - `config/*.local.php` `storage/drafts/` ist temporär und kann bei Bedarf ausgeschlossen werden. ## Restore 1. Projektdateien deployen. 2. Backup von `storage/submissions` und `storage/uploads` zurückspielen. 3. `config/*.local.php` wiederherstellen. 4. Schreibrechte prüfen. ## Troubleshooting - Keine Mails: Mailfunktion des Hosters prüfen, `mail.log` ansehen. - Upload Fehler: `upload_max_filesize` / `post_max_size` und Schema-Limits prüfen. - Login geht nicht: `config/app.local.php -> admin.credentials` prüfen (username + password_hash). - ZIP Download fehlgeschlagen: `ZipArchive` Erweiterung auf Hosting prüfen. - Unerwartet blockierte Requests (`400 Anfrage blockiert`): prüfen, ob das Feld `website` durch Client/Proxy/Plugin befüllt wird. - 500 ohne Apache/PHP-Fehlerausgabe: `storage/logs/php_fatal.log` und `storage/logs/php_runtime.log` prüfen.