All use cases Read in docs
2× Mac mini + 2× Pi + 1× x86 box · cross-arch + cross-OS
Mixed Studio Cluster
Mac minis + Pis + maybe one x86 box. One registry, every architecture.
First deploy: ~1 hour from cold start
Why pick this shape
- Use the hardware you already have. Old desktop in the basement is a perfectly fine x86 worker.
- Apple Silicon for the dev-feeling control plane, Pis for cheap 24/7 services, x86 for amd64-only workloads.
- lib/cluster/buildx.sh produces multi-arch images so the right variant lands on each host.
Registry skeleton
Copy, replace IPs and ssh_user, point CADDY_REGISTRY_PATH at it.
hosts:
mini1:
ip: 192.168.1.10
arch: arm64-apple
roles: [infrastructure, vault, mlx_backends]
mini2:
ip: 192.168.1.11
arch: arm64-apple
roles: [databases, mlx_inference]
pi1:
ip: 192.168.1.51
arch: arm64-linux
roles: [workflows]
pi2:
arch: arm64-linux
roles: [app_services]
nuc1:
ip: 192.168.1.20
arch: amd64-linux
roles: [amd64_workloads]Bringing it up
./portoser registry validate # checks every arch field ./portoser cluster setup-buildx ./portoser cluster build --all ./portoser deploy mini1 dnsmasq caddy vault ./portoser cluster deploy --all ./portoser cluster health --watch
Common gotchas
- Hard-coded `--platform=linux/amd64` in a Dockerfile breaks arm64 nodes silently.
- Vendor images that are amd64-only must pin to your amd64 host or run under emulation.
- native works on both macOS (launchctl) and Linux (systemctl) via lib/platform/detector.sh.
Read the full Mixed Architecture walkthrough
Deeper version with more code, more gotchas, and links to operations docs.