Post-Install Configuration¶
Essential configuration steps after fresh Proxmox VE installation.
🚀 Automated Setup¶
Community Scripts (Recommended):
Proxmox VE Post Install - Automated post-install configuration
Video Tutorials:
Post Install Configuration - Step-by-step post-install guide
Don’t run Proxmox without these settings! - Essential configuration tips
Custom Automated Script:
Use the provided post-install automation script:
# Download and run the post-install script
wget -O - https://raw.githubusercontent.com/your-repo/proxmox-configs/main/scripts/post-install-setup.sh | bash
Or run the local script:
chmod +x configs/scripts/post-install-setup.sh
./configs/scripts/post-install-setup.sh
Configuration Files Available:
The complete automated setup script:
1#!/bin/bash
2
3# Proxmox Post-Install Setup Script
4# This script automates the post-installation configuration of Proxmox VE
5# Run as root on fresh Proxmox installation
6
7set -euo pipefail
8
9# Colors for output
10RED='\033[0;31m'
11GREEN='\033[0;32m'
12YELLOW='\033[1;33m'
13NC='\033[0m' # No Color
14
15# Logging function
16log() {
17 echo -e "${GREEN}[$(date +'%Y-%m-%d %H:%M:%S')] $1${NC}"
18}
19
20warn() {
21 echo -e "${YELLOW}[$(date +'%Y-%m-%d %H:%M:%S')] WARNING: $1${NC}"
22}
23
24error() {
25 echo -e "${RED}[$(date +'%Y-%m-%d %H:%M:%S')] ERROR: $1${NC}"
26 exit 1
27}
28
29# Check if running as root
30if [[ $EUID -ne 0 ]]; then
31 error "This script must be run as root"
32fi
33
34log "Starting Proxmox Post-Install Configuration"
35
36# 1. Remove local-lvm and extend root partition
37log "Removing local-lvm storage and extending root partition..."
38if lvs | grep -q "data"; then
39 lvremove -y /dev/pve/data
40 lvresize -l +100%FREE /dev/pve/root
41 resize2fs /dev/mapper/pve-root
42 log "Storage reconfiguration completed"
43else
44 warn "local-lvm not found, skipping storage reconfiguration"
45fi
46
47# 2. Configure repositories
48log "Configuring package repositories..."
49
50# Disable enterprise repositories
51if [ -f /etc/apt/sources.list.d/pve-enterprise.list ]; then
52 sed -i 's/^deb/#deb/' /etc/apt/sources.list.d/pve-enterprise.list
53 log "Disabled PVE Enterprise repository"
54fi
55
56if [ -f /etc/apt/sources.list.d/ceph.list ]; then
57 sed -i 's/^deb/#deb/' /etc/apt/sources.list.d/ceph.list
58 log "Disabled Ceph Enterprise repository"
59fi
60
61# Add no-subscription repository
62if ! grep -q "pve-no-subscription" /etc/apt/sources.list; then
63 echo "deb http://download.proxmox.com/debian/pve $(lsb_release -cs) pve-no-subscription" >> /etc/apt/sources.list
64 log "Added PVE No-Subscription repository"
65fi
66
67# 3. Update system
68log "Updating package lists and upgrading system..."
69apt update
70apt upgrade -y
71
72# 4. Install useful packages
73log "Installing additional useful packages..."
74apt install -y \
75 curl \
76 wget \
77 vim \
78 htop \
79 iotop \
80 iftop \
81 ncdu \
82 tree \
83 git \
84 unzip \
85 software-properties-common \
86 apt-transport-https \
87 ca-certificates \
88 gnupg \
89 lsb-release
90
91# 5. Disable enterprise popup
92log "Disabling enterprise subscription popup..."
93PROXMOX_LIB="/usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js"
94if [ -f "$PROXMOX_LIB" ]; then
95 cp "$PROXMOX_LIB" "${PROXMOX_LIB}.bak"
96 sed -i "s/data.status !== 'Active'/false/g" "$PROXMOX_LIB"
97 systemctl restart pveproxy.service
98 log "Enterprise popup disabled"
99else
100 warn "Proxmox library file not found, skipping popup disable"
101fi
102
103# 6. Configure automatic updates (optional)
104log "Configuring automatic security updates..."
105cat > /etc/apt/apt.conf.d/20auto-upgrades << EOF
106APT::Periodic::Update-Package-Lists "1";
107APT::Periodic::Unattended-Upgrade "1";
108APT::Periodic::AutocleanInterval "7";
109EOF
110
111# 7. Create directory structure for services
112log "Creating directory structure for Docker services..."
113mkdir -p /docker/{transmission/{data,watch},prowlarr/config,radarr/config,bazarr/config}
114mkdir -p /opt/docker/media-stack
115mkdir -p /mnt/nas-library/MULTIMEDIA/{movies,Downloads/{complete,incomplete}}
116
117# Create arr-stack user
118if ! id "arr-stack" &>/dev/null; then
119 adduser arr-stack --uid 1002 --disabled-password --gecos ""
120 log "Created arr-stack user (UID: 1002)"
121fi
122
123# Set permissions
124chown -R 1002:1002 /docker/
125log "Set permissions for Docker directories"
126
127# 8. Configure network (example - adjust as needed)
128log "Network configuration template created at /tmp/interfaces.example"
129cat > /tmp/interfaces.example << EOF
130# Example network configuration
131# Copy to /etc/network/interfaces and modify as needed
132
133auto lo
134iface lo inet loopback
135
136# Management interface
137auto vmbr0
138iface vmbr0 inet static
139 address 192.168.1.240/24
140 gateway 192.168.1.1
141 bridge-ports enp0s31f6
142 bridge-stp off
143 bridge-fd 0
144
145# Optional: Additional bridge for VMs
146#auto vmbr1
147#iface vmbr1 inet manual
148# bridge-ports enp0s31f7
149# bridge-stp off
150# bridge-fd 0
151EOF
152
153# 9. Create backup script
154log "Creating backup script..."
155cat > /usr/local/bin/proxmox-backup.sh << 'EOF'
156#!/bin/bash
157# Simple Proxmox backup script
158# Customize as needed for your environment
159
160BACKUP_DIR="/mnt/backup"
161DATE=$(date +%Y%m%d_%H%M%S)
162
163# Create backup directory if it doesn't exist
164mkdir -p "$BACKUP_DIR"
165
166# Backup Proxmox configuration
167tar -czf "$BACKUP_DIR/pve-config-$DATE.tar.gz" /etc/pve/
168
169# Backup Docker configurations
170if [ -d "/docker" ]; then
171 tar -czf "$BACKUP_DIR/docker-configs-$DATE.tar.gz" /docker/
172fi
173
174# Clean old backups (keep last 7 days)
175find "$BACKUP_DIR" -name "*.tar.gz" -mtime +7 -delete
176
177echo "Backup completed: $DATE"
178EOF
179
180chmod +x /usr/local/bin/proxmox-backup.sh
181log "Backup script created at /usr/local/bin/proxmox-backup.sh"
182
183# 10. Final steps
184log "Post-install configuration completed successfully!"
185log ""
186log "Next steps:"
187log "1. Reboot the system: 'reboot'"
188log "2. Configure network settings if needed: /etc/network/interfaces"
189log "3. Set up storage: Run storage-setup.sh"
190log "4. Deploy services: Use docker-compose files in configs/"
191log "5. Configure monitoring and backups"
192log ""
193log "Web interface: https://$(hostname -I | awk '{print $1}'):8006"
194
195# Ask for reboot
196read -p "Reboot now? (y/N): " -n 1 -r
197echo
198if [[ $REPLY =~ ^[Yy]$ ]]; then
199 log "Rebooting system..."
200 reboot
201fi
⚙️ Manual Configuration Steps¶
If you prefer manual configuration, follow these steps:
1. Storage Reconfiguration¶
Remove local-lvm and extend root partition:
# Remove local-lvm storage
lvremove /dev/pve/data
# Extend root partition
lvresize -l +100%FREE /dev/pve/root
resize2fs /dev/mapper/pve-root
2. Repository Configuration¶
Disable enterprise repositories and add no-subscription:
# Disable enterprise repos
sed -i 's/^deb/#deb/' /etc/apt/sources.list.d/pve-enterprise.list
# Add no-subscription repository
echo "deb http://download.proxmox.com/debian/pve $(lsb_release -cs) pve-no-subscription" >> /etc/apt/sources.list
# Update packages
apt update && apt upgrade -y
3. Disable Enterprise Popup¶
Remove the subscription nag screen:
# Backup original file
cp /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js.bak
# Disable popup
sed -i "s/data.status !== 'Active'/false/g" /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js
# Restart proxy service
systemctl restart pveproxy.service
4. Network Configuration¶
Configure network interfaces (example for static IP):
# Edit network configuration
nano /etc/network/interfaces
Example configuration:
auto lo
iface lo inet loopback
auto vmbr0
iface vmbr0 inet static
address 192.168.1.240/24
gateway 192.168.1.1
bridge-ports enp0s31f6
bridge-stp off
bridge-fd 0
Restart networking:
systemctl restart networking
5. Install Essential Packages¶
apt install -y curl wget vim htop iotop iftop ncdu tree git unzip
📋 Post-Configuration Checklist¶
After running the configuration:
[ ] Reboot system:
reboot[ ] Verify web access:
https://your-ip:8006[ ] Check storage: Datacenter → Storage (local should show all content types)
[ ] Update system: Node → Updates → Refresh → Upgrade
[ ] Configure backups: Set up automated backup procedures
[ ] Deploy services: Use Docker Compose stacks from
configs/
🔧 Configuration Files¶
All configuration scripts and templates are available in:
Automated script:
configs/scripts/post-install-setup.shNetwork template:
configs/templates/network-interfaces.templateBackup script: Created at
/usr/local/bin/proxmox-backup.sh
📊 Verification Commands¶
Verify your configuration:
# Check storage
df -h
# Check services
systemctl status pveproxy pvedaemon pve-cluster
# Check network
ip addr show
# Check repositories
apt update
7. Configure Storage and Repositories¶
Configure storage and repository settings:
In ‘Datacenter’ - ‘Storage’, remove ‘local-lvm’
In ‘Node’ - ‘Shell’, enter commands:
lvremove /dev/pve/data
lvresize -l +100%FREE /dev/pve/root
resize2fs /dev/mapper/pve-root
In ‘Datacenter’ - ‘Storage’, edit ‘local’ and select all options in content
Configure Repositories:
In ‘Node’ - ‘Updates’ - ‘Repositories’, select repository ENTERPRISE and PVE-ENTERPRISE and select DISABLE
In ‘Node’ - ‘Updates’ - ‘Repositories’, add repository ‘No-Subscription’
In ‘Node’ - ‘Updates’, click REFRESH and then UPGRADE
In GUI select REBOOT
8. Enable Notifications¶
Configure email notifications for system alerts:
# Via Web Interface:
# 1. Navigate to 'Datacenter' → 'Notifications'
# 2. Add a new notification target: 'SMTP'
# 3. Configure SMTP settings (server, port, authentication)
# 4. In notification handler, modify 'default-matcher':
# - Select your SMTP notification target
# - Unselect 'mail-to-root'
9. Trusted TLS Certificates¶
Configure Let’s Encrypt certificates for secure web access:
# Via Web Interface:
# 1. Navigate to 'Datacenter' → 'ACME'
# 2. Add ACME Account (Let's Encrypt)
# 3. Configure DNS challenge or HTTP challenge
# 4. Request certificate for your domain
# 5. Enable automatic renewal
🚨 Troubleshooting¶
Common issues and solutions:
Storage Issues
- Verify LVM configuration: lvs
- Check filesystem: df -h
Network Issues
- Check interface status: ip link show
- Verify bridge configuration: brctl show
Service Issues
- Check logs: journalctl -u pveproxy
- Restart services: systemctl restart pveproxy