F hands out the editor's page and bundle (editor/ beside main.mjs, or
FILIUS_EDITOR_DIR): GET and HEAD only, one wall against leaving the folder,
F's own routes first, assets/ cached a year, the rest asked for again; the
build lays .br and .gz beside the files and F sends the better one the
browser takes (bundle 695 KB to 212 KB).
deploy/Dockerfile: two stages, Node 24, no node_modules, not root.
deploy/docker-compose.yml with an env file per environment: the file sets
the stack's name, volume, image tag and port (test 8081, production 8080).
Measured with both stacks side by side behind nginx and Chromium.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
One server block for both names, the stack picked by host: test on :8081,
production on :8080. WebSockets with Upgrade and 3600 s, /blobs above F's
16 MiB so that F refuses a too large file itself (with CORS), no add_header.
The LXC address is a placeholder that stops openresty -t. Checked with nginx
in front of two real F instances.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>