Self-hosting troubleshooting
Common control-plane failures when self-hosting dFlow and what to check next.
Written By Zoro
Last updated 3 days ago
Work through symptoms top to bottom. Capture docker compose logs excerpts when opening an internal incident.
Container exits immediately: invalid environment
Symptom: payload-app restarts loop; logs mention Zod or "Invalid environment variables".
Checks:
- Compare your
.envagainstapps/dashboard/.env.example. - Confirm
DATABASE_URI,REDIS_URI,PAYLOAD_SECRET, andNEXT_PUBLIC_WEBSITE_URLare set and reachable from the container. - See
DOCKER.mdfor build-time vs runtime validation.
Cannot reach the dashboard
Symptom: Browser timeout or connection refused.
Checks:
docker compose ps: aretraefikandpayload-apphealthy?- Firewall: 80 / 443 open to Traefik?
NEXT_PUBLIC_WEBSITE_URLmatches the hostname clients use.- If behind another proxy, verify upstream routing and WebSockets.
TLS or ACME failures
Symptom: Certificate warnings or Traefik ACME errors.
Checks:
acme.jsonexists and is writable (chmod 600).CF_DNS_API_TOKEN(or other DNS API creds) still valid.- DNS records point to this host before ordering certs.
- More context: Control plane domains and SSL.
MongoDB auth errors
Symptom: App logs show authentication failed against mongodb.
Checks:
MONGO_INITDB_ROOT_USERNAME/MONGO_INITDB_ROOT_PASSWORDmatchDATABASE_URI.- You did not re-create the
mongo-datavolume with new creds without resetting the database. - Network:
payload-appresolves hostnamemongodb.
Redis connection errors
Symptom: Queue or cache errors referencing redis.
Checks:
rediscontainer running.REDIS_URIuses the Compose service name (e.g.redis://redis:6379).
Tailscale-related failures
Symptom: Features that expect tailnet integration stay disabled or error.
Checks:
NET_ADMINand/dev/net/tunstill onpayload-app.TAILSCALE_AUTH_KEY,TAILSCALE_OAUTH_CLIENT_SECRET, andTAILSCALE_TAILNETpopulated and not expired.- Separate Worker Node mesh issues: Compute and worker node issues under Troubleshooting in the sidebar.
Beszel agent spam or crashes
Symptom: beszel-agent logs errors about auth.
Checks:
Replace placeholder KEY and TOKEN in docker-compose.yml or disable the agent service until configured.
Still stuck
- Troubleshooting overview under Troubleshooting in the sidebar
- Getting started issues under Troubleshooting in the sidebar (first-login class problems)
- When to contact support under Troubleshooting in the sidebar (expectations for self-hosted)