Skip to main content
This guide walks you through installing orun, creating a manifest repository, provisioning a remote server as an orun node, and deploying your first container. By the end you will have a live workload reconciled automatically from Git.

Prerequisites

  • A Linux VPS or dedicated server you can reach over SSH
  • Git installed on your local machine
  • The orun binary installed locally (see Step 1)
1

Install the orun binary

Download the orun binary from the GitHub releases page and place it somewhere on your PATH.
Verify the installation:
2

Create a manifest repository

orun bootstrap must be run from the root of your manifest repository. Create one now.
The repository layout orun expects:
Push the repository to a remote before bootstrapping. The node needs a URL it can clone from — orun uses the origin remote of your manifest repository as the pull source.
3

Bootstrap your first node

Run orun bootstrap from the manifest repository root. With no arguments, it starts an interactive prompt:
orun asks a series of questions:
After you answer, orun writes nodes/web-01.yaml and proceeds to provision the server. During bootstrap it:
  1. Connects to the node over SSH using the configured key
  2. Detects or installs Docker
  3. Copies the orun binary to the node
  4. Creates and enables a systemd service
  5. Verifies the service is running
Once bootstrap completes, SSH access is no longer required. The node operates autonomously.
If you already have a node manifest from a previous bootstrap, pass it directly to skip the interactive prompt:
The node clones your manifest repository using the origin remote URL you provided. Make sure the node has read access — for a private GitHub repository, add a deploy key to the repo and place the corresponding private key on the node at the path orun start expects.
Commit and push the generated node manifest:
4

Deploy your first container

Create a Deployment manifest in deployments/hello-world.yaml:
This runs traefik/whoami, binds the container’s port 80 to host port 8080, and configures HTTP readiness and liveness checks.
5

Commit and push

Commit the manifest and push to the branch your node is tracking (main by default):
The node polls for changes every 5 seconds. Within a few seconds of your push, it pulls the new commit, starts the container, and begins health-checking it.
6

(Optional) Expose the container with a Service

To route HTTP/HTTPS traffic to your Deployment through the built-in Caddy ingress, create services/hello-world.yaml:
Point hello-world.example.com at your node’s IP address, then commit and push. Caddy provisions a TLS certificate automatically via ACME on the first request.
Set ssl: true only after your DNS record is live and propagated. Caddy performs an ACME HTTP-01 challenge on port 80 to provision the certificate.

What’s next

How it works

Understand the pull-based reconciliation loop in depth.

Node configuration

All Node manifest fields: SSH, Git, poll interval, data directory.

Deployment configuration

Ports, volumes, environment variables, and health checks.

SSL and ingress

Configure custom domains and automatic TLS for your services.