heyer.systems

Use

Install

Create a container or VM – with the dialog, without a dialog, or with Docker.

Container or VM?

LXC containerVM
Scriptct.shvm.sh
Based onProxmox’s Debian 13 templatea ready-built, tested image of the app
Installationruns inside the container while it is createdalready in the image – the first boot only applies the instance settings
Resourceslightweightown kernel, more RAM
Best formost serviceskernel features, Docker in the guest, desktop

Both lead to the same result: the same packages, the same configuration, the same update. Which platforms an app offers is shown on its page.

With the dialog

On the Proxmox host as root:

bash -c "$(curl -fsSL https://iac.heyer.systems/<app>/ct.sh)"   # container
bash -c "$(curl -fsSL https://iac.heyer.systems/<app>/vm.sh)"   # VM

default takes the app’s default values, advanced asks for everything – including the modules and where the SSH keys come from (file, URL like https://git.example/<user>.keys, paste).

Without a dialog

With IAC_NONINTERACTIVE=1 the app’s defaults apply, plus every var_* you pass:

IAC_NONINTERACTIVE=1 var_net=192.168.40.20/24 var_gateway=192.168.40.1 \
  var_modules=node-exporter,unattended-upgrades \
  bash -c "$(curl -fsSL https://iac.heyer.systems/traefik/ct.sh)"

You do not have to write this by hand: the generator on every app page builds the command. All variables, grouped:

Guest

VariableMeaningDefault
var_idID of the guestnext free
var_hostnamehostnamename of the app
var_startstart after creating (1 / 0)1

Resources and storage

VariableMeaningDefault
var_cpuCPU coresapp’s value
var_ramRAM in MiB (at least 512)app’s value
var_diskdisk in GiBapp’s value
var_storageProxmox storage for the diskfirst suitable
var_template_storagestorage of the Debian template (LXC only)first suitable

Network

VariableMeaningDefault
var_bridgenetwork bridgevmbr0
var_vlanVLAN tagnone
var_netdhcp or a static address like 192.168.40.20/24dhcp
var_gatewaygateway for a static address–
var_nameserverDNS serverslike the host
var_searchdomainsearch domainlike the host
var_macMAC address of eth0, e.g. BC:24:11:12:34:56random

Modules, access and app settings

VariableMeaningDefault
var_modulesmodules, comma-separated ('' = none)the app’s preselection
var_ssh_keysfile, URL or key line/root/.ssh/authorized_keys of the host
var_<setting>settings of the app, e.g. var_db_host (LXC only so far)–

VM only

VariableMeaningDefault
var_image_versiona specific image versionlatest

Result as JSON

For automation, IAC_RESULT=/path/result.json writes the result as JSON at the end:

FieldContent
statusok or failed
kind, applxc or vm, and the app
id, hostname, nodethe guest and the Proxmox node it runs on
mac, ipnetwork addresses of the guest
modulesthe chosen modules
guest_existswhether the guest exists – it is kept after a failure
errorthe reason on failure
logpath to the log on the host
core_ref, app_refthe versions of iac-core and the app that were used

VM images

Every VM image is built automatically, started and checked in a test VM and only then published – on every change of the app and every Monday with the latest Debian packages. vm.sh downloads it with a SHA256 checksum and verifies it before the import. The disk grows to the chosen size when the guest is created.

You can also download an image by hand: https://iac.heyer.systems/<app>/image/latest and …/image/SHA256SUMS.

Docker

Apps with a Docker variant come with a simple docker-compose.yml:

mkdir -p /opt/traefik && cd /opt/traefik
curl -fsSL https://iac.heyer.systems/traefik/docker-compose.yml -o docker-compose.yml
docker compose up -d

Ports and settings go into a .env next to it (e.g. PORT_80=8081). Modules and update only exist in LXC and VM.

Test a branch

IAC_APP_REF=<branch> IAC_CORE_REF=<branch> bash -c "$(curl -fsSL https://iac.heyer.systems/<app>/ct.sh)"

IAC_APP_REF picks the state of the app, IAC_CORE_REF the one of iac-core.