mealfWiki
On this page

Troubleshooting

Start with the exact image/source revision, backend health and the affected URL. Use the same Compose files and project name as your installation. Preview service name is mealf; source-build service name is aircooker.

Basic checks

For preview Compose with a host ingress:

Terminal
docker compose -f compose.yml ps
curl --fail http://127.0.0.1:5152/api/v1/system/health
curl --fail https://mealf.example.com/api/v1/system/health

Replace the hostname. If using the Docker tunnel overlay, add -f compose.tunnel.yaml to Compose commands. Private HTTP health checks do not verify public cookies, CSRF, PWA installation or external integrations.

Read private logs locally when needed:

Terminal
docker compose -f compose.yml logs --tail=100 mealf

Unconfigured startup logs contain the one-time setup token by default. Redact it before sharing any log excerpt. Use administration Overview for bounded job states/error codes; do not upload a database, .env file or complete Compose configuration containing secrets.

Installation, setup and login

Symptom Check / action
Backend stops or cannot write /data Verify volume mount, free space and UID/GID 10001 ownership; retain the single backend process
Unhealthy after upgrade Inspect migration errors privately; preserve the volume and use the matching backup/image for rollback
Setup appears after an upgrade Stop and check the original volume/project mapping before creating another household
Setup token missing Check private unconfigured startup logs or /data/config/setup-token; configured households use sign-in/local recovery
Setup is locked The household exists; use its credentials or interactive local password recovery
Browser 401 / session expired Sign in again; the console's access session is short-lived, and password changes/recovery revoke sessions
Browser 403 after the page loads Verify valid HTTPS, exact BASE_URL including any port, same-origin API use and cookie/CSRF handling
Environment edit has no effect Recreate with up -d; restart retains the old environment; .env values must be referenced by Compose
Certificate failure Fix DNS, hostname and certificate chain; do not disable certificate verification
HTTP 429 Wait for the application/provider rate-limit window and inspect configured quotas; avoid repeated retries

See First-run setup, Configuration and Upgrades and maintenance.

Cloudflare and reverse proxy

Symptom Check / action
Cloudflare 502 Test the private backend; check tunnel service URL, Docker network and port
Tunnel unavailable / 1033 Check connector health, token, outbound firewall connectivity and hostname route
Connector in Docker cannot reach 127.0.0.1:5152 Use http://mealf:5152 on the shared network, or http://aircooker:8080 for source Compose
All clients share address-based limits Confirm proxy peer/header trust; do not set universal trusted proxies
HTML loads but API calls return a login/challenge page Inspect Cloudflare Access/WAF policy and ensure legitimate app/API requests can complete
Private or stale content appears through the edge Bypass cache for the Mealf hostname and remove conflicting Cache Everything/rewriting rules
HTTP 413 / large restore rejected Check both application route limits and the proxy/Cloudflare plan ceiling; ZIP allows up to 280 MiB in the backend

See Cloudflare Tunnel and HTTPS and reverse proxy.

PWA, offline data and synchronisation

Symptom Check / action
Install option missing Open /app/ on valid HTTPS in a supported browser; on iPhone use Safari → Add to Home Screen
Old PWA after image update Finish edits, accept the update prompt and reopen; do not clear pending local work
A photo is unavailable offline It may not have been viewed/cached before disconnection
Pending work will not sync Sign in, return to foreground and inspect rejected work; export unsynchronised work before recovery
Server history changed after restore Preserve local exports and use explicit history recovery; old queues must not drain blindly
Browser data disappeared Storage may have been evicted/cleared; restore only from surviving server/device exports and backups

Signing out does not erase cached work, but clearing site data or uninstalling may. Browser recovery JSON is for inspection/manual reconstruction and is different from the server's importable household JSON/ZIP. See PWA and offline use.

Imports, Bring! and reminders

Symptom Check / action
AI media controls are missing Check whether your deployed image includes the source feature; a Wiki page does not update an image
AI says not configured despite environment values A saved disabled/profile setting overrides AI environment settings
Unsupported AI input format Enable it only for a model/API that supports that exact input contract
AI key rejected or model not found Verify provider, endpoint, exact model ID, account access, API billing and key restrictions
AI configuration changed during a queued import Review the new destination/model and give renewed consent
Import needs input / invalid extraction Correct missing facts manually; private sources and unsupported social captions are not bypassed
Bring! login works but writes stay disabled Check the genuine current compatibility report matching SDK and selected test list
Reconciliation is queued but list unchanged Inspect completed/failed job status and ownership/pantry/week rules; queuing is not an external-write receipt
Reminder accepted but absent on device Check permission, installed-app support, Focus/connectivity, time zone and expiry; acceptance is not display proof
Importing a household export returns 409 Duplicate entity IDs reject the merge; destructive replacement is unsupported

See AI recipe import, Bring! integration, Meal reminders and Backup and recovery.

Information to include in an issue

Share the image tag/digest or source commit, CPU architecture, browser/OS version, redacted error code, approximate time and minimal reproduction steps with synthetic data. State whether private/public health works and whether it is a host or Docker connector. Exclude household recipes, credentials, tunnel tokens, cookies, signed URLs, setup tokens and private exports. Clearly distinguish synthetic validation from a live provider/device result.

Source: deployment, administration and the feature-specific guides linked above.

Adapted to this site’s installation · Updated 22 October 2026

Repository reference