Skip to content

Getting started

Quick start

Write a first spec for a two-machine environment, validate it and see where it can run.

This walks through a small environment: a web application and its database, on one network.

1. Write the spec

Isoloom reads isoloom.yml at the root of a project (isoloom.yaml works too). Create it:

version: 1
name: invoice-portal

networks:
  app: { cidr: 10.20.0.0/24 }

machines:
  database:
    networks: { app: 32 }
    services: [{ port: 5432, name: postgres }]
    docker: { image: "postgres:16" }
    vm: { os: debian-12, provision: [provision/database.sh] }

  web:
    networks: { app: 31 }
    services: [{ port: 8080, http: true }]
    depends_on: [database]
    docker: { build: build/web }
    vm: { os: debian-12, provision: [provision/web.sh] }

checks:
  - checks/portal-answers.sh

Each machine sits on the app network at a fixed address (.31 and .32). Each has two implementations: a container and a Debian VM. web waits for database to answer before it starts.

2. Validate it

isoloom validate
✓ invoice-portal is valid

When something is wrong, Isoloom names the exact field and says what to do:

✗ machines.web.depends_on[0]: no machine named `databse`
✗ machines.web.vm.provision[0]: `provision/web.sh` doesn't exist in the project folder
2 problems

3. See where it can run

isoloom targets
✓ docker
✓ hosted
✓ cloud-docker
✓ vagrant
✓ proxmox
✓ cloud-vm
✓ ludus

Both machines have both implementations, so every target is possible. Remove the docker: line from database and the three Docker targets disappear, with the reason:

✗ docker (needs `docker:` on database)

4. Size it

isoloom resources
2 machines · 2 CPUs · 2.0 GB memory · 40 GB disk (as VMs)

Next