This is an old revision of the document!
VM Reactor
Virtual machines, containers and applications – one web interface for your Debian host.
KVM virtual machines, LXC system containers and Docker applications side by side: one list, one number for every guest, one place to start, watch, back up and protect them. Part of the Stratum project – your host remains Debian.
VM Reactor 0.05 – Technical Preview · Debian 13 (trixie) and Debian 14 (forky) · amd64 and arm64 · free software (GPL-3+) · package vm-reactor in the Stratum repository (component contrib)
Technical preview. VM Reactor is new and still changing: features, settings and the web interface may change from one version to the next. Try it, test it and tell us what you think – but keep backups of your guests and do not rely on it alone for production systems yet.
A contrib package of the Stratum repository. VM Reactor is published in the component contrib of the Stratum repository, next to the Stratum modules in main. It builds on Stratum – it needs stratum-init and works together with the Stratum modules – but it enjoys a certain independence from them: its own versions and release cycle, its own web interface, its own handbook and this page of its own.
Overview
VM Reactor turns a Debian computer into a host for guests. It manages virtual machines (KVM with libvirt), system containers (LXC) and applications (Docker compose projects) in one web interface with its own port – HTTPS, 8443 by default. Every guest has a number: the host is ID 0, the guests are 1, 2, 3 …, whatever their type. Each guest has exactly one configuration file (/etc/vm-reactor/guests/<id>.conf) and one directory in a storage – nothing is hidden in a database, and everything the web interface does can also be done on the command line with vm-reactor.
VM Reactor uses the tools Debian already has: libvirt and QEMU, LXC, Docker from Docker's repository (through stratum-docker), nftables and dnsmasq. It works together with the Stratum modules – firewall, security, WireGuard mesh, Ansible, support, telemetry – when they are installed.
stratum-zram in a type tuned for virtualization hosts, memory deduplication (KSM) with recommended settings and free page reporting of the virtual machines – more guests in the same RAM.
A look inside
Guests – machines, containers and applications in one list, one ID each.
A virtual machine – state, configuration and load charts.
The console in the browser – the shell of a container.
Network – the NAT network, bridges and the interfaces of the host.
More guests in the same memory – an advanced feature of VM Reactor. Memory compression keeps idle guest memory compressed in RAM (zram, typically 3:1 and more), and memory deduplication keeps identical memory pages of the virtual machines only once (KSM). VM Reactor sets both up with values recommended for a virtualization host and shows in real time how much RAM they save.
Memory compression – compressed swap in RAM, tuned for virtual machines and containers.
Memory deduplication – KSM with the settings recommended for a virtualization host, applied with one click.
Backups – one file per backup, scheduled jobs with retention.
Settings – the integrations with the Stratum modules.
Installation
What you need
| Item | Requirement |
|---|---|
| System | Debian 13 (trixie) or Debian 14 (forky), amd64 or arm64 – a physical computer or a virtual machine with nested virtualization |
| Virtualization | VT-x / AMD-V switched on in the firmware for KVM machines; without it, machines run emulated and slowly (containers and applications do not need it) |
| Stratum | stratum-init 0.40 or newer and the Stratum repository with the components main and contrib – see Stratum – quick setup |
| Memory and disk | Enough for the host and all guests; memory compression and deduplication help when it gets tight |
| Browser | Any current browser; the web interface uses HTTPS on port 8443 |
1. The Stratum repository
If Stratum is not installed yet, follow the quick setup first. VM Reactor is in the component contrib – check that the APT source has it:
grep Components /etc/apt/sources.list.d/stratum.sources # Components: main contrib
Sources written by older versions of stratum-archive-keyring have only main; installing the current stratum-archive-keyring (or stratum-init) adds contrib by itself.
2. Install the package
apt-get update apt-get install vm-reactor
APT brings everything VM Reactor needs from Debian – libvirt and QEMU, LXC, nftables, dnsmasq, noVNC – and recommends stratum-firewall, stratum-docker and stratum-zram. At the end, the installation prints the address of the web interface and where the first password is:
vm-reactor: first sign-in as user admin, password in /etc/vm-reactor/initial-admin-password
(change it in the web interface: Security - My account; then delete the file)
vm-reactor: web interface https://10.0.0.22:8443/
3. First sign-in
- Open the address in the browser (
vm-reactor urlprints it again). The certificate is created on the host and is not signed by an authority – the browser asks once whether to trust it. - Sign in as admin with the password from
/etc/vm-reactor/initial-admin-password. - In Users & security → My account set your own password and switch on two-factor sign-in (an authenticator app); then delete the file:
rm /etc/vm-reactor/initial-admin-password. - Look at the Overview: the warnings at the top tell you what is still missing (for example hardware virtualization or noVNC).
Docker applications need Docker from Docker's repository. If stratum-docker is installed, open Docker in the menu and let VM Reactor install it – or run stratum docker setup.
4. Your first guests
Create guest opens a wizard: choose the type, the name and the storage; a machine gets an ISO image, cores, memory and a disk, a container a system image, an application a compose file or a template. The guest appears in the list with the next free ID. By default it is in the NAT network and gets an address from the host's DHCP; publish ports to reach it from outside, or put it directly into your LAN.
Administration
Users and roles
Every role includes the rights of the ones before it. Users other than admins see only the guests in their scope (all, or a list of IDs).
| Role | May |
|---|---|
| viewer | see the guests of the scope: state, configuration, tasks |
| user | + start, shut down, stop, reboot and use the console |
| operator | + snapshots, backups and logs |
| manager | + create, change, clone and delete guests, Docker compose, disks, ISO images; restore and delete backups; schedules |
| admin | + the host: shell, storage, network, users, security, settings (always all guests) |
vm-reactor user add anna operator 3,4,7 # asks for the password vm-reactor user list vm-reactor user guests anna all vm-reactor user 2fa-off anna # lost phone: switch two-factor sign-in off vm-reactor user disable anna # sessions end at once
Securing the web interface
- Allowed networks (Users & security,
ALLOW_FROM): only these networks reach the web interface; VM Reactor refuses a change that would lock you out. - Sign-in limits: after
LOGIN_ATTEMPTSfailed sign-ins an address is blocked for 10 minutes; session timeout in minutes (SESSION_TIMEOUT). - stratum-security: the protected service
vm-reactor– fail2ban bans addresses with too many failed sign-ins. - stratum-firewall: VM Reactor writes its own rules (port
8443, DHCP and DNS of the NAT network, forwarding of the guests) to/etc/stratum/firewall.d/vm-reactor.rules. - Own certificate: replace
/etc/vm-reactor/tls/vm-reactor.crtandvm-reactor.keyand runsystemctl restart vm-reactor. Behind a reverse proxy on the same host,LOCAL_HTTP_PORToffers plain HTTP on127.0.0.1only. - Audit log: every sign-in and change is in
/var/log/vm-reactor/audit.log.
Network
| Network | What the guest gets |
|---|---|
NAT (bridge vmnat0, 10.10.10.0/24 by default) | a private address from the host's DHCP, names <name>.vm-reactor.lan; reachable from outside through published ports. Fixed addresses below the DHCP range. |
| Local network | its own address in your LAN (machines: macvtap, containers: macvlan) – the host itself cannot reach these guests |
| Bridge | a bridge on a network card (vmbrN) – guests are like computers next to the host; the change of /etc/network/interfaces must be confirmed, otherwise it is rolled back after 2 minutes |
| Internal bridge | a bridge without a network card – guests talk only to each other |
Every guest also has its own firewall (nftables on the bridge): policies, rules and protection against address spoofing. With stratum-wireguard the NAT network can be announced in the mesh – the other members then reach the guests directly; when several hosts share a mesh, give each one its own NAT network (the guests keep the host part of their address).
Storage
The storages are listed in /etc/vm-reactor/storage.conf – one line each: name, type, path, content (guests, ISO images, templates, backups):
local dir /var/lib/vm-reactor guests,iso,templates,backup thin lvmthin /var/lib/vm-reactor/storage/thin guests source=vmr-thin/data
Types: dir, xfs (reflink copies), nfs, zfs (zvols and data sets with quotas) and lvmthin. Add them in Storage; the web interface checks the tools and can format a new disk.
Backups and restore
vm-reactor backup 2 # guest 2, paused during the backup (default) vm-reactor backup 2 --mode stop # shut down, back up, start again vm-reactor restore /var/lib/vm-reactor/backup/<file> --id 12 # restore as guest 12
A backup is one file in the backup storage; it can be exported, copied to another host and imported there. Backups → Schedules runs backups by itself – on the days and at the time you choose, for all guests or a list, with a number of backups to keep.
Start, shutdown, watchdog
- Start with the host: guests with autostart start in their start order with delays (
vm-reactor-guests.service); at host shutdown they are shut down in reverse order, each with a timeout (SHUTDOWN_TIMEOUT). - Watchdog: every
WATCHDOG_INTERVALseconds it checks the components (libvirt, LXC, Docker, the NAT network, the firewall rules, the storages) and the guests. A guest that should run but stopped or crashed is started again when its option restart is on – at most three times an hour; a machine whose guest agent stops answering is reset. Withstratum-watchdog, VM Reactor itself is watched too. - Memory (advanced): Settings – Memory compression (stratum-zram with a type for VM hosts and the recommended kernel values for a hypervisor) and Memory deduplication (KSM with
ksmtuned; KSM belongs to the physical host – inside a virtual machineksmtuneddoes not start).
Stratum integrations
| Module | With VM Reactor |
|---|---|
| stratum-firewall | rules of the web interface, the NAT network and published ports |
| stratum-security | fail2ban protects the sign-in (jail vm-reactor) |
| stratum-wireguard | the NAT network is announced in the mesh; the members reach the guests |
| stratum-ansible | dynamic inventory of the machines and containers (vm-reactor inventory) |
| stratum-support | support sessions; vm-reactor report is part of the diagnostic report |
| stratum-database | guests may use the MariaDB server of the host |
| stratum-telemetry | numbers about the guests in the extended report (no names, no addresses) |
| stratum-zram, stratum-docker | memory compression for VM hosts; Docker for the applications |
Command line
vm-reactor list # all guests: ID, type, name, state, storage vm-reactor start 3 # also: shutdown, stop, reboot vm-reactor url # address of the web interface vm-reactor help # every command and switch systemctl status vm-reactor # the web interface and the API
Files
| Path | Contents |
|---|---|
/etc/vm-reactor/vm-reactor.conf | settings (port, allowed networks, sign-in limits, watchdog …) |
/etc/vm-reactor/guests/<id>.conf | one file per guest |
/etc/vm-reactor/storage.conf, network.conf, users.conf | storages, networks, users |
/etc/vm-reactor/tls/ | certificate of the web interface |
/var/lib/vm-reactor/ | guests, ISO images, templates, backups (storage local) |
/var/log/vm-reactor/ | audit.log and the logs of the tasks |
Updates
VM Reactor is updated with APT like every other package (apt-get upgrade). Restarting the web interface does not touch the guests – they keep running.
VM Reactor Handbook
The VM Reactor Handbook is in preparation. It will describe every page of the web interface, every setting and every command, with examples – in the same style as the Stratum Handbook. Until then, vm-reactor help and the hints in the web interface describe every option.