Files
Depl0y-Custom/docs/CLOUD_IMAGES_GUIDE.md
T
Alphaeus Mote be6d358086 Initial Commit
2025-11-19 08:09:34 -05:00

706 lines
20 KiB
Markdown

# Cloud Images - Complete Guide
## Table of Contents
1. [What Are Cloud Images?](#what-are-cloud-images)
2. [Why Use Cloud Images?](#why-use-cloud-images)
3. [One-Time Setup](#one-time-setup)
4. [How to Use Cloud Images](#how-to-use-cloud-images)
5. [Available Cloud Images](#available-cloud-images)
6. [How It Works (Technical)](#how-it-works-technical)
7. [Troubleshooting](#troubleshooting)
8. [FAQ](#faq)
---
## What Are Cloud Images?
Cloud images are pre-configured, ready-to-deploy operating system disk images. Instead of manually installing an OS (which takes 15-20 minutes), cloud images allow you to:
- **Deploy VMs in 30 seconds** (after initial template creation)
- **Automatically configure credentials** (username/password)
- **Auto-configure networking** (DHCP or static IP)
- **Skip manual OS installation** completely
Think of it like cloning a pre-installed OS with your custom settings applied automatically.
---
## Why Use Cloud Images?
### Traditional ISO Installation:
- Upload ISO file (~1GB download)
- Create VM
- Boot from ISO
- Click through installation wizard
- Wait 15-20 minutes
- **Total time: 20-30 minutes per VM**
### Cloud Image Installation:
- Select cloud image
- Configure CPU, RAM, disk, credentials
- Click "Create VM"
- **First time: 5-10 minutes** (creates reusable template)
- **Every time after: 30 seconds** ⚡
**100x faster after the first deployment!**
---
## One-Time Setup
Cloud images require SSH access to your Proxmox server for initial template creation. This is a **ONE-TIME** setup that takes about 1 minute.
### Step 1: Check if Setup is Needed
Open Depl0y web UI and go to **Settings** page. Look for the "Cloud Image Setup" section:
- **Green box (✅)**: Setup already complete! You're good to go.
- **Yellow box (⚠️)**: Setup required. Continue to Step 2.
### Step 2: Run the Setup Script
The setup script is already on your Depl0y server at `/tmp/enable_cloud_images.sh`.
**⚠️ IMPORTANT: Run this script ON YOUR DEPL0Y SERVER (not on Proxmox!)**
The script is located on your Depl0y server at `/tmp/enable_cloud_images.sh`. It will automatically connect to Proxmox to set up SSH access.
**Method 1: Copy from Web UI (Recommended)**
1. In the Settings page, click the **"Copy"** button next to the setup command
2. SSH into your **Depl0y server** (the server where Depl0y is installed):
```bash
ssh administrator@your-depl0y-server
# Or: ssh administrator@deploy
```
3. Paste and run the command:
```bash
sudo /tmp/enable_cloud_images.sh
```
**Method 2: Manual Command**
If you're already logged into your Depl0y server, just run:
```bash
sudo /tmp/enable_cloud_images.sh
```
**What Happens:**
1. Script runs **on Depl0y server** (where you run the command)
2. Generates SSH keys **on Depl0y server**
3. Prompts you for **Proxmox root password**
4. Uses SSH to copy the key **from Depl0y to Proxmox**
5. Verifies connection works
### Step 3: Enter Proxmox Password
The script will prompt you:
```
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Please enter the ROOT PASSWORD for Proxmox server: pve.agit8or.net
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Password:
```
**Enter your Proxmox root password** (the password will not be displayed as you type for security).
### Step 4: Wait for Completion
The script will:
1. ✓ Check if `sshpass` is installed (installs if needed)
2. ✓ Generate SSH key pair (if not exists)
3. ✓ Copy SSH public key to Proxmox
4. ✓ Verify SSH connection works
You'll see:
```
╔════════════════════════════════════════════════════════════╗
║ ✅ SUCCESS! ║
╚════════════════════════════════════════════════════════════╝
Cloud images are now fully configured!
🎉 What happens now:
• Go to the web UI and create a VM
• Select any cloud image (Ubuntu, Debian, etc.)
• Click 'Create VM'
• The system will automatically:
- Download the cloud image to Proxmox (first time only)
- Create a bootable template (first time only)
- Clone and deploy your VM with your credentials
- Start the VM ready to use!
First deployment per cloud image: ~5-10 minutes
All subsequent deployments: ~30 seconds
✨ Everything is automatic from now on!
```
### Step 5: Verify in Web UI
1. Go back to **Settings** page in Depl0y web UI
2. Click **"Re-check Status"** button
3. You should see a **green success box**: "Cloud Images Enabled! ✅"
**Setup is complete!** You never have to do this again.
---
## How to Use Cloud Images
### Creating Your First Cloud Image VM
1. **Go to Create VM Page**
- Click "Create VM" in the navigation menu
2. **Basic Configuration**
- **Name**: Enter a name for your VM (e.g., "ubuntu-web-01")
- **Datacenter**: Select your Proxmox datacenter
- **Node**: Select which Proxmox node to deploy on
3. **Installation Method**
- Select **"Cloud Image (Fast)"**
- Choose a cloud image from the dropdown:
- Ubuntu 24.04 LTS
- Ubuntu 22.04 LTS
- Ubuntu 20.04 LTS
- Debian 12
- Debian 11
4. **Resources**
- **CPU Cores**: 2 (or more)
- **Memory (RAM)**: 2048 MB (or more)
- **Disk Size**: 20 GB (or more)
5. **Storage & Network**
- **Storage Pool**: Select where to store the VM disk
- **Network Bridge**: Select network (usually vmbr0)
6. **Cloud-Init Configuration**
- **Username**: Your desired username (e.g., "admin", "ubuntu")
- **Password**: Your desired password
- **SSH Public Key** (optional): Paste your SSH public key for key-based auth
- **IP Configuration**: Choose DHCP or Static IP
7. **Advanced Options** (optional)
- CPU Type
- BIOS (SeaBIOS or UEFI)
- VGA Type
- Boot Order
8. **Click "Create VM"**
### What Happens Next?
**First Time Using This Cloud Image:**
- Status: "Setting up cloud image (first time - takes ~5 min)..."
- The system automatically:
1. Downloads the cloud image to Depl0y server (~300-700 MB)
2. Uploads it to Proxmox via SSH
3. Creates a VM template on Proxmox
4. Clones the template to create your VM
5. Configures cloud-init with your credentials
6. Starts the VM
**Time: 5-10 minutes** ⏱️
**Every Time After (Same Cloud Image):**
- Status: "Cloning template..."
- The system automatically:
1. Clones existing template (instant!)
2. Configures cloud-init with your credentials
3. Starts the VM
**Time: 30 seconds** ⚡
### Accessing Your VM
Once the VM is created and started:
**SSH Access:**
```bash
ssh username@vm-ip-address
```
**Console Access:**
- Click on the VM in Depl0y
- Click "Console" button
- Login with your configured username/password
---
## Available Cloud Images
### Ubuntu
| Image | Version | Use Case | LTS Until |
|-------|---------|----------|-----------|
| Ubuntu 24.04 LTS | Noble Numbat | Latest features | April 2029 |
| Ubuntu 22.04 LTS | Jammy Jellyfish | Stable production | April 2027 |
| Ubuntu 20.04 LTS | Focal Fossa | Legacy apps | April 2025 |
### Debian
| Image | Version | Use Case |
|-------|---------|----------|
| Debian 12 | Bookworm | Latest stable |
| Debian 11 | Bullseye | Previous stable |
**More cloud images can be added!** Contact your administrator or submit a feature request.
---
## How It Works (Technical)
### Architecture Overview
```
┌─────────────────┐
│ Depl0y Server │
│ │
│ 1. Downloads │──────┐
│ cloud image │ │
└─────────────────┘ │
│ SCP Upload
┌─────────────────┐
│ Proxmox Server │
│ │
│ 2. Import disk │
│ 3. Convert to │
│ template │
│ │
│ Template ID: │
│ 9001, 9002... │
└─────────────────┘
│ Clone via API
┌─────────────────┐
│ New VM │
│ + Cloud-init │
│ configured │
└─────────────────┘
```
### Template ID System
Cloud images are converted to Proxmox templates with predictable IDs:
- Template ID = `9000 + cloud_image_id`
- Ubuntu 24.04 (id=1) → Template 9001
- Ubuntu 22.04 (id=2) → Template 9002
- Debian 12 (id=3) → Template 9003
- etc.
### Template Creation Process
**First VM deployment from a cloud image:**
1. **Download** (Depl0y server):
```bash
wget https://cloud-images.ubuntu.com/.../ubuntu-24.04-server-cloudimg-amd64.img
# Stored in: /var/lib/depl0y/cloud-images/
```
2. **Upload to Proxmox** (via SSH):
```bash
scp ubuntu-24.04-server-cloudimg-amd64.img root@pve.agit8or.net:/tmp/
```
3. **Create Template VM** (via SSH on Proxmox):
```bash
# Create empty VM
qm create 9001 --name Ubuntu-24.04-LTS --memory 2048 --cores 2 \
--net0 virtio,bridge=vmbr0 --ostype l26 --scsihw virtio-scsi-pci
# Import cloud image as disk
qm importdisk 9001 /tmp/ubuntu-24.04-server-cloudimg-amd64.img local-lvm --format qcow2
# Configure disk and boot
qm set 9001 --scsi0 local-lvm:vm-9001-disk-0
qm set 9001 --boot order=scsi0
# Add cloud-init drive
qm set 9001 --ide2 local-lvm:cloudinit
# Convert to template
qm template 9001
```
4. **Clone Template** (via Proxmox API):
```python
proxmox.nodes(node).qemu(9001).clone.post(
newid=vm_id,
name=vm_name,
full=1, # Full clone
storage=storage
)
```
5. **Configure Cloud-init** (via Proxmox API):
```python
proxmox.nodes(node).qemu(vm_id).config.set(
ciuser=username,
cipassword=password,
ipconfig0=network_config,
sshkeys=ssh_public_key
)
```
### Subsequent Deployments
**All VMs after the first:**
- **Skip steps 1-3** (template already exists!)
- **Only run steps 4-5** (clone + configure)
- **Result**: 30-second deployments
### Why SSH is Required
The `qm importdisk` command does not have a Proxmox API endpoint. It can only be executed via SSH on the Proxmox server. This is why SSH setup is required for the **first** deployment of each cloud image type.
**After template creation:**
- All operations use pure Proxmox API
- No SSH required for VM cloning
- Fast and efficient deployments
### Security
- **SSH Key Authentication**: Password-free after setup
- **Public Key Only**: Only public key stored on Proxmox
- **No Password Storage**: Proxmox password never stored in database
- **Template Isolation**: Templates separate from user VMs
- **Cloud-init Encryption**: Credentials encrypted in transit
---
## Troubleshooting
### Error: "SSH access not configured"
**Symptoms:**
```
Error: SSH access not configured. Please run this ONE-TIME setup command:
sudo /tmp/enable_cloud_images.sh
After that, cloud images will deploy automatically!
```
**Solution:**
1. SSH to your Depl0y server
2. Run: `sudo /tmp/enable_cloud_images.sh`
3. Enter your Proxmox root password when prompted
4. Wait for "✅ SUCCESS!" message
5. Try creating the VM again
### SSH Setup Script Fails
**Error: "Permission denied (publickey,password)"**
**Possible Causes:**
- Wrong Proxmox password
- SSH password authentication disabled on Proxmox
**Solution 1: Verify Password**
```bash
# Test SSH with password manually
ssh root@pve.agit8or.net
# If this fails with your password, reset Proxmox root password
```
**Solution 2: Enable Password Auth (if disabled)**
On your Proxmox server, edit SSH config:
```bash
sudo nano /etc/ssh/sshd_config
```
Find and change:
```
PasswordAuthentication yes
```
Restart SSH:
```bash
sudo systemctl restart sshd
```
Then run the setup script again.
**Solution 3: Manual SSH Key Setup**
If the automated script fails, set up SSH manually:
1. On Depl0y server:
```bash
sudo -u depl0y ssh-keygen -t rsa -b 4096 -f /opt/depl0y/.ssh/id_rsa -N ""
sudo -u depl0y cat /opt/depl0y/.ssh/id_rsa.pub
```
2. Copy the public key output
3. On Proxmox server:
```bash
mkdir -p ~/.ssh
chmod 700 ~/.ssh
nano ~/.ssh/authorized_keys
# Paste the public key, save and exit
chmod 600 ~/.ssh/authorized_keys
```
4. Test from Depl0y server:
```bash
sudo -u depl0y ssh root@pve.agit8or.net "echo test"
```
### VM Created But Won't Boot
**Symptoms:**
- VM starts but no OS loads
- Black screen or BIOS errors
- "No bootable device" error
**Cause:**
Template doesn't exist or is corrupt.
**Solution:**
Delete the template and let it recreate:
1. Check which template exists:
```bash
ssh root@pve.agit8or.net "qm list | grep 900"
```
2. Delete the problematic template:
```bash
# For Ubuntu 24.04 (template 9001)
ssh root@pve.agit8or.net "qm destroy 9001"
```
3. Try creating the VM again - template will be recreated automatically
### Cloud-init Not Working
**Symptoms:**
- Can't login with configured credentials
- Default username/password required
- Network not configured
**Cause:**
Cloud-init configuration failed or not applied.
**Solution:**
1. Check cloud-init logs on the VM:
```bash
# Login via console with default credentials
sudo cat /var/log/cloud-init.log
sudo cat /var/log/cloud-init-output.log
```
2. Verify cloud-init config in Proxmox:
```bash
ssh root@pve.agit8or.net "qm cloudinit dump <vmid> user"
```
3. Manually set cloud-init (if needed):
```bash
# Via Proxmox UI:
# VM → Cloud-Init → Edit settings
```
### Template Creation Stuck
**Symptoms:**
- Status shows "Setting up cloud image..." for 20+ minutes
- No progress
**Cause:**
- Network issue downloading cloud image
- Proxmox storage full
- SSH connection lost
**Check Logs:**
```bash
sudo journalctl -u depl0y-backend -f --no-pager
```
**Solutions:**
1. **Check download progress:**
```bash
ls -lh /var/lib/depl0y/cloud-images/
# If file is growing, download is in progress
```
2. **Check Proxmox storage:**
```bash
ssh root@pve.agit8or.net "df -h"
# Ensure storage has 5+ GB free
```
3. **Check SSH connection:**
```bash
sudo -u depl0y ssh root@pve.agit8or.net "echo test"
```
4. **Restart the deployment:**
- Delete the partially created template
- Try creating the VM again
### Check Templates on Proxmox
List all templates:
```bash
ssh root@pve.agit8or.net "qm list | grep 900"
```
Example output:
```
9001 Ubuntu-24.04-LTS 0 2048 0.00 0
9002 Ubuntu-22.04-LTS 0 2048 0.00 0
```
Delete a template:
```bash
ssh root@pve.agit8or.net "qm destroy 9001"
```
### Verify SSH Status from Command Line
**Test SSH access:**
```bash
sudo -u depl0y ssh -o BatchMode=yes -o ConnectTimeout=5 \
-o StrictHostKeyChecking=no root@pve.agit8or.net "echo test"
```
**If successful, you'll see:**
```
test
```
**If not configured:**
```
Permission denied (publickey,password).
```
---
## FAQ
### Q: Do I need to run the setup script for every VM?
**A:** No! The setup script is run **once** per Depl0y installation. After that, all cloud image deployments are automatic.
### Q: Do I need to run the setup script for each cloud image?
**A:** No! One setup enables **all** cloud images. The first deployment of each cloud image type takes 5-10 minutes to create the template, then all subsequent deployments are 30 seconds.
### Q: What if I add a new Proxmox node?
**A:** The SSH key is configured per Proxmox host, not per node. If you add a node to an existing cluster, no new setup is needed. If you add a completely new Proxmox host/cluster, you'll need to run the setup script once for that new host.
### Q: Can I use cloud images and ISO images?
**A:** Yes! Both installation methods work side-by-side. Use cloud images for quick deployments, ISOs for custom installations or distros without cloud images.
### Q: Where are cloud images stored?
**A:**
- **Depl0y server**: `/var/lib/depl0y/cloud-images/` (original downloads)
- **Proxmox server**: Imported as disks in configured storage (e.g., local-lvm)
### Q: How much disk space do cloud images use?
**A:**
- **Download**: 300-700 MB per cloud image
- **Template on Proxmox**: 2-3 GB per template
- **Cloned VMs**: Your configured disk size (20+ GB recommended)
### Q: Can I customize the cloud images?
**A:** Cloud images are standard upstream images from Ubuntu/Debian. You can:
- Customize credentials (via cloud-init)
- Customize network (via cloud-init)
- Add SSH keys (via cloud-init)
- Install software after deployment (via Ansible, scripts, etc.)
If you need pre-customized images, consider using Packer to build custom images.
### Q: What happens if template creation fails?
**A:** The deployment will fail with an error message. Check the logs, fix the issue (usually SSH or storage), and try again. The system will automatically retry template creation.
### Q: Can I delete templates?
**A:** Yes, but if you delete a template, the next VM deployment for that cloud image will take 5-10 minutes to recreate the template. Templates are safe to delete if you need to free space.
### Q: How do I add more cloud images?
**A:** Cloud images are defined in the database. You can:
1. Contact your Depl0y administrator
2. Submit a feature request
3. Manually add via database (advanced users)
### Q: Does cloud-init work on all images?
**A:** Yes! All official Ubuntu and Debian cloud images have cloud-init pre-installed and configured. That's what makes them "cloud images."
### Q: Can I use Windows cloud images?
**A:** Windows doesn't have official cloud images like Linux. For Windows VMs, use the traditional ISO installation method. You can create custom Windows templates manually in Proxmox.
### Q: What if I don't want to give Proxmox root SSH access?
**A:** SSH root access is required for the `qm importdisk` command during template creation. This is a Proxmox limitation. For security:
- SSH uses key-based auth (no password storage)
- SSH only used during template creation
- All subsequent operations use Proxmox API
- You can disable SSH after all templates are created (though you'll need to re-enable for new cloud image types)
### Q: How do I know which template ID corresponds to which cloud image?
**A:** Template ID = 9000 + cloud_image_id. You can check cloud image IDs in the database or via the API. Common mappings:
- 9001: Ubuntu 24.04 LTS
- 9002: Ubuntu 22.04 LTS
- 9003: Ubuntu 20.04 LTS
- 9004: Debian 12
- 9005: Debian 11
---
## Additional Resources
### Check System Logs
```bash
# Backend logs
sudo journalctl -u depl0y-backend -f --no-pager
# Last 50 lines
sudo journalctl -u depl0y-backend -n 50 --no-pager
```
### Test SSH Manually
```bash
# As depl0y user
sudo -u depl0y ssh root@pve.agit8or.net "qm list"
# Check SSH key
sudo -u depl0y cat /opt/depl0y/.ssh/id_rsa.pub
```
### View Cloud Images in Database
```bash
sudo -u depl0y sqlite3 /var/lib/depl0y/db/depl0y.db "SELECT id, name, filename, is_downloaded FROM cloud_images WHERE is_available=1;"
```
### File Locations
- **Setup script**: `/tmp/enable_cloud_images.sh`
- **Cloud image downloads**: `/var/lib/depl0y/cloud-images/`
- **SSH keys**: `/opt/depl0y/.ssh/`
- **Backend code**: `/opt/depl0y/backend/app/services/deployment.py`
- **Database**: `/var/lib/depl0y/db/depl0y.db`
---
## Support
If you encounter issues not covered in this guide:
1. **Check logs**: `sudo journalctl -u depl0y-backend -f`
2. **Verify SSH**: `sudo -u depl0y ssh root@pve.agit8or.net "echo test"`
3. **Check templates**: `ssh root@pve.agit8or.net "qm list | grep 900"`
4. **Contact support** or submit a bug report via the web UI
---
**Happy deploying!** 🚀