Why is the home page at / and not /home/?
A top-level page named home is special. Its URL is /. Every other page gets its URL from its own name plus its parents' names, so a page called faq under docs lives at /docs/faq/.
Why do I need a DNS record for www?
The nginx service's traefik router rule in docker-compose.yml answers for the bare domain, the www version, and URL2, and requests a certificate that covers both the bare domain and www. If the www name has no DNS record, Let's Encrypt's validation fails on it and no certificate is issued. Traefik falls back to its default self-signed certificate, with no obvious error except in its logs. Either create both DNS records, or drop the www host clause from the rule for a single-domain deployment.
Does the site need Redis?
Yes, for now. Redis is the default cache, and every page served through the slug system logs the request to Redis first. If Redis isn't running, those pages fail with a server error. Rate limiting and page-view analytics skip Redis errors, but the request logging doesn't, so Redis has to be running.
Note: a change to let pages load when Redis is down is being worked on, so this answer may change.
Why can't I create a docs page?
Creating and editing docs pages is staff-only. A code comment in main/views/wiki.py explains why: when these views only needed a login, any signed-in account could create unlimited pages and URLs, and every edit writes a history row, which is enough to fill the server. Page creation and editing are also rate-limited to 20 form submissions per minute per IP address.
How does a page name become its URL?
The name is turned into a URL-friendly form: lowercase, spaces become hyphens, and most punctuation is dropped. The page is then placed under its parent. A page named "Template Reference" under Docs lives at /docs/template-reference/. This happens when a page is created or edited. The wiki views do this conversion themselves, because a regular slug's save() only lowercases the name.
Why is the app using SQLite when I set up Postgres?
One of DB_NAME, DB_USER, DB_PASSWORD, or DB_HOST is blank. If DB_ENGINE is set to a non-SQLite engine but any of those four is empty, the app prints a "falling back to local SQLite database" message at startup and uses SQLite instead. Check the startup log for that line, then fill in the missing values in .env. If DB_ENGINE isn't set at all, SQLite is the default and no message is printed.
Why do I get "Could not connect to FerretDB"?
The app couldn't reach FerretDB within 5 seconds. Either the FerretDB service isn't running, or MONGODB_URI is wrong. By default it is mongodb://ferretdb:27017/, where ferretdb is the service name in docker-compose.yml, so outside Docker you need to point it at a FerretDB you can reach. FerretDB logs in with the same DB_USER and DB_PASSWORD as Postgres, so there are no separate Mongo credentials to set.
Why is a migration in the container but not in git?
The web container doesn't mount the project folder from your machine. The code is copied into the image when it's built, so any file created inside the container, including a migration made with makemigrations, stays there. Generate migrations on your own machine, commit them, then rebuild the image.
Contents
- Why is the home page at / and not /home/?
- Why do I need a DNS record for www?
- Does the site need Redis?
- Why can't I create a docs page?
- How does a page name become its URL?
- Why is the app using SQLite when I set up Postgres?
- Why do I get "Could not connect to FerretDB"?
- Why is a migration in the container but not in git?
Pages Here
No sub-pages yet.
Page Info
Wiki: Docs
Created on Nov 2, 2026 by Marissa Swing
Maintainers
| Editor | Last Activity |
|---|---|
| Marissa Swing creator | Nov 2, 2026 |