Source: https://crabglamp.com/docs/app-vms/how-to/deploy-a-new-version
Last updated: 2026-06-11
Type: how-to

Deploying replaces the container your App serves with a new image, with no gap in availability. The App must be `running`.

## Steps

1. Push the new image to your registry under a new tag (for example `ghcr.io/acme/web:1.5.0`).
2. Open the App's detail page in the dashboard.
3. In the **Deploy** field, enter the new image reference.
4. Choose **Deploy**. The App moves to `deploying`.
5. Watch the deploy entry. CrabGlamp pulls the image, starts the new container alongside the old one, and runs the health check.
6. When the new container passes its health check, traffic swaps to it and the old container is removed. The App returns to `running` and the deploy is marked succeeded.

## If the deploy fails

If the new image cannot be pulled, or the new container fails its health check within the timeout, the swap never happens. The previous container keeps serving the whole time, the deploy is marked failed with an error message, and the App returns to `running` on the old image. Fix the image and deploy again.

## Re-pulling the same tag

If you push a new build to the **same** tag instead of a new one, choose **Redeploy current image** in the **Deploy** section. It re-pulls the current image reference and runs the same health-checked swap. Restart is different — it power-cycles the VM and starts the image already on disk, so it does not pull anything.

## Notes

- The health check is an HTTP 2xx on your configured health path, or a plain TCP connection if you did not set one.
- Environment variables and private-registry credentials are applied on each deploy — see [Set environment variables](/docs/app-vms/how-to/set-environment-variables).
- To return to an earlier image, see [Roll back a deploy](/docs/app-vms/how-to/roll-back-a-deploy).
