Skip to main content
Zenith Hosting deploys prebuilt container images. We do not build your source code during deployment, so you will need to publish a container image for each service Zenith will run.
If your project already publishes a maintained container image that can be pulled without authentication, skip this step and go straight to creating zenith-compose.yml.

1. Prepare an image

If you have a production Dockerfile, use that. Otherwise, follow Docker’s guide for your language or framework.

Build and share an image

Follow Docker’s introductory build, run, and publish tutorial.

Choose a framework guide

Find Docker’s containerisation guide for Node.js, Python, Go, Java, and other stacks.

Check the runtime

To be compatible with the Zenith platform, each container must:
  • Support linux/amd64 architecture
  • Read configuration/secrets from environment variables
  • Write logs to stdout and stderr
  • Listen on 0.0.0.0, not localhost
  • Store any persistent data in a documented directory
  • Start using only the container image, declared environment variables, and declared volumes
Do not copy .env files, private keys, registry credentials, or other secrets into the image. Secrets MUST only be supplied via environment variables.

2. Publish the image

Publish the image to a registry that allows anonymous pulls. For GitHub projects, GHCR is recommended. Docker Hub is also supported.

Publish to GHCR

Use GitHub Actions to build and publish an image to ghcr.io.

Publish to Docker Hub

Tag and push an image to a public Docker Hub repository.
New GHCR packages are private by default. Before continuing, follow GitHub’s package visibility guide to make the image public. GitHub warns that a public package cannot be made private again.

3. Record what Zenith needs

Before continuing, make sure you can pull the container image without signing into the registry. Note its version tag/immutable digest, listening port, any heath endpoint, required environment variables and persistent-data paths for the next steps.

Next: create zenith-compose.yml

Describe the services that Zenith should run.