Proxmox VE
Proxmox Virtual Environment is the foundation of the homelab. It hosts all LXC containers and VMs.
Overview
Purpose: Virtualization host for all homelab services Access: https://proxmox.janvv.nl (via Cloudflare tunnel) IP: 192.168.144.10
Container vs VM
LXC Containers (preferred):
- Lightweight, share host kernel
- Used for Docker-based services
- Template: CT 902 (Arch Linux lxc-base)
- Lower resource overhead
Virtual Machines:
- Full OS isolation
- Used when: needs direct hardware access, or OS not supported by LXC
- Immich (VM 108), Home Assistant (VM 114)
LXC Basics
Template Container
CT 902 - lxc-base
- OS: Arch Linux
- Docker and docker-compose pre-installed
- Docker service enabled (not started)
DisableSandboxin/etc/pacman.conf(fixes Landlock kernel issue)
Container Creation
# Clone template
pct clone 902 <NEW_ID> --hostname <name> --full
# Set resources
pct set <NEW_ID> --cores 2 --memory 2048
# Configure network
pct set <NEW_ID> -net0 name=eth0,bridge=vmbr0,firewall=1,gw=192.168.144.1,ip=<IP>/23
# Mount data directory
pct set <NEW_ID> -mp0 /lxcdata/<service>,mp=/data
# Enable features
pct set <NEW_ID> -features nesting=1,keyctl=1
# Auto-start
pct set <NEW_ID> -onboot 1
# Create data directory on host
mkdir -p /lxcdata/<service>AppArmor Workaround
Due to CVE-2025-52881, Docker-in-LXC requires AppArmor workaround. Add to /etc/pve/lxc/<ID>.conf:
lxc.apparmor.profile: unconfined
lxc.mount.entry: /dev/null sys/module/apparmor/parameters/enabled none bind 0 0
Common Commands
# List all containers
pct list
# Start/Stop/Restart
pct start <ID>
pct stop <ID>
pct restart <ID>
# Access shell
pct exec <ID> -- bash
# Run command
pct exec <ID> -- <command>
# View config
cat /etc/pve/lxc/<ID>.conf
# View status
pct status <ID>
# Delete container
pct destroy <ID>VM Basics
VM Creation
Similar to LXC but using qm commands:
qm create <VMID> --name <name> --cores 2 --memory 4096
qm set <VMID> --net0 virtio,bridge=vmbr0
# ... additional configCommon Commands
qm list # List VMs
qm start <ID> # Start VM
qm stop <ID> # Stop VM
qm status <ID> # View status