Last report: {{timeAgo .Customer.ReceivedAt}} · Controller {{.Customer.ControllerVersion}}
{{else}}No reports received yet
{{end}}{{.CustomerID}}
| Name | State | CPU | Memory |
|---|---|---|---|
| {{index . "name"}} | {{index . "state"}} | {{printf "%.1f" (index . "cpu_percent")}}% | {{printf "%.0f" (index . "memory_mb")}} MB |
| Alkalmazás | Engedélyezett országok |
|---|---|
| {{$app}} | {{$ac := index $override "allowed_countries"}} {{if $ac}}{{range $i, $c := $ac}}{{if $i}}, {{end}}{{$c}}{{end}}{{else}}—{{end}} |
Reporting has been disabled on this node
Enable it in the controller's controller.yaml: hub.enabled: true
Customer is blocked
{{else}} {{with .Report.health}}Status: {{index . "status"}}
{{$issues := index . "issues"}} {{if $issues}}This customer has been configured but no controller report has been received yet.
Use one of the setup commands below to deploy the controller on the customer node.
{{.Config.RetrievalPassword}}
{{.Config.APIKey}}
Day-0 host bootstrap. Run on a freshly-PVE-installed Proxmox host as root
(create the customer in the hub first). It enrolls the host, installs + verifies the agent,
and provisions the guest; the in-guest controller then pulls its own controller.yaml.
The retrieval passphrase is entered at the no-echo prompt — never on the command line.
Fetches the script over TLS from felhom.eu, then runs it. Download-then-run (not
curl | sudo bash) so you can inspect the script before executing it — the
right default for a sovereignty product. The passphrase is entered at the no-echo prompt.
curl -fsSL https://felhom.eu/scripts/felhom-host-install.sh -o felhom-host-install.sh \
&& sudo bash felhom-host-install.sh --customer-id {{.CustomerID}}
sudo ./felhom-host-install.sh --customer-id {{.CustomerID}}
The same payload the controller pulls itself — for inspection, not normal provisioning.
curl -fsSL https://hub.felhom.eu/api/v1/config/{{.CustomerID}} -H "X-Retrieval-Password: {{.Config.RetrievalPassword}}" -o controller.yaml
Loading preview...
Controller updates are agent-driven (the version floor above) and config is delivered by the box pulling it on a config change — the hub never connects into the box. Edit the config via the Edit button (top of page); the controller re-pulls and restarts on its next report.
| Time | Severity | Type | Message | Source |
|---|---|---|---|---|
| {{.CreatedAt.Format "Jan 02 15:04"}} | {{.Severity}} | {{.EventType}} |
{{.Message}} | {{.Source}} |
No events recorded yet.
{{end}}| App | Memory (current) | Memory (avg 7d) | Memory (peak 7d) | Catalog Limit | Errors | Warnings |
|---|---|---|---|---|---|---|
| {{if .DisplayName}}{{.DisplayName}}{{else}}{{.AppName}}{{end}} | {{formatFloat .MemoryCurrentMB}} MB | {{formatFloat .MemoryAvgMB}} MB | {{formatFloat .MemoryPeakMB}} MB | {{if .CatalogLimit}}{{.CatalogLimit}}{{else}}—{{end}} | {{if gt .LogErrors 0}}{{.LogErrors}}{{else}}0{{end}} | {{if gt .LogWarnings 0}}{{.LogWarnings}}{{else}}0{{end}} |
The non-secret re-provision plan — guest sizing, drive inventory (durable-id → role → mount → intent), PVE storage defs, PBS coordinates, and app inventory + storage bindings. It complements escrow (keys) and PBS/restic (bytes): it contains no key, password, or token. Use it to rebuild the host/guest/storage scaffolding before the PBS bytes land.
| Time | Channel | Event | Status | Message |
|---|---|---|---|---|
| {{.CreatedAt.Format "Jan 02 15:04"}} | {{.Channel}} | {{.EventType}} | {{.Status}} | {{.Message}} |
| Time | Status | CPU | Memory |
|---|---|---|---|
| {{.ReceivedAt.Format "Jan 02 15:04"}} | {{.HealthStatus}} | {{formatFloat .CPUPercent}}% | {{formatFloat .MemoryPercent}}% |