DocumentationReference

Rust · 0.1.0

Troubleshooting

Start with the failing layer and collect a useful, redacted report.

The process will not start

Check the logs, the selected port, directory ownership and database connectivity. Native and container ports differ by default. A malformed /etc/secrets resource can prevent startup, as can a failed migration. Do not delete the database or force its schema version to make the error disappear. Preserve a copy before investigating.

Pages work but an action fails

For sign-in, check the external origin, HTTPS, cookies and provider callback configuration. For uploads, check application and proxy size limits plus storage credentials. For missing notes, clear filters and check account, space and archive state. For an unavailable error, inspect database capacity and retry only when safe.

An integration fails

Confirm the request targets the application origin rather than the landing website. Check token expiry/revocation and the operation's resource names. Webhook receivers must return valid JSON with an acceptable response, not only an empty success status. MCP clients must support Streamable HTTP and discover this server's actual tools.

A useful report

Include the source/build version, deployment method, timestamp, redacted error, steps to reproduce and expected result. Remove tokens, cookies, database strings, provider keys and private note content. Say whether the failure reproduces locally or only through the proxy. A browser screenshot alone may miss a server-side error.

A concrete first diagnostic pass

For the default local Docker setup, collect state, recent logs and a direct health response before changing configuration. An exited container needs its startup log; a running container with connection refused needs port/bind inspection; a healthy direct endpoint with a failing public endpoint points you toward the proxy path. Logs may contain user-controlled text, so redact before sharing. Do not paste a full docker inspect dump because its environment can include secrets.

docker inspect memos --format 'status={{.State.Status}} exit={{.State.ExitCode}}'
docker port memos
docker logs --since 10m --tail 100 memos
curl --verbose --max-time 10 http://127.0.0.1:5230/healthz

Use the error to choose the next test

Test only the failing layer and preserve the original data. For API errors, read both HTTP status and the returned structured error; a 404 can also hide an inaccessible resource. Record a redacted error rather than turning off access checks.

SymptomNext check
401 / unauthenticatedToken header, expiry and revocation; browser session if using the UI
403 / permission deniedCorrect account, memo visibility, space membership and deployment policy
413 / oversized inputInstance upload limit, proxy body limit and transcription-specific limits
FAILED_PRECONDITION when saving settingsMounted file owns that setting group; edit/restart through deployment workflow
SQLite quickCheck is not okStop the restore rehearsal; preserve backup and investigate an isolated copy
Webhook returned success status but failed deliveryReturn valid JSON, with numeric code 0 when present, not an empty 204