Troubleshooting
Sammlung der Sachen, die in der Praxis am häufigsten haken. Wenn dein Problem hier nicht steht und du es löst, gerne ein Issue auf GitHub mit Lösung – dann landet es hier.
Compose meldet „DB_PASSWORD ist leer …" beim Start
Seit v2.3.3 eingebaute Schutz-Schiene: ohne gesetzte Passwörter wird die DB nicht initialisiert. Lösung:
./setup.sh # legt eine vollständige .env an
# oder manuell: cp .env.example .env und Passwörter eintragen
docker compose up -d Backend logt „JWT_SECRET_KEY ist leer"
echo "JWT_SECRET_KEY=$(openssl rand -hex 64)" >> .env
docker compose up -d Container starten nicht / hängen
docker compose logs -f
docker compose down
docker compose up -d
MariaDB braucht beim allerersten Start ein paar Sekunden, bis sie healthy ist. Das Backend wartet automatisch (depends_on: condition: service_healthy).
Backend startet, Frontend zeigt weiße Seite
Seit v2.3.7 prüft das Backend-Image beim Build, dass index.html, assets/ und ein gebautes JS-Bundle vorhanden sind – wenn nicht, bricht der Build ab. Wenn du trotzdem ein leeres Bild bekommst:
- Browser-Cache leeren oder Inkognito-Tab probieren.
- Im Browser-DevTools im Tab Network schauen, ob
/assets/index-*.jseinen 200 oder 404 hat. - Bei 404: Backend-Image neu bauen mit
./update.sh --rebuild.
Login geht nicht („429 Too Many Requests")
Das Login-Rate-Limit hat zugeschlagen. Standardlösung: ein paar Minuten warten, dann das richtige Passwort verwenden. Der Header Retry-After in der Antwort sagt dir genau wie lange.
Login geht nicht, kein 429 – Cookie wird nicht gesetzt
- HTTPS davor? Dann muss
AUTH_COOKIE_SECURE=truein der.envstehen. - Reverse-Proxy nicht richtig konfiguriert?
X-Forwarded-Proto,X-Forwarded-Formitgeben. - SameSite-Probleme? Default
laxsollte reichen; nur wenn das Panel über eine andere Domain eingebettet ist (z. B. iframe), brauchst dunone+secure.
„Captcha ungültig" beim Login (Lockout)
Wenn du das Captcha falsch konfiguriert hast und dich aussperrst, hilft direktes SQL:
docker compose exec -T mariadb mysql -u root -p"$DB_ROOT_PASSWORD" dns_manager <<SQL
UPDATE system_settings SET value='false' WHERE key_name='captcha.enabled';
SQL Danach wieder einloggen, Captcha sauber konfigurieren, Test-Button drücken und wieder aktivieren.
Admin-Passwort vergessen
docker compose exec backend python -c "
from app.core.database import async_session
from app.models.models import User
from app.core.auth import hash_password
import asyncio
async def reset():
async with async_session() as db:
admin = await db.get(User, 1) # User-ID 1 = erster Admin
admin.hashed_password = hash_password('neues-passwort')
await db.commit()
print('Passwort zurueckgesetzt.')
asyncio.run(reset())
" PowerDNS-Verbindung scheitert (Verbindungstest rot)
- HTTP 401: API-Key in
pdns.confstimmt nicht mit dem im Panel hinterlegten überein. - Connection refused:
webserver=yes?webserver-addressbindet auf das richtige Interface? Aus Sicht des Backend-Containers erreichbar? - 403 Forbidden:
webserver-allow-fromblockt deinen Container. Aus dem Container schauen:docker compose exec backend curl -v http://pdns:8081/api/v1/servers. - Timeout: Firewall, Routing, oder PowerDNS hängt – schau in dessen
journalctl -u pdns.
Records sind im Panel angelegt, aber `dig` zeigt sie nicht
- Hat
digwirklich diesen PowerDNS gefragt? Mit@<ip>explizit angeben. - SOA-Serial gestiegen?
dig SOA <zone> @<ip> +short– wenn nicht, hat PowerDNS den Schreibvorgang vielleicht abgelehnt; check Backend-Log. - Cache des Resolvers? Klassisches „TTL überstehen" oder Resolver-Cache flushen.
DNSSEC: Resolver gibt SERVFAIL
Drei häufigste Ursachen:
- DS beim Registrar fehlt oder ist veraltet → in den DNSSEC-Schlüsseln im Panel den aktuellen DS ablesen, beim Registrar setzen.
- NS-Records beim Registrar zeigen auf die falschen Server (z. B. noch alte Provider-NS).
- Auto-Signing aus, RRSIG abgelaufen → einen Record minimal ändern und zurückändern, das triggert Re-Signing.
Test-Tool: dnsviz.net – zeigt die ganze Validation-Chain mit konkreten Fehlern.
Webhook kommt nicht an oder wird abgelehnt
- URL ist privat (RFC1918, Localhost)? Standardmäßig blockiert.
WEBHOOK_ALLOW_PRIVATE_URLS=truesetzen. - HTTPS-Endpoint hat ein selbstsigniertes Zertifikat? Aktuell nicht akzeptiert – nutze ein gültiges Zertifikat oder einen internen ACME.
- Empfänger validiert die Signatur falsch und schickt 4xx → check, dass du den rohen Body für HMAC nutzt.
Update bricht ab oder Container kommt nicht hoch
- DB-Migration konnte nicht laufen → check
docker compose logs backendauf den genauen Fehler. - Plattenplatz voll →
df -h, alte Container-Images aufräumen mitdocker system prune -a. - Im Notfall: auf den vorherigen Tag zurück (
git checkout v2.3.7 && docker compose build backend && docker compose up -d) und das DB-Backup einspielen, dann das Update mit dem Maintainer absprechen.