At a glance
This guide adds to the application from Deploy a Django application:Environment variables
This guide adds no environment variables. The deploy guide lists the variables the project needs.Before you begin
- A Django project deployed on Sevalla, as in Deploy Django.
Add the endpoints
The probes call the instance directly, without your domain in theHost header, so a normal view would fail Django’s ALLOWED_HOSTS check with 400 Bad Request. Answer the probes in a middleware that runs before anything reads the host:
storefront/health.py
MIDDLEWARE in storefront/settings.py:
storefront/settings.py
/healthzreturns200when the database accepts a connection and503when it doesn’t. Use it for readiness: an instance that can’t reach the database gets no traffic./livezreturns200whenever Django runs. Use it for liveness, so that a database outage doesn’t restart every instance.
/healthz for each service the application can’t work without, such as cache.get("health") for a Redis cache. Commit and push the changes, and wait for the deployment to finish before you turn on the probes.
Turn on the health checks
1
Open the web process
On the application’s Processes tab, click ⋯ on the Web process, then click Update process.
2
Turn on the readiness probe
Under Health checks, turn on Readiness probe and set the Path to
/healthz. Keep the Port at the web process’s port, 8080 unless you changed it.3
Turn on the liveness probe
Turn on Liveness probe, set the Path to
/livez, and set the Initial delay to 10 seconds, so a slow start doesn’t count as a failure.4
Save and deploy
Click Update process, then click Deploy in the undeployed changes bar at the bottom of the page.


200 to 399 within the timeout (1 second by default). Ingot’s Gunicorn settings give each worker process 4 threads, so a slow page doesn’t hold up the probes. Only the web process has health checks. See Health checks for every probe setting and its default.
Verify
- Request the endpoints through your domain:
curl -i https://storefront-x7k2m.sevalla.app/healthzreturns status200with the bodyOK, and so does/livez. The middleware answers before the host check, so the probes get the same answer when they call the instance by its IP address. - On the Deployments tab, the deployment that turned on the probes reaches Deployed.
APP_ID and WEB_ID from Deploy with the API for Get process (getProcessV3):
200, and that the Port matches the port Gunicorn listens on.
Deploy with the API
This sequence turns on the probes of the application from Deploy with the API and continues in its shell, withAPI, APP_ID and WEB_ID set. Push the code changes from Add the endpoints first, and let that deployment finish. Each step names the CLI command and the Sevalla MCP server tool that do the same.
1
Turn on the probes
Update process (It prints
updateProcessV3) sets both probes with the dashboard’s defaults. Send timeoutSeconds: a probe set through the API without it gets 120 seconds, not the dashboard’s 1:{"readiness":1,"liveness":1}. Use the web process’s port if you changed it from 8080. CLI: not available, sevalla apps processes update has no probe options. MCP: sevalla_api_update with updateProcessV3 and the same body.2
Deploy
Trigger deployment (CLI:
triggerDeploymentV3). The probes apply from this deployment:sevalla apps deployments trigger "$APP_ID". MCP: trigger_deployment.3
Wait for the deployment
Get deployment (CLI:
getDeploymentV3) reports the status, which ends as success, failed, cancelled or skipped. The loop keeps polling through a failed request, for up to 30 minutes:sevalla apps deployments get "$DEPLOYMENT_ID" --app-id "$APP_ID". MCP: get_deployment.