Mateusz Gruszczyński a47daae9ee vm management
2025-10-17 16:34:25 +02:00
2025-10-17 16:34:25 +02:00
2025-10-17 16:20:07 +02:00
2025-10-17 13:37:35 +02:00
2025-10-17 16:27:03 +02:00
2025-10-17 13:37:18 +02:00
2025-10-17 14:54:20 +02:00
2025-10-17 13:37:18 +02:00

PVE HA Web Panel — Deployment Guide

This guide explains how to deploy PVE HA Web Panel on a Proxmox host or any Debian/Ubuntu-like system.


0) Install python3-venv

apt install python3-venv

1) Create directory

mkdir -p /opt/pve-ha-web
cd /opt/pve-ha-web

2) Get the application

Clone the repository (includes app.py, templates/, static/, requirements.txt).

git clone https://gitea.linuxiarz.pl/gru/pve-ha-web.git .

Note: The trailing . clones directly into /opt/pve-ha-web instead of a nested subfolder.

3) Python virtualenv & dependencies

python3 -m venv venv
source venv/bin/activate
python -m pip install --upgrade pip
pip install -r requirements.txt
deactivate

4) systemd unit

Create a service unit file for Gunicorn:

tee /etc/systemd/system/pve-ha-web.service >/dev/null <<'UNIT'
[Unit]
Description=PVE HA Web Panel
After=network.target

[Service]
Type=simple
WorkingDirectory=/opt/pve-ha-web
Environment="PYTHONUNBUFFERED=1"
ExecStart=/opt/pve-ha-web/venv/bin/gunicorn -w 2 -b 0.0.0.0:8007 app:app
Restart=on-failure
RestartSec=3
User=root
Group=root

[Install]
WantedBy=multi-user.target
UNIT

Port: The app listens on 8007 by default. Adjust as needed.

5) Enable & start

systemctl daemon-reload
systemctl enable --now pve-ha-web

6) Verify

systemctl status pve-ha-web
ss -ltnp | grep :8007

Open the app in the browser: http://<server-ip>:8007


Optional: Reverse proxy (Nginx)

If you want to expose it under standard HTTPS with a domain:

server {
  listen 80;
  server_name ha.example.com;
  return 301 https://$host$request_uri;
}

server {
  listen 443 ssl http2;
  server_name ha.example.com;

  # TLS certs (replace with your paths / cert manager)
  ssl_certificate     /etc/letsencrypt/live/ha.example.com/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/ha.example.com/privkey.pem;

  location / {
    proxy_pass         http://127.0.0.1:8007;
    proxy_set_header   Host $host;
    proxy_set_header   X-Real-IP $remote_addr;
    proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header   X-Forwarded-Proto $scheme;
  }
}

Reload Nginx: sudo systemctl reload nginx


Management

Logs

journalctl -u pve-ha-web -e -f

Restart / stop

sudo systemctl restart pve-ha-web
sudo systemctl stop pve-ha-web

Update to latest version

cd /opt/pve-ha-web
git pull --rebase
source venv/bin/activate
pip install -r requirements.txt
deactivate
systemctl restart pve-ha-web

Uninstall

systemctl disable --now pve-ha-web
rm -f /etc/systemd/system/pve-ha-web.service
systemctl daemon-reload
rm -rf /opt/pve-ha-web

Project

Description
No description provided
Readme 267 KiB
Languages
JavaScript 53%
Python 30.1%
HTML 13.1%
CSS 3.8%