---
title: "HP Elitedesk 800 G3 — Proxmox Setup Log"
aliases: [elitedesk-proxmox, homelab-server]
tags: [proxmox, homelab, hp-elitedesk, setup-log]
created: 2026-04-18
updated: 2026-04-21
status: configured
---

## Hardware

| Component | Spec |
|-----------|------|
| Model | HP Elitedesk 800 G3 |
| CPU | Intel i5-7500 (4c/4t, VT-x + VT-d, AVX2, no HT) |
| RAM | 24 GB DDR4 |
| Storage | 256 GB NVMe SSD + 6 TB HDD |
| GPU | AMD Radeon HD 8490 (display only, GCN 1.0) |
| iGPU | Intel HD 630 (CPU integrated) |
| Network | 192.168.1.48 (static, SSH alias: `ssh pve`) |

## Disk Strategy

- **256 GB NVMe** → Proxmox OS + `local-lvm` (LVM-thin)
- **6 TB HDD** → `data-hdd` (LVM-thin, large/cold data)
- **USB HDD (931 GB)** → `usb-backup` (vzdump backups)

## Storage Layout

| ID | Type | Content | Disk |
|----|------|---------|------|
| `local` | Directory | ISO, templates, backups | NVMe |
| `local-lvm` | LVM-Thin | VM + CT disks | NVMe (237 GB) |
| `data-hdd` | LVM-Thin | VM + CT disks | HDD (5.88 TB) |
| `usb-backup` | Directory | vzdump backups | USB HDD |

## LXC Containers (as of 2026-04-21)

