Troubleshooting
Can’t log in / session expires immediately
Symptoms: Login redirects back to the login page, or session cookies aren’t set.
Cause: Running ENV=production without HTTPS, or without TRUSTED_PROXY_CIDRS configured.
Production mode sets Secure on session cookies — they won’t be sent over plain HTTP.
Fix:
- Ensure your reverse proxy sets
X-Forwarded-Proto: https - Set
TRUSTED_PROXY_CIDRSto your proxy’s Docker network subnet:Find the subnet with:TRUSTED_PROXY_CIDRS=172.18.0.0/16docker network inspect <network_name> | grep Subnet - For local testing, use
ENV=developmentinstead.
CSRF token invalid
Symptoms: Forms fail with a CSRF error; uploads or settings changes don’t go through.
Cause: Misconfigured reverse proxy or missing TRUSTED_PROXY_CIDRS.
Fix: Same as above — ensure X-Forwarded-Proto: https is set by your proxy and TRUSTED_PROXY_CIDRS covers its IP range.
Files won’t upload
Cause: Usually one of:
MAX_UPLOAD_SIZEis smaller than the file- Your reverse proxy has a body size limit
- The
/tmpvolume isn’t mounted (scratch-based Docker image has no/tmpby default)
Fix:
# Increase the limit in .env
MAX_UPLOAD_SIZE=10GFor Nginx, also set:
client_max_body_size 0;
proxy_request_buffering off;For Docker, ensure /tmp is mounted:
volumes:
- ./data:/app/data
- /tmpPermission denied on data directory
chmod 755 ./dataDatabase connection failed
Check that DB_HOST, DB_NAME, DB_USER, and DB_PASSWORD in .env match your database configuration. For Docker Compose, DB_HOST should be the service name (e.g. postgres), not localhost.
Port already in use
Change TROVE_PORT in .env to a free port and restart.
Share links return 404
The share has likely been revoked, expired, or hit its download limit. Check Settings → Shares to confirm.