Troubleshooting
Uploads fail at a certain size
Almost always the reverse proxy rather than the app. nginx defaults
client_max_body_size to 1 MB and rejects the request before it reaches
LokalTransfer. Raise it to match NUXT_MAX_FILE_SIZE_MB, and raise the read
timeouts while you are there — a slow upload of a large file takes time.
Sign-in appears to do nothing
The session cookie is being discarded. It is marked secure when
NODE_ENV=production or when the request carries X-Forwarded-Proto: https, so
a browser on HTTPS behind a proxy that does not forward the protocol will throw
it away silently.
Configure the proxy to send that header.
Links in e-mails point at localhost
NUXT_APP_URL is still the default. Every download and magic link is built from
it. Set it to the address recipients actually reach and restart.
The interface is in the wrong language
NUXT_LANGUAGE sets both the interface and outbound mail, and takes one of
en, de, fr, es, it, nl, pl, uk, pt or cs — anything else
falls back to English. If only the mail changed, you are on a version before 0.1.2 — earlier builds reached only the
server-side half of that setting. Upgrade, or set NUXT_PUBLIC_LANGUAGE as
well.
"self-signed certificate in certificate chain" at startup
NUXT_MYSQL_SSL=true against a local MySQL, which presents a self-signed
certificate. Set it to false for a local database; keep it true only for a
managed one that requires TLS.
Expired files are still on disk
The sweep runs every 15 minutes inside the app's own process. If the app is
deployed somewhere that starts a process per request, the timer never fires.
Run it as a long-lived process — node .output/server/index.mjs, or the Docker
image.
Expiry itself still holds: an expired transfer is refused at download time regardless.
Colours are ignored
The hex is unquoted in .env, so # started a comment and the value is empty.
Quote it, or write the hex without the #. See Colours.
Checking the instance
curl https://transfer.example.com/api/health
{"status":"ok"} means the app is up and the database is reachable. 503
means it is not — which is the more useful answer than a process that is
listening but broken.