Proxmox VM Manager — web UI for creating and tracking VMs with DHCP/DNS automation
6.4K
Web UI for creating and managing Proxmox VMs with cloud-init, automatic DHCP reservations, and DNS records.
VMs are created from cloud images (not ISO installers) — fully configured in ~3 minutes with SSH keys, passwordless sudo, and a fully updated system.
docker run -d \
--name makevms \
-p 8000:8000 \
-v proxmox-data:/data \
awkto/makevms:latest
Or with docker-compose:
services:
makevms:
image: awkto/makevms:latest
ports:
- "8000:8000"
volumes:
- proxmox-data:/data
restart: unless-stopped
volumes:
proxmox-data:
Access at http://localhost:8000
Everything persistent lives in /data (the Docker volume):
| Path | Contents |
|---|---|
/data/proxmox_web.db | SQLite database (VMs, jobs, settings) |
/data/id_proxmox_web | SSH private key for Proxmox access |
/data/id_proxmox_web.pub | Proxmox SSH public key |
/data/id_vm_access | SSH keypair injected into new VMs (console access) |
/data/aliases/ | Custom shell scripts injected into VMs at creation |
/data/distros.csv | Distro list — add rows to register custom images |
MakeVMs SSHes into your Proxmox host to run qm and pvesh commands. It needs a non-root user with passwordless sudo.
1. Generate a keypair in the app
Go to Settings → Proxmox Connection and click Generate Key. The public key is displayed in the Public Key field below.
2. Add the public key to Proxmox
ssh-copy-id -i /path/to/id_proxmox_web.pub youruser@proxmox-host
# or paste the key manually into ~/.ssh/authorized_keys on the Proxmox host
3. Configure settings
| Setting | Description |
|---|---|
| Proxmox Host | SSH hostname or IP of your Proxmox server |
| SSH User | User with passwordless sudo on Proxmox |
| SSH Key Path | Path to private key (default: /data/id_proxmox_web) |
| Disk Storage | ZFS/LVM-thin storage for VM disks (e.g. local-zfs) |
| Snippet Storage | dir-type storage for cloud-init files (e.g. local) |
| Snippet Path | Filesystem path on Proxmox (e.g. /var/lib/vz/snippets) |
Find your storage names with pvesm status on the Proxmox host.
The default distro list is seeded to /data/distros.csv on first startup. To add a custom image, append a row:
slug,label,url,filename,family,guest_agent_pkg
my-ubuntu,My Custom Ubuntu,https://example.com/custom.img,custom.img,debian,qemu-guest-agent
Fields:
family: debian, rhel, or suse — controls sudo group and package managerguest_agent_pkg: package name for qemu-guest-agent, or empty to skipfilename: local filename for the downloaded image; empty = auto-discovered from URLNew VMs receive SSH keys from two sources:
GITHUB_SSH_USER)/data/id_vm_access.pub key, if Console View Pubkey is enabled in Settings → VM User & SSHThe console access key enables password-free browser terminal access. It is auto-generated on startup.
From the Dashboard, click New VM. Options:
| Field | Description |
|---|---|
| Hostname | Short name — also sets the cloud-init hostname |
| Distro | Linux image to use |
| Cores / Memory / Disk | Compute resources |
| DHCP Reservation | Auto-allocate a static IP via Kea API |
| DNS Record | Create an A record via DNS wrapper API |
VM creation runs in the background (~3 minutes). Watch progress in the job log.
The browser terminal connects to your VM over SSH via a WebSocket bridge in the MakeVMs backend.
How it works:
/api/vms/{id}/consoleAuthentication: if Console View Pubkey is enabled, the app uses /data/id_vm_access (key auth, no password prompt). Otherwise it falls back to the VM password from Settings.
The console key must be present in the VM's authorized_keys. This happens automatically for VMs created with the toggle enabled — it is injected via cloud-init at creation time. Existing VMs need the key added manually:
cat /data/id_vm_access.pub | ssh user@vm-ip "cat >> ~/.ssh/authorized_keys"
Content type
Image
Digest
sha256:0a6b901af…
Size
75.9 MB
Last updated
8 months ago
docker pull awkto/makevms