Запуск і верифікація
Operate self-hosted VM console as privileged component of KVM host. Container health alone insufficient: verify path from browser to API to libvirt to guest.
Startup check
docker compose -f docker-compose.self-hosted.yml ps
docker compose -f docker-compose.self-hosted.yml logs --tail=200 backend frontend
virsh -c qemu:///system list --allThen confirm UI loads and backend mode response reports self-hosted mode. Review feature map rather than assuming hosted feature present.
End-to-end smoke test
Use disposable, licensed test ISO:
- upload ISO and verify displayed size and name;
- create small VM with explicit CPU, memory, disk, and network choices;
- start it and open VNC console;
- confirm boot progress visible and keyboard input reaches guest;
- stop VM;
- delete it and confirm domain, overlays, and temporary NVRAM cleaned;
- restart backend and confirm no stale replacement launch blocked.
Do not interpret successful boot as hardware certification, application correctness, patch compliance, or proof installer completed.
Operational signals
Monitor at least:
- frontend and API reachability;
- backend libvirt connectivity;
- free host memory and disk space;
- failed uploads and guest-launch errors;
- guest domains, overlays, NVRAM, and network inventory;
- persistent cleanup journal under
TEST_STORAGE_DIR; - container restart loops and backend exceptions.
Evaluation Compose file does not configure external alerting system.
Common failures
| Symptom | Check |
|---|---|
/dev/kvm permission denied | Host group membership and device mapping; do not make the device world-writable |
| Cannot connect to libvirt | Daemon status, socket path, KVM_URI, and container mount |
| Upload rejected | File type, free space, image-directory permissions, and the configured size limit |
| Guest cannot open source image | Host/container absolute-path identity and read permission |
| VNC disconnects | Guest state, libvirt graphics endpoint, proxy path, and browser console diagnostics |
| Replacement launch remains blocked | Persisted cleanup journal, stale domain/overlay/NVRAM resources, and backend logs |
Shutdown
Stop or delete disposable guests in UI before stopping stack. Then run:
docker compose -f docker-compose.self-hosted.yml downInventory libvirt domains, images, networks, and named volume afterward. Stopping containers does not automatically remove every host-owned resource.