Skip to Content
Self HostingInstallation

Installation

These steps install the checked-in self-hosted VM console on one KVM host. They do not install the hosted image builder or establish a production Enterprise deployment.

1. Verify the Source

Check out the intended OpenFactory revision and review local changes before building containers:

git status --short git rev-parse HEAD

Use a reviewed release or commit. The Compose workflow builds images from the local cto-gui and cto-gui-libvirt-backend source trees.

2. Create Host Directories

sudo install -d -m 0755 /opt/openfactory/iso sudo install -d -m 0755 /var/lib/libvirt/images/.openfactory-golden

The paths are mounted read-only inside the backend for source artifacts. Guest disks and uploaded ISOs use /var/lib/libvirt/images.

3. Preflight KVM and Libvirt

test -e /dev/kvm test -S /var/run/libvirt/libvirt-sock virsh -c qemu:///system list --all docker compose version

Stop if any command fails. Fix the host service, group membership, or socket location before starting the containers.

4. Start the Console

Run this from the cto-gui directory:

docker compose -f docker-compose.self-hosted.yml up --build -d docker compose -f docker-compose.self-hosted.yml ps

Open http://localhost/ from the host. For a remote evaluation, restrict port 80 at the host firewall and use a trusted private path to the host.

5. Verify the Running Mode

Confirm the frontend loads, then inspect the backend mode response from the network path available in your deployment. It must report self_hosted: true. The feature map should show hosted builds, conversations, scheduling, and policy documents as unavailable.

Next, upload a disposable test ISO, create a small VM, open its VNC console, stop the VM, and delete it. Confirm the guest disk and libvirt domain are removed as expected before using larger images.

Rollback

Stop the evaluation without deleting its named volume:

docker compose -f docker-compose.self-hosted.yml down

This leaves uploaded images, libvirt resources, source directories, and the cto-data volume intact. Inventory those resources before any deletion. Do not use down --volumes unless you explicitly intend to destroy retained console state and cleanup journals.