All use cases Read in docs
1 machine · macOS or Linux · 8–32 GB RAM
Solo Laptop or Mac mini
One machine. All three deployment types. The shape that grows.
First deploy: ~5 minutes
Why pick this shape
- No networking surprises — localhost is your cluster.
- Mix `docker`, `local` (Python via uv), and `native` (launchd / systemd) on the same host.
- The same registry.yml that runs your laptop today scales to 5+ machines later without rewrites.
Registry skeleton
Copy, replace IPs and ssh_user, point CADDY_REGISTRY_PATH at it.
domain: internal
hosts:
laptop:
ip: 127.0.0.1
arch: arm64-apple
ssh_user: <your-user>
path: <repo-base-path>
roles: [everything]
services:
notes-api:
hostname: notes.internal
current_host: laptop
deployment_type: docker
docker_compose: /notes-api/docker-compose.yml
port: 8400
notes-worker:
hostname: notes-worker.internal
current_host: laptop
deployment_type: local
service_file: /notes_worker/service.yml
port: 9001Bringing it up
docker compose up # the demo, on port 8080 ./portoser registry validate ./portoser deploy laptop notes-api notes-worker ./portoser health check-all
Common gotchas
- macOS ships Bash 3.2 — install Bash 5 via Homebrew before running the CLI.
- Even on a single host, Portoser uses SSH (to localhost). Make sure passwordless local SSH works.
- A single-host setup has no failover. When the laptop sleeps, the cluster sleeps.
Read the full Solo Laptop walkthrough
Deeper version with more code, more gotchas, and links to operations docs.