Installing Ubuntu Instances on Proxmox: Complete Guide
Introduction
Ubuntu Server is one of the most popular Linux distributions for virtualized environments, making it an excellent choice for Proxmox VMs. This guide will walk you through the complete process of creating and configuring Ubuntu Server instances in Proxmox VE, from initial VM creation to post-installation optimization.
Whether you're setting up web servers, application servers, or development environments, this guide covers everything you need to know.
Prerequisites
- Proxmox VE installed and accessible via web interface
- Ubuntu Server ISO image downloaded
- Basic understanding of Linux command line
- Network access to download packages
Part 1: Preparing the Ubuntu ISO
Download Ubuntu Server
- Visit the Ubuntu Server download page
- Download the latest LTS (Long Term Support) version
- Currently: Ubuntu 24.04 LTS (Noble Numbat)
- LTS versions receive 5 years of support
- Verify the ISO checksum (optional but recommended):
# Download checksum file
wget https://releases.ubuntu.com/24.04/SHA256SUMS
# Verify ISO
sha256sum ubuntu-24.04-server-amd64.iso
Upload ISO to Proxmox
-
Access Proxmox Web Interface: Navigate to
https://your-proxmox-ip:8006 -
Upload ISO:
- Go to local storage (or your preferred storage)
- Click on Content tab
- Select ISO Images from the dropdown
- Click Upload button
- Select your Ubuntu Server ISO file
- Wait for upload to complete (may take several minutes)
Alternatively, upload via command line:
# SSH into Proxmox host
scp ubuntu-24.04-server-amd64.iso root@proxmox-ip:/var/lib/vz/template/iso/
Part 2: Creating the Ubuntu VM
Step 1: Create New Virtual Machine
-
Click Create VM button (top right corner)
-
General Tab:
- VM ID:
100(or any available number, 100-999 for VMs) - Name:
ubuntu-server-01(descriptive name) - Resource Pool: Leave default or select a pool
- Click Next
- VM ID:
Step 2: Operating System Configuration
- Use CD/DVD disc image file (iso): Select this option
- Storage: Select
local(or your ISO storage location) - ISO image: Select your uploaded Ubuntu Server ISO
- Guest OS:
- Type: Linux
- Version: 6.x - 2.6 Kernel (or 5.x - 2.6 Kernel for older Ubuntu)
- Click Next
Step 3: System Settings
- Graphics Card: Default (VGA) - sufficient for server installations
- Machine: Default (i440fx) or q35 (for newer features)
- Qemu Agent: Enable this - allows better VM management
- SCSI Controller: VirtIO SCSI single (recommended for performance)
- Click Next
Step 4: Hard Disk Configuration
- Bus/Device: SCSI (recommended) or VirtIO Block
- Storage:
local-lvm(or your preferred storage) - Disk size (GB):
- Minimum:
20GBfor basic server - Recommended:
40GBfor development - Production:
100GB+depending on needs
- Minimum:
- Cache:
- Write back: Best performance (recommended for lab)
- None: Safest (for production)
- Discard: Enable if using thin provisioning (saves space)
- SSD emulation: Enable if using SSD storage
- Click Next
Step 5: CPU Configuration
- Sockets:
1(standard) - Cores:
- Minimum:
1core - Recommended:
2-4cores - Adjust based on host resources and VM needs
- Minimum:
- Type:
- host: Best performance (uses host CPU features)
- kvm64: Better compatibility
- Enable NUMA: Only if using multiple CPU sockets
- Click Next
Step 6: Memory Configuration
- Memory (MB):
- Minimum:
1024MB (1GB) for basic Ubuntu Server - Recommended:
2048-4096MB (2-4GB) for most use cases - Development:
4096-8192MB (4-8GB) - Adjust based on applications you'll run
- Minimum:
- Ballooning Device: Enable for dynamic memory management
- Click Next
Step 7: Network Configuration
- Bridge:
vmbr0(default bridge, connects to your physical network) - Model:
- VirtIO: Best performance (recommended)
- Intel E1000: Better compatibility
- MAC Address: Auto-generated (or set custom)
- VLAN Tag: Leave empty unless using VLANs
- Firewall: Enable if using Proxmox firewall
- Click Next
Step 8: Confirm and Create
- Review all settings
- Check Start after created if you want to boot immediately
- Click Finish
Part 3: Installing Ubuntu Server
Step 1: Start the VM
- Find your VM in the left sidebar
- Click on the VM name
- Click Start button (or it may start automatically if you enabled it)
Step 2: Open Console
- Click Console tab
- You should see the Ubuntu Server installer boot screen
Step 3: Ubuntu Installation Process
Language and Keyboard
- Language: Select your preferred language (English recommended)
- Keyboard Layout: Select your keyboard layout
- Press Done (F10 or Enter)
Network Configuration
- Hostname: Enter a hostname (e.g.,
ubuntu-server-01) - Network Interface: Usually
ens18oreth0 - IPv4 Configuration:
- Method:
- DHCP: Automatic (easiest for lab)
- Static: Manual configuration (recommended for servers)
- If Static:
- Subnet: Your network subnet (e.g.,
192.168.1.0/24) - Address: Desired IP (e.g.,
192.168.1.100) - Gateway: Router IP (e.g.,
192.168.1.1) - Name Servers: DNS servers (e.g.,
8.8.8.8 1.1.1.1)
- Subnet: Your network subnet (e.g.,
- Method:
- Proxy: Leave empty unless behind a proxy
- Press Done
Storage Configuration
- Storage Setup:
- Use An Entire Disk: Simplest option (recommended for VMs)
- Custom Storage Layout: Advanced partitioning
- Disk: Select your virtual disk
- Storage Configuration:
- Set Up This Disk As An LVM Group: Recommended
- Encrypt The LVM Group: Optional (adds security overhead)
- Press Done
- Confirm disk changes: Continue
Profile Setup
- Your Name: Enter your name
- Server Name: Hostname (usually pre-filled)
- Username: Create a username (avoid
rootoradmin) - Password: Set a strong password
- Confirm Password: Re-enter password
- Press Done
SSH Setup
- Install OpenSSH Server: Enable this (recommended)
- Import SSH Identity: Optional (for key-based auth)
- Press Done
Featured Server Snaps
- Select any additional software you want:
- Docker: Container platform
- MicroK8s: Kubernetes distribution
- LXD: System container manager
- Others as needed
- Press Done
Installation Complete
- Wait for installation to complete (5-15 minutes)
- When finished, select Reboot Now
- The VM will reboot into your new Ubuntu Server
Part 4: Post-Installation Configuration
Step 1: Initial Login
- After reboot, login with your username and password
- You should see the Ubuntu welcome message
Step 2: Update System
# Update package lists
sudo apt update
# Upgrade installed packages
sudo apt upgrade -y
# Install additional useful packages
sudo apt install -y curl wget git vim net-tools
Step 3: Install Qemu Guest Agent
The Qemu Guest Agent improves VM management in Proxmox:
# Install Qemu Guest Agent
sudo apt install -y qemu-guest-agent
# Enable and start the service
sudo systemctl enable qemu-guest-agent
sudo systemctl start qemu-guest-agent
# Verify it's running
sudo systemctl status qemu-guest-agent
In Proxmox: After installing, go to VM → Hardware → Options → Qemu Guest Agent → Enable
Step 4: Configure Network (if needed)
If you need to change network settings:
# Edit network configuration
sudo nano /etc/netplan/00-installer-config.yaml
Example configuration:
network:
version: 2
ethernets:
ens18:
dhcp4: false
addresses:
- 192.168.1.100/24
routes:
- to: default
via: 192.168.1.1
nameservers:
addresses:
- 8.8.8.8
- 1.1.1.1
Apply changes:
sudo netplan apply
Step 5: Configure Firewall (UFW)
# Enable UFW
sudo ufw enable
# Allow SSH (important!)
sudo ufw allow 22/tcp
# Allow other services as needed
sudo ufw allow 80/tcp # HTTP
sudo ufw allow 443/tcp # HTTPS
# Check status
sudo ufw status
Step 6: Set Up SSH Key Authentication (Recommended)
# On your local machine, generate SSH key (if you don't have one)
ssh-keygen -t ed25519 -C "your_email@example.com"
# Copy public key to Ubuntu server
ssh-copy-id username@ubuntu-server-ip
# Test SSH key login
ssh username@ubuntu-server-ip
Step 7: Configure Timezone
# Set timezone
sudo timedatectl set-timezone America/New_York # Replace with your timezone
# Verify
timedatectl
Step 8: Install Common Development Tools
# Build essentials
sudo apt install -y build-essential
# Python and pip
sudo apt install -y python3 python3-pip
# Node.js (using NodeSource repository)
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
sudo apt install -y nodejs
# Docker (optional)
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
sudo usermod -aG docker $USER
Part 5: Proxmox VM Management
Creating VM Templates
Once you have a configured Ubuntu VM, create a template for faster deployment:
- Shutdown the VM: VM → Shutdown
- Convert to Template:
- Right-click VM → Convert to Template
- Or: VM → More → Convert to Template
- Clone from Template:
- Right-click template → Clone
- Set new VM ID and name
- Start cloned VM
Taking Snapshots
Before making major changes:
- VM → Snapshots → Take Snapshot
- Enter snapshot name and description
- Restore Snapshot: If needed, select snapshot → Rollback
Backup Configuration
- VM → Backup → Add
- Configure:
- Storage: Backup storage location
- Schedule: Set backup frequency
- Mode: Snapshot (recommended) or Suspend
- Compression: ZSTD (good balance)
Resource Monitoring
Monitor VM performance:
- VM → Summary: View CPU, memory, disk usage
- VM → Monitor: Real-time statistics
- Use command line:
# On Proxmox host
pvesh get /nodes/proxmox-host/qemu/100/status/current
Part 6: Optimization Tips
Performance Optimization
- Use VirtIO Drivers: Already configured in our setup
- Enable CPU Type "host": Uses host CPU features
- Use SSD Storage: Faster I/O performance
- Allocate Appropriate Resources: Don't overallocate
Storage Optimization
- Thin Provisioning: Saves disk space
- Enable Discard: Allows space reclamation
- Use Compression: For backup storage
Network Optimization
- VirtIO Network: Best performance
- SR-IOV: For high-performance networking (advanced)
- Bridge Optimization: Use dedicated bridges for high traffic
Troubleshooting
Common Issues
VM Won't Boot:
- Check VM resources (RAM, CPU)
- Verify ISO image integrity
- Check boot order in VM options
Network Not Working:
- Verify bridge configuration
- Check firewall rules
- Verify IP configuration in Ubuntu
Poor Performance:
- Ensure VirtIO drivers are used
- Check resource allocation
- Verify storage type and cache settings
Can't Access via SSH:
- Check UFW firewall rules
- Verify SSH service is running:
sudo systemctl status ssh - Check network connectivity
Useful Commands
# Check system resources
htop
free -h
df -h
# Check network
ip addr show
ip route show
ping 8.8.8.8
# Check services
sudo systemctl status service-name
sudo systemctl enable service-name
sudo systemctl start service-name
# View logs
sudo journalctl -xe
sudo tail -f /var/log/syslog
Best Practices
- Regular Updates: Keep Ubuntu and packages updated
- Backup Strategy: Regular VM backups
- Security:
- Use strong passwords
- Enable firewall
- Use SSH keys instead of passwords
- Keep system updated
- Documentation: Document your VM configurations
- Resource Management: Don't overallocate resources
- Network Isolation: Use VLANs for different environments
Conclusion
You now have a fully configured Ubuntu Server instance running in Proxmox! This VM can serve as:
- Web Server: Host websites and web applications
- Application Server: Run applications and services
- Development Environment: Code and test applications
- Database Server: Host databases
- Container Host: Run Docker containers
- Base for Other Services: Expand as needed
Remember to:
- Keep your system updated
- Configure proper backups
- Follow security best practices
- Monitor resource usage
- Document your configurations
Additional Resources
Happy virtualizing! 🚀

