{{template "inline_confirm_js"}}
{{template "icon_sprite"}}Last report: {{timeAgo .Customer.ReceivedAt}} · Controller {{.Customer.ControllerVersion}}
{{else}}No reports received yet
{{end}}pvesm status must show the PBS entry active. A converged agent can report applied while the storage still authenticates 401 (R-39).
{{else if eq .Flash "offsite_frozen"}}Offsite storage FROZEN (read-only) — new backups and prune will fail until unfrozen.
{{else if eq .Flash "offsite_unfrozen"}}Offsite storage unfrozen — read-write restored.
{{else if eq .Flash "blocked"}}Customer blocked — hidden from Dashboard.
{{else if eq .Flash "unblocked"}}Customer unblocked — visible on Dashboard again.
{{else if eq .Flash "log_tail_requested"}}Log tail requested — the controller delivers it on its next report cycle (a few minutes). A customer-visible event line was recorded.
{{else if eq .Flash "claim-resent"}}Code re-sent to the registered address. A kód a doboz következő jelentésekor (~15 percen belül) aktiválódik.
{{else if eq .Flash "claim-resend-failed"}}Claim code resend FAILED — check the hub log (email delivery / send error).
{{else if eq .Flash "selfbind-sent"}}Self-bind link sent to the registered address — valid for 7 days. The customer enters the box's console pairing code + their retrieval passphrase; no operator bind needed.
{{else if eq .Flash "selfbind-no-email"}}Self-bind link NOT sent — this customer has no registered email address. Set one first, or bind the appliance manually from the Hosts page.
{{else if eq .Flash "selfbind-send-failed"}}Self-bind link send FAILED — the link was invalidated (not left live). Check the hub log (email delivery / send error).
{{else if eq .Flash "reset_done"}}Customer RESET complete — every operational trace was destroyed (offsite repo, PBS namespace, DR recipe, claim state, retained escrow custody). Identity and basic config survive; the audit event stream records it.
{{end}}
{{.Customer.ControllerVersion}}
Last report {{timeAgo .Customer.ReceivedAt}}
Containers {{.Customer.ContainerRunning}}/{{.Customer.ContainerTotal}}
{{end}}
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.
{{.CustomerID}}
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}}| Name | State | CPU | Memory |
|---|---|---|---|
| {{index . "name"}} | {{index . "state"}} | {{printf "%.1f" (index . "cpu_percent")}}% | {{printf "%.0f" (index . "memory_mb")}} MB |
| App | Memory (current) | Memory (avg 7d) | Memory (peak 7d) | Catalog Limit | Errors | Warnings | Logs |
|---|---|---|---|---|---|---|---|
| {{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}} | {{if index $.PendingTails .AppName}} tail pending {{else}} {{end}} |
| App | Collected | Received | Lines | |
|---|---|---|---|---|
| {{.AppName}} | {{.CollectedAt.Format "2006-01-02 15:04:05"}} ({{timeAgo .CollectedAt}}) | {{timeAgo .ReceivedAt}} | {{len .Lines}} | View Download .log |
Container and app data appear once the first report arrives.
••••••••••••••••
{{.Config.APIKey}}
Day-0 host bootstrap for host-install {{.ScriptVersion}}. 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.
pct list+qm list; blank = default/auto
Download-then-run (not curl | sudo bash) so you can inspect the script first —
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}} --mode <appliance|byo>
sudo ./felhom-host-install.sh --customer-id {{.CustomerID}} --mode <appliance|byo>
The same payload the controller pulls itself — for inspection, not normal provisioning. Replace the placeholder with the Retrieval Password above (Reveal to see it) — it is intentionally NOT baked into this command.
curl -fsSL https://hub.felhom.eu/api/v1/config/{{.CustomerID}} -H "X-Retrieval-Password: <YOUR-RETRIEVAL-PASSWORD>" -o controller.yaml
Loading preview...
No managed config yet — create one from the Overview tab to get setup commands.
No managed config yet — create one with the Create Config button above.
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 in the form above; the controller re-pulls and restarts on its next report.
| 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}} |
Controller update and geo-restriction settings appear once the first report arrives.
Egyetlen művelettel visszaállítja az ügyfelet az első telepítés előtti állapotba: minden működési állapot törlődik (offsite tároló, PBS névtér, DR-recept, egyszeri jelszó, azonosítási állapot). Az azonosság és az alapkonfiguráció megmarad (ügyfélrekord, előzmények, események). Ez NEM törli a hostokat — ha még van host, előbb azt kell törölni. Kevesebb, mint a Danger zone Delete: az ügyfél megmarad, csak a működési nyomok tűnnek el.
Blocking hides the customer from the Dashboard (reports are still accepted); deleting removes the managed configuration permanently — and permanently removes the retained recovery-key custody (escrow blobs) for this customer's hosts. This is the one true purge point; host deletion only demotes custody, never destroys it.
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.
No DR recipe yet — it assembles from the host-report and controller report.
Backup and DR data appear once the first report arrives.
| Time | Severity | Type | Message | Source |
|---|---|---|---|---|
| {{.CreatedAt.Format "Jan 02 15:04"}} | {{.Severity}} | {{.EventType}} |
{{.Message}} | {{.Source}} |
No events recorded yet.
{{end}}| Time | Status | CPU | Memory |
|---|---|---|---|
| {{.ReceivedAt.Format "Jan 02 15:04"}} | {{.HealthStatus}} | {{formatFloat .CPUPercent}}% | {{formatFloat .MemoryPercent}}% |
Events appear once the first report arrives.
| Time | Channel | Event | Status | Message |
|---|---|---|---|---|
| {{.CreatedAt.Format "Jan 02 15:04"}} | {{.Channel}} | {{.EventType}} | {{.Status}} | {{.Message}} |
Notification data appears once the first report arrives.
No host enrolled yet.
A host appears here once it enrolls via the Day-0 bootstrap.