Deploying a service
Deploy from Git, a container image or a template.
From Git
Connect a repository and Pyo builds it on one of your builders.
- Zero config: with no DockerfileA file in your repository with the steps to build your code into a container image. or Containerfile, Pyo detects your framework and builds it.
- Static sites: plain HTML or a built frontend, like Vite or Astro. See Static sites.
- Dockerfile or Containerfile: if you have one, Pyo uses it. If you have both, it uses the Dockerfile. You can set the Dockerfile path, the build contextThe folder whose files are sent to the build. Paths in your Dockerfile are read from there. and build argumentsValues passed in at build time, which your Dockerfile reads with ARG..
Deploy on every push
Connect GitHub, and each push to a service's branch deploys it. This works for private repositories too. You can turn it off per service.
From a container image
Run any image by name, such as ghcr.io/acme/api:1.2. For private images, save a registry login first.
From Docker Compose
Import a Compose file as a project, with a service for each Compose service. See Importing Docker Compose.
From a template
Pick a template and Pyo fills in the defaults. See Deploying a template.
From another platform
Bring your services over from Coolify or Dokploy, with their variables, domains and databases. See Importing from another platform.
Build machines
Git builds run on a builder. A builder runs on a server in your cluster or on a dedicated build server.
Cancel or retry
On the service's Deployments tab, you can cancel a running deployment or retry a failed one from its row.
Health checks
A health check tells Pyo when a new version is ready. It can be an HTTP path, a TCP port or a command. Traffic only moves to the new version once the check passes. With None, deploys don't wait for it to be ready.
For a service from Git, Pyo picks the check until you change it. A static site gets a check of /.
A service's addresses
A service's Overview shows where it can be reached:
- Public: its servers' public addresses. Point a domain's DNS at one of these.
- Tailscale: its servers' Tailscale addresses, for devices on your tailnetYour private Tailscale network. Only devices you've added to it can reach addresses on it..
- Internal: the name other services in the project use to reach it, like
api:8080.
Choose +N to see them all, including the longer internal name for services in other projects.