slipway.yaml plus the framework-specific settings that
otherwise bite: host allow-lists, binding to 0.0.0.0, and where migrations go.
Next.js
Server-rendered Node, or a static export.
Django
Gunicorn, Postgres and migrations on every deploy.
Rails
Puma, Postgres and a Sidekiq worker.
Go
A compiled binary in a small runtime image.
FastAPI
Uvicorn, Postgres and autoscaling.
Express
Node, Postgres and Redis.
Static site
Astro, Vite or Hugo, served from the CDN.
Prebuilt image
Run an image from a public or private registry.
App with Postgres
Wire a managed database to any service.
Common to all of them
Bind to0.0.0.0. A server bound to 127.0.0.1 is unreachable from outside its own
container, which shows up as a deploy that never becomes healthy.
Allow slipway’s hostname. Django, Rails and Next.js all check the Host header and
return 403 for one they do not recognise. Pass ${service.<name>.host} into the setting each
framework uses.
Put migrations in preDeploy. They run in the freshly built image before the rollout,
and the deploy proceeds only if they succeed.
Use a disk or object storage for uploads. The container filesystem is lost on every
deploy.
If something does not come up, Troubleshooting is keyed on the
errors you actually see.