Prod
The API behind your own backend. Health checks and packing logs on, and nothing else: no interactive docs,
no web UI, no /_debug, no accounts and no database.
This is what most deployments should be. Your server calls Binacle.Net, so it does not need users or JWT auth, and every surface you do not switch on is one you do not have to defend. If callers you do not control reach the API directly, use Service instead.
π οΈ Prerequisites
- Docker
- Docker Compose (included with Docker Desktop)
π₯ Download the following files
docker-compose.ymlPresets.jsonForwardedHeaders.json- only if you run behind a proxyOpenTelemetry.Production.json- only if you send traces somewhere
The last two are mounted behind comments in the compose file. Download them if you uncomment their mount.
π Run it
docker compose up -d
The API answers on http://localhost:8080, and http://localhost:8080/_health reports whether it is up. There
is no browsable documentation in this configuration by design - the API pages
cover the endpoints.
βοΈ Change this first
Presets.json is your bin set. The shipped file is an example. Replacing it with your own boxes, lockers
or pallets is the first thing an integrator does, and until you do the answers describe someone elseβs
packaging.
π Behind a proxy, a load balancer or a CDN
Uncomment the ForwardedHeaders.json mount in docker-compose.yml and edit that file.
Without it the app treats your proxy as the caller. Nothing crashes, which is what makes it worth calling out: health check IP restrictions match the proxy instead of the real client, rate limiting puts every caller in one bucket, and every log line records your proxyβs address.
TrustPrivateNetworks is on by default and already covers 10.0.0.0/8, 172.16.0.0/12 and
192.168.0.0/16, so in a normal container deployment you only need to set Enabled.
If a CDN sits in front, set ForwardedForHeaderName to the header it sends - CF-Connecting-IP for
Cloudflare, X-Real-IP for many nginx setups, X-Azure-ClientIP for Azure Front Door.
The full settings are on the Forwarded Headers page.
π‘ Observability
Uncomment the OpenTelemetry.Production.json mount and edit the endpoint. The commented aspire-dashboard
service at the bottom of docker-compose.yml is the quickest thing to point it at while you are setting it up;
replace it with your real collector. Azure Monitor is the other exporter, in the same file.
See OpenTelemetry for every setting.
πΎ It is not stateless
Packing logs are written to /app/data, which is why there is a volume. Keep it, or the logs go when the
container does.
PackingLogs__RetentionDays deletes files older than N days once a day; leaving it unset keeps everything
forever, which fills a disk eventually. See Packing Logs.
π Additional Resources
Happy packing! π¦β¨