421 Misdirected Request
421 Misdirected Request
ALLOWED_HOSTS in .env (or set PUBLIC_BASE_URL if you’re behind a proxy), then run:403 on saves (ingress.origin_not_allowed)
403 on saves (ingress.origin_not_allowed)
PUBLIC_BASE_URL in .env to your https:// address. Set it, then run:up --wait fails or hangs
up --wait fails or hangs
docker compose ps to find the unhealthy service. If it’s migrate, check its output:error from registry: denied, after updating a Git installation
error from registry: denied, after updating a Git installation
git clone, and your .env is older than the current Compose files: it has no COMPOSE_FILE line, so Docker Compose looked for a published image instead of building plamotrack from your checkout. Nothing was changed. You can move the installation onto the release files, or keep building from Git by adding these two lines at the top of .env:Port 8080 already in use
Port 8080 already in use
WEB_PORT in .env to any free port (e.g. 9090), then restart:POSTGRES_PASSWORD error from Compose
POSTGRES_PASSWORD error from Compose
cp env.example .env step during installation. Create the file first:.env, replace change-me with a real password, and run docker compose up -d --no-build --wait.password authentication failed (database)
password authentication failed (database)
POSTGRES_PASSWORD in .env after the database was already created. Postgres only reads that value when it initialises an empty data directory — it does not update on restart.You have two options:- Set it back to the original value and restart.
- Start fresh: run
docker compose down -v(this deletes the database), then restore from a backup. See Backups.
Forgot the owner password
Forgot the owner password
MCP client connects but hangs
MCP client connects but hangs
/mcp/ not /mcp).If you have a proxy in front of plamotrack, check that it has response buffering disabled for the MCP endpoint and doesn’t impose a short read timeout. MCP is a streaming protocol — a buffering proxy holds the response instead of passing it on, and the client hangs silently. The bundled nginx configuration in frontend/nginx/default.conf.template is a working reference for the correct settings.524 from Cloudflare on a large import
524 from Cloudflare on a large import
Every visitor is being rate-limited as one person
Every visitor is being rate-limited as one person
TRUSTED_PROXIES in .env, so every visitor appears to arrive from the proxy’s address. Add the proxy’s IP and restart:127.0.0.1 for a proxy on the same host, or the proxy’s own IP if it’s on another machine.The UI loads but all data shows errors in the browser console
The UI loads but all data shows errors in the browser console
api healthcheck probes /readyz from inside the container, which is the only place it answers. From outside, /api/readyz is deliberately 404 so a stranger can’t learn whether the database is up, and /api/healthz only says the process is alive.Caddy certificate errors
Caddy certificate errors
journalctl -u caddy to see the full error.- DNS-01 challenge: verify the Cloudflare API token has both Zone → DNS → Edit and Zone → Zone → Read permissions on the correct zone. Missing Zone → Zone → Read causes an “unknown error” when the module tries to look up the zone ID.
- HTTP challenge: make sure ports 80 and 443 are reachable from the internet under your domain name, and that the domain resolves to this host.
502 Bad Gateway from Caddy
502 Bad Gateway from Caddy
WEB_BIND isn’t 127.0.0.1. Check the stack status and test the connection locally:Still stuck?
Check the GitHub Issues page — someone may have hit the same problem. If not, open a new issue with your error output and the relevant parts of your.env (redact any passwords or secrets).