Fehlerbehebung
Diese Seite behandelt häufige Probleme, die beim Self-Hosting von solyto auftreten können, und wie du sie behebst.
Logs prüfen
Abschnitt betitelt „Logs prüfen“Der erste Schritt bei der Fehlersuche ist immer, die Container-Logs zu prüfen:
# Alle Dienstedocker compose logs
# Ein bestimmter Dienstdocker compose logs apidocker compose logs appdocker compose logs nginx
# Logs in Echtzeit verfolgendocker compose logs -f apiLogs sind dein bester Freund. Die meisten Fehler werden in der Ausgabe erklärt.
Container startet nicht
Abschnitt betitelt „Container startet nicht“Symptome: docker compose ps zeigt einen Dienst als neu startend oder beendet.
Prüfungen:
- Sieh dir die Logs des fehlgeschlagenen Dienstes an:
docker compose logs <service> - Überprüfe, ob
.envalle erforderlichen Variablen enthält — siehe Konfiguration - Überprüfe, ob alle erforderlichen Secret-Dateien in
./secrets/vorhanden sind — siehe Docker Secrets - Prüfe, ob Docker genug Ressourcen hat (Arbeitsspeicher, Speicherplatz)
Häufige Ursache: fehlende oder leere Secret-Datei. Prüfe mit:
ls -la secrets/Datenbankverbindungsfehler
Abschnitt betitelt „Datenbankverbindungsfehler“Symptome: Die API liefert 500-Fehler, die Logs zeigen SQLSTATE oder Connection refused.
Prüfungen:
- Läuft die Datenbank?
docker compose ps mariadbunddocker compose ps postgres - Überprüfe, ob die Zugangsdaten zwischen
.envund den Secret-Dateien übereinstimmen:Terminal-Fenster cat secrets/db_usercat secrets/db_password - Stelle sicher, dass
DB_HOST=mariadbundDAV_DB_HOST=postgresgesetzt sind (Docker-Dienstnamen) - Warte — MariaDB und PostgreSQL können beim ersten Start ein paar Sekunden brauchen, bis sie bereit sind. Der API-Container versucht es automatisch erneut.
Datenbank-Zugangsdaten zurücksetzen (falls beschädigt):
# Secret-Datei neu erzeugenopenssl rand -hex 32 > secrets/db_passworddocker compose up -d mariadb# Warte, bis MariaDB gestartet ist, und starte dann die API neudocker compose restart api queueTLS-Zertifikatsprobleme
Abschnitt betitelt „TLS-Zertifikatsprobleme“Symptome: Der Browser zeigt eine Sicherheitswarnung, Traefik meldet Zertifikatsfehler.
Prüfungen:
- Überprüfe, ob deine Domains auf die Server-IP auflösen:
dig api.example.com - Stelle sicher, dass die Ports 80 und 443 offen sind und nicht von einer Firewall blockiert werden
- Prüfe, ob
ACME_EMAILin.envgesetzt ist - Überprüfe, ob das Volume
traefik_acmeexistiert und beschreibbar ist
Zertifikatserneuerung erzwingen:
docker compose downdocker volume rm <project>_traefik_acmedocker compose up -dErsetze <project> durch deinen PROJECT_NAME. Traefik fordert beim Start neue Zertifikate an.
Berechtigungsprobleme mit storage/
Abschnitt betitelt „Berechtigungsprobleme mit storage/“Symptome: Datei-Uploads schlagen fehl, die Logs zeigen Permission denied in storage/.
Lösung:
chown -R www-data:www-data storage/chmod -R 775 storage/Das Verzeichnis storage/ wird über einen Bind-Mount zwischen api, dav, queue, nginx und imgproxy geteilt. Alle davon benötigen Schreibzugriff.
CalDAV/CardDAV funktioniert nicht
Abschnitt betitelt „CalDAV/CardDAV funktioniert nicht“Symptome: Kalender- oder Kontakt-Synchronisierung schlägt in externen Apps fehl (DAVx5, Apple Calendar usw.).
Prüfungen:
- Überprüfe, ob der
dav-Dienst läuft:docker compose ps dav - Stelle sicher, dass
DAV_DOMAINgesetzt ist und korrekt auflöst - Prüfe, ob die CalDAV-/CardDAV-URL, die deine externe App verwendet, mit
https://dav.example.comübereinstimmt - Prüfe die Logs des
dav-Dienstes:docker compose logs dav - Überprüfe, ob PostgreSQL läuft:
docker compose ps postgres - Stelle sicher, dass die Secrets
dav_db_userunddav_db_passwordkorrekt sind
Häufiges Problem: Die DAV-Domain muss sich von der API-Domain unterscheiden. Beide laufen als separate Dienste hinter Traefik.
Queue wird nicht verarbeitet
Abschnitt betitelt „Queue wird nicht verarbeitet“Symptome: Asynchrone Aufgaben werden nicht abgeschlossen (Benachrichtigungen, Hintergrundjobs).
Prüfungen:
- Läuft der Queue-Worker?
docker compose ps queue - Prüfe die Queue-Logs:
docker compose logs queue - Überprüfe, ob Redis läuft:
docker compose ps redis - Prüfe die Redis-Konnektivität:
docker compose exec api so tinkerund teste dann einen Redis-Befehl
Queue-Worker neu starten:
docker compose restart queueBilder werden nicht geladen
Abschnitt betitelt „Bilder werden nicht geladen“Symptome: Hochgeladene Profilbilder oder andere Medien liefern 404 oder sind defekt.
Prüfungen:
- Bei
IMAGE_DRIVER=intervention(Standard) ist kein zusätzlicher Dienst nötig - Bei
IMAGE_DRIVER=imgproxy, stelle sicher, dass derimgproxy-Dienst läuft und die Secretsimgproxy_key/imgproxy_saltgesetzt sind - Prüfe, ob
storage/app/public/existiert und beschreibbar ist - Prüfe die nginx-Logs:
docker compose logs nginx
Healthcheck-Fehler
Abschnitt betitelt „Healthcheck-Fehler“Der nginx-Dienst hat einen Healthcheck unter /api/v1/health. Falls dieser fehlschlägt:
- Manuell testen:
curl -s https://api.example.com/api/v1/health - Antwortet die API nicht, prüfe die Logs des
api-Containers - Ist die Datenbank down, schlägt der Healthcheck fehl — behebe zuerst das Datenbankproblem
Hilfe erhalten
Abschnitt betitelt „Hilfe erhalten“Wenn du ein Problem nicht lösen kannst:
- Durchsuche bestehende Issues im Selfhosted-Repository
- Erstelle ein neues Issue mit deinen Logs (entferne vorher alle Secrets)
- Wirf einen Blick auf das Dev-Requests-Board, falls du solyto.app nutzt