Prerequisites
Before you begin, you’ll need:- A Linux server (cloud VM or bare metal) with SSH access and sudo privileges
- Ubuntu, Debian, or any systemd-based Linux distribution
- AMD64 (x86_64) or ARM64 (aarch64) architecture
- Your local machine (macOS, Linux, or Windows with WSL)
Uncloud installs Docker automatically during machine initialization if it’s not already present.
Install the CLI
Install Uncloud CLI
Install the Using curl (macOS/Linux):The install script downloads the latest binary and creates a convenient
uc command-line tool on your local machine.Using Homebrew (macOS/Linux):uc shortcut.Initialize your first machine
Initialize the cluster
Initialize your first machine and create a new cluster. Replace This command will:
root@your-server-ip with your server’s SSH connection string:- SSH into your server
- Install Docker (if not already installed)
- Install the
uncloudddaemon and Corrosion database - Set up WireGuard networking
- Deploy Caddy reverse proxy for HTTPS
- Reserve a cluster domain like
xuw3xd.cluster.uncloud.run
Wait for initialization
The initialization process takes 1-2 minutes. You’ll see progress messages as each step completes:
Deploy your first service
Now that you have a working cluster, let’s deploy a simple web application.Deploy from a Docker image
Deploy a container from a Docker image and expose it with HTTPS:This command:
- Pulls the
nginx:alpineimage - Starts a container on your machine
- Exposes container port 8000 as HTTPS on
app.example.com - Automatically configures Caddy for TLS termination
app.example.com with a domain you own.Configure DNS
Create a DNS A record in your DNS provider (Cloudflare, Namecheap, etc.) that points
app.example.com to your server’s public IP address.Allow a few minutes for DNS propagation, then visit https://app.example.com in your browser.Add a second machine
Scale your cluster by adding another machine.Add the machine
Add a second server to your cluster:The new machine will:
- Get provisioned with Uncloud
- Establish a WireGuard tunnel to your first machine
- Sync the cluster state via Corrosion
- Start running Caddy for load balancing
Verify both machines
List machines again:You should see both machines with their WireGuard network addresses and public IPs.
Deploy with Docker Compose
For more complex applications, use Docker Compose format.Create a compose.yaml file
Create a The
compose.yaml file with your service definition:x-ports field defines public HTTPS endpoints. The deploy.replicas field sets the number of containers.Deploy the stack
Deploy all services from the compose file:Uncloud will:
- Parse your compose file
- Schedule containers across available machines
- Set up service discovery (services can reach each other by name)
- Configure Caddy for public endpoints
- Perform rolling updates to avoid downtime
Services can communicate with each other using internal DNS names like
api.internal or db.internal. No need to configure networking manually.Clean up
When you’re done experimenting, clean up your resources.Next steps
Now that you’ve deployed your first application, explore more features:Docker Compose
Learn about Compose file format and extensions
Persistent storage
Run stateful services with volumes
Service discovery
Connect services using internal DNS
CLI reference
Explore all available commands