| VMID | Name | IP | RAM | Services |
|------|------|----|-----|----------|
| 100 | ollama | 192.168.1.127 | 6 GB | Ollama :11434 (qwen2.5:3b, CPU inference ~10 tok/s) |
| 101 | adguard | 192.168.1.62 | 512 MB | AdGuard Home DNS |
| 102 | docker | 192.168.1.225 | 6 GB | NPM :81, Portainer :9443, Nextcloud :8080, Karakeep :3000, Prometheus :9090, Loki :3100, node-exporter :9100, monitoring-agent :9111, Alertmanager :9093 |
| 104 | vaultwarden | 192.168.1.104 | 512 MB | Vaultwarden → passwords.ai-impress.com |
| 107 | homarr | 192.168.1.224 | 2 GB | Homarr dashboard |
| 109 | grafana | 192.168.1.88 | 2 GB | Grafana :3000 → grafana.ai-impress.com |
| 110 | uptimekuma | 192.168.1.171 | 1 GB | Uptime Kuma :3001 (admin: http://192.168.1.171:3001/dashboard) |

### Deleted containers

| VMID | Name | Destroyed | Backup |
|------|------|-----------|--------|
| CT100 | erpnext | 2026-04-21 | usb-backup |
| CT106 | monica | 2026-04-21 | usb-backup |
| CT105 | n8n | moved to CT102 docker | — |
| CT103 | homarr (old) | broken 502 | — |
| CT108 | termix | empty | — |

## VMs

| VMID | Name | RAM | Notes |
|------|------|-----|-------|
| 200 | kali-linux | 8 GB | onboot=0 (manual start only) |

## Network

- DNS: AdGuard Home at `192.168.1.62`
- Domain: `ai-impress.com` via Cloudflare
- NPM: http://192.168.1.225:81 (admin@ai-impress.com)
- Public proxy hosts: home, nextcloud, passwords, flow, links, grafana, status

## Monitoring Stack (CT102 /opt/monitoring/)

```
Prometheus (:9090) ──────┐
node-exporter (:9100)    ├──► Alertmanager (:9093) ──► monitoring-agent (:9111)
Proxmox node-exp (:9101) ┘                                     │
                                                         Telegram Bot
Uptime Kuma webhooks ─────────────────────────────────► monitoring-agent
```

- **Prometheus**: scrapes CT102 node-exporter + Proxmox :9101 + Grafana + Ollama
- **Alertmanager**: routes fired alerts to monitoring-agent webhook
- **monitoring-agent**: FastAPI app, Python. Receives webhooks → formats → Telegram. Has inline "Scale RAM" button with human-approval gate before any `pct set`.
- **Loki**: running, but Promtail not configured (no logs flowing yet)
- **node-exporter**: CT102 :9100 + Proxmox host :9101
- Files: `/opt/monitoring/` (docker-compose, prometheus.yml, alert_rules.yml, alertmanager.yml, loki-config.yml)
- Agent files: `/opt/monitoring-agent/` (FastAPI app, .env [mode 0600, not git], SSH key)

### Alert rules

| Alert | Condition | Severity |
|-------|-----------|----------|
| HighRamUsage | RAM > 85% for 5m | warning |
| HighCpuUsage | CPU > 90% for 5m | warning |
| DiskSpaceLow | Root disk < 15% free for 5m | warning |
| HighServerPower | RAPL psys > 80W for 10m | info |
| NodeExporterDown | up == 0 for 1m | critical |
| PrometheusDown | up == 0 for 1m | critical |

## Grafana Dashboards (CT109, grafana.ai-impress.com)

### Power & Cost (uid: power-cost)
- Source: `node_rapl_psys_joules_total{instance="proxmox"}` — rate() gives watts directly
- **Bug fixed 2026-04-21**: panels showed kW instead of W — removed `* 1000` from all PromQL
- Panels: CPU Package gauge, System (psys) gauge, Wattage time-series, kWh Today, £ Projected this Month, CPU Temp & Power overlay
- Tariff variable: `$tariff_gbp_per_kwh` (default: 0.25)
- ~25-30W idle, ~£55/year at £0.25/kWh

### System Overview (uid: system-overview)
- CPU usage gauge + per-core time-series
- RAM usage gauge + memory time-series
- Disk I/O time-series + disk space bargauge
- CPU core temps (coretemp)
- Component temps: AMD GPU, NVMe, board
- AMD GPU fan PWM
- GPU utilization panels (require radeontop textfile-collector cron — see pending below)

## Electricity Monitoring

- Source: Intel RAPL via node-exporter on Proxmox host
- `rate(node_rapl_psys_joules_total{instance="proxmox"}[5m])` = watts (psys = package + DRAM)
- **Note**: psys covers CPU+DRAM only, not NVMe/HDD/fans/PSU loss. Full-wall measurement requires smart plug (V2: TP-Link KP115 ~£15)
- node-exporter on pve: `/etc/systemd/system/node_exporter.service`, textfile dir at `/var/lib/node_exporter/textfile_collector/`

## GPU Metrics (Infrastructure, pending activation)

- Script: `/usr/local/bin/gpu-metrics.sh` on PVE host — uses radeontop (AMD) + /proc/fdinfo (Intel)
- Writes to textfile_collector for Prometheus scraping
- **Pending**: activate cron `* * * * * root /usr/local/bin/gpu-metrics.sh` in `/etc/cron.d/gpu-metrics`

## Proxmox API Token

- User: root@pam, Token: dashboard, UUID: eb8a4845-5a32-4b07-a0f9-8a9062b2003b

## Proxmox MCP (Claude Code)

- Installed: `~/.claude/mcp-servers/proxmox-mcp/`
- Config: `proxmox-config/config.json` (host 192.168.1.48, root@pam, token dashboard)

## Quick Reference

```bash
# SSH into Proxmox host
ssh pve

# Run command in container
ssh pve "pct exec 102 -- <cmd>"

# Copy file into container (LVM-thin, use pct push)
ssh pve "pct push 102 /tmp/local_file /container/path"

# Check all containers
ssh pve "pct list"

# Check container RAM usage
ssh pve "pct exec 102 -- free -h"

# Resize container RAM (hot-resize for LXC)
ssh pve "pct set 109 -memory 2048"

# Uptime Kuma admin (internal only)
http://192.168.1.171:3001/dashboard
```

## Pending Tasks (2026-04-21)

- [ ] Delete ERPNext (ID 6) and Monica (ID 10) from Uptime Kuma:
  `! ssh pve "pct exec 110 -- sqlite3 /opt/uptime-kuma/data/kuma.db 'DELETE FROM monitor WHERE id IN (6, 10)'"`
- [ ] Remove erpnext + monica tiles from Homarr (http://192.168.1.224:7575)
- [ ] Remove erpnext + monica proxy hosts from NPM (http://192.168.1.225:81)
- [ ] Activate GPU metrics cron: `! ssh pve "echo '* * * * * root /usr/local/bin/gpu-metrics.sh' >> /etc/cron.d/gpu-metrics"`
- [ ] Configure Uptime Kuma → monitoring-agent webhook: Settings → Notifications → add Webhook to `http://192.168.1.225:9111/alert/uptime-kuma`
- [ ] Set up Promtail for Loki log collection
- [ ] Change Grafana admin password (currently admin:admin)

## Related

- [[proxmox-install-setup-2025]] — full step-by-step install guide
- [[wiki/homelab/_index|Homelab Index]]

---

## Setup Log

### 2026-04-21 — Major optimization session

**Deleted:**
- CT106 monica (backup on usb-backup before destroy)
- CT100 erpnext (backup on usb-backup before destroy)

**Created:**
- CT100 ollama — Ollama LXC via community script, IP 192.168.1.127, 6 GB RAM
  - Model: qwen2.5:3b (1.84 GB, ~10.3 tok/s on CPU i5-7500)
  - Note: Intel oneAPI toolkit loads ~1.8 GB at runtime even on CPU — needed 6 GB total

**Updated:**
- CT109 grafana: 512 MB → 2 GB RAM (was at 91% OOM risk)
- CT200 kali-linux: onboot disabled (was draining 8 GB alloc on every boot)
- CT102 docker: added Alertmanager, monitoring-agent containers to /opt/monitoring stack

**Grafana:**
- Fixed Power & Cost dashboard: removed `* 1000` from all watt panels (rate() returns W not kW)
- Added panels: kWh Today, £ Projected this Month, CPU Temp & Power overlay
- Created System Overview dashboard (CPU/RAM/disk/temps/fan/GPU)
- GPU utilization data pending cron activation

**Monitoring agent deployed:**
- FastAPI webhook receiver at CT102:9111
- Prometheus Alertmanager routes to `/alert/prometheus`
- Uptime Kuma webhooks to `/alert/uptime-kuma`
- Telegram bot: sends alerts + inline "Scale RAM" button (human-approval gate, no autonomous action)
- Ollama integration available (OLLAMA_ENABLED=false by default, enable for AI triage)

**GPU metrics infra:**
- Installed radeontop on PVE host
- Created `/usr/local/bin/gpu-metrics.sh` textfile collector
- node-exporter updated with `--collector.textfile.directory`
- Cron pending user confirmation

### 2026-04-19 — USB HDD, Vaultwarden, n8n, Homepage redesign
- External USB HDD (Toshiba 931.5GB) detected as /dev/sdb — was APFS (Mac), reformatted to ext4
- Mounted at /mnt/usb-backup, added to /etc/fstab (nofail), added as Proxmox storage 'usb-backup'
- Weekly backups configured (Sunday 03:00, zstd, snapshot mode, all VMs/LXC)
- WireGuard CT replaced by Tailscale (no dedicated LXC)
- CT 100: ERPNext (was wireguard/dolibarr), IP: 192.168.1.181, port 80
- CT 104: Vaultwarden (Docker), IP: 192.168.1.104, accessible at passwords.ai-impress.com
- CT 105: n8n (Docker), IP: 192.168.1.105, accessible at flow.ai-impress.com
- NPM proxy hosts created (IDs 4, 5) — need Cloudflare DNS records
- Homepage redesigned: 4 sections (Infrastructure, Services, Automation, External)

### 2026-04-18 — Installation complete
- BIOS switched from RAID → AHCI (NVMe was invisible in RAID mode)
- Proxmox VE 9.1.7 installed on NVMe (ext4), kernel 6.17.2-1-pve
- Post-install community script: switched to no-subscription repo, removed nag popup
- 6TB HDD wiped (had NTFS partitions) → LVM-Thin pool `data-hdd` created
- IOMMU enabled: `intel_iommu=on iommu=pt`, vfio modules loaded
- Fail2ban installed, SSH password auth disabled
