HomeDocs › Bare-Metal Deployment

Bare-Metal Deployment

There are no Ansible playbooks and no systemd-native / .deb / .rpm package install path in this repo today. A “Bare metal / VM (Ansible)” option appears as 📋 Planned in the README deployment table, but it is not implemented — do not expect playbooks under ansible/ or playbooks/ (there are none). The single GET /api/v1/ansible/inventory endpoint in the codebase is an Ansible dynamic-inventory source for consuming SpatiumDDI data, not an installer.

If you want SpatiumDDI running on a physical machine or a plain VM, you have three real, supported paths today. Pick by how much of the OS you want to own:

Path What you manage Start here
Docker Compose on a host/VM Your own OS + Docker; SpatiumDDI runs in containers DOCKER.md
HA PostgreSQL (Patroni) under Compose Same, plus a 3-node Patroni cluster for the database § HA PostgreSQL below
OS appliance image (true bare-metal-OS install) Nothing — boot the image, configure via web UI APPLIANCE.md

The OS appliance is the supported bare-metal-OS path: a bootable Debian 13 image with k3s and the full SpatiumDDI stack pre-baked, installed straight onto the disk with no prior OS or container-runtime setup.


1. Docker Compose on a bare-metal host or VM

This is the canonical way to run SpatiumDDI on a machine you already own. Install Docker Engine + Compose v2 on your host (any Linux distro Docker supports), then follow the standard Compose guide:

Everything in that guide applies unchanged on bare metal — the only difference from a cloud host is that you provide the box. The DNS and DHCP service containers are opt-in via Compose profiles (COMPOSE_PROFILES=dns,dhcp docker compose up -d), which is useful on bare metal where you may want the host’s real NIC bound to a DHCP server.


2. HA PostgreSQL (Patroni) under Docker Compose

For a single-host stack the bundled postgres service is enough. If you want the database to survive a node failure on a bare-metal/VM deployment, the repo ships a reference Patroni overlay:

It is meant to replace the single postgres service in the base docker-compose.yml, layered on as a second Compose file:

docker compose -f docker-compose.yml -f k8s/ha/postgres-docker-compose.yaml up -d

Notes before you use it:

This is the same Patroni reference called out as Topology 4 — HA control plane in TOPOLOGIES.md, which has the full HA picture (Patroni + Redis Sentinel + API hosts behind a load balancer). If you are on the OS appliance instead, HA PostgreSQL is provided automatically via CloudNativePG when you promote control-plane members — you do not run Patroni there.


3. OS appliance — the supported bare-metal-OS install

If you want SpatiumDDI to own the whole machine (no host OS to maintain, no Docker to install), use the OS appliance image. It is a bootable Debian 13 image that installs straight onto bare-metal disk and runs the full stack on embedded k3s, configured entirely from the web UI and the dedicated /appliance management hub.

Build a local ISO with make appliance-dev-iso.


Where to go next