INFRAWEAVER ALPHA

root@proxmox:~#

INFRAWEAVER

A self-hosted, GitOps-driven Kubernetes platform that deploys itself onto your Proxmox host. One command starts a wizard; clicking Deploy provisions three Talos VMs, bootstraps the cluster, generates every credential into OpenBao, and hands back a running platform with SSO, ingress, wildcard TLS, replicated storage, a private git server, CI and a management console.

$ wget -qO- https://raw.githubusercontent.com/Werewolf-p/InfraWeaver-platform/main/scripts/init/setup.sh | bash

MIT licensed 0 secrets in git 3 Talos nodes by default ~10-15 min to a synced cluster

deploy-local.sh — init-vm 10.10.0.90 SYNTHETIC RUNNING

What you need before you start

Nothing is auto-provisioned in the cloud and nothing phones home. You bring a Proxmox host, a domain, and an SSH key. InfraWeaver brings everything above the hypervisor.

8.xPROXMOX VE
32 GBRAM FREE
300 GBSTORAGE FREE
Default node shape and DNS provider support
ItemDefault / supported
Node shape3 × (4 vCPU / 8 GB / 100 GB) = 12 vCPU, 24 GB, 300 GB
Node OSTalos Linux — immutable, no SSH, API-driven
DNS for TLSCloudflare, Route 53, Azure DNS, DigitalOcean, Hetzner — or HTTP-01 with no wildcard
NetworkA bridge reachable from your LAN; MetalLB takes a VIP range on it
CredentialsAn SSH key pair. The wizard can mint the Proxmox API token itself and discards your root password immediately.

THREE WAYS IN, ONE WIZARD:8080

  1. On a Proxmox host The script detects Proxmox and offers to build a dedicated lightweight init VM, or to run the wizard directly on the host.
  2. On any other Linux or macOS machine The wizard starts immediately on port 8080. Your machine only needs to reach the Proxmox API on 8006.
  3. From a clone python3 scripts/init/server.py — same wizard, no download step.

OR SKIP THE UI ENTIRELY

Copy the example env file, fill it in, run the deploy script. The wizard only writes this file.

$ cp .env.example .env && bash scripts/deploy-local.sh

What actually gets installed

Not a wrapper around a managed service. These are the real upstream projects, deployed as ArgoCD Applications, reconciled continuously. Fourteen of them ship on every install.

OPTIONAL GROUPSOFF BY DEFAULT

Toggle these in platform.yaml or from the console. Nothing is installed that you did not ask for.

MonitoringPrometheus, Loki, Alertmanager, Grafana dashboards
External DNSCreates and prunes DNS records through your provider API
Velero + MinIOCluster-level backup to local S3-compatible storage
FalcoRuntime security and threat detection
WazuhSIEM and security event management
HomepageService dashboard — the console already has one built in

ACCESS TIERSENFORCED AT INGRESS

Internal services are not merely unlisted. A Traefik middleware rejects any request whose source IP falls outside your configured ranges, so resolving the name gets an attacker nothing.

public auth.example.com, console.example.com — reachable from the internet OPEN
internal *.int.example.com — ArgoCD, OpenBao, Onedev, Longhorn, Grafana IP-GATED

The six stages between Deploy and a synced cluster

Pick a stage to see what it actually runs. These are the real script names from scripts/; the output is a faithful replay, not a progress animation.

scripts/generate-from-env.sh STAGE 1 / 6

Three models worth understanding before you install

Most of InfraWeaver's behaviour follows from these. If they make sense to you, the rest of the platform will too.

GitOps loop

GitHub is read once, at clone time, and then never again. Your cluster is its own upstream.

  1. GitHub templateCloned exactly once, at deploy time.
  2. Onedev, inside the clusterYour private git server and CI. This becomes the source of truth.
  3. ArgoCDWatches Onedev and reconciles roughly every three minutes.
  4. The clusterTo change an app, push a commit locally. Nothing leaves your network.

Secrets

Every credential is generated at deploy time. The repository contains none, by construction.

  1. .envDeploy-time only, gitignored, never committed.
  2. bootstrap-openbao.shWrites to secret/platform/<service>.
  3. OpenBaoRuns in-cluster. Vault-compatible, fully open source.
  4. External Secrets OperatorExternalSecret CRDs pull from OpenBao into real Kubernetes Secrets.

      

Traffic

One MetalLB VIP, one Traefik, one wildcard certificate, two access tiers.

  1. Your DNS providerexample.com and *.example.com point at your public IP.
  2. Router, port 443Forwarded to the MetalLB Traefik VIP on your LAN.
  3. TraefikRoutes by host. cert-manager keeps the wildcard fresh over ACME DNS-01.
  4. CoreDNS on its own VIPResolves *.example.com to cluster IPs so internal traffic never leaves the LAN.

CLUSTER TOPOLOGY — DEFAULT INSTALL SYNTHETIC

The console it hands you

Once ArgoCD settles, the platform is driven from a web console rather than a pile of kubectl aliases. These views are rebuilt here at production fidelity from the real routes and data shapes — the live console sits behind SSO, so nothing on this page is a capture of a running system.

https://console.example.com/home
Platform overview SYNTHETIC DATA — REPRESENTATIVE, NOT A LIVE CAPTURE

Forty-five apps, installed on demand

Each one is a directory with an application.yaml, optional Helm values and manifests. Install from the console, or scaffold your own with bash scripts/new-app.sh my-app and push to Onedev.

platform.yamlFLIP A FLAG

Feature groups are declarative. Toggling one here rewrites the file on the right, exactly as the console does before committing it to Onedev.


  

Read this before you run it anywhere real

Alpha software — not recommended for production

InfraWeaver is in active alpha and is provided as-is for homelab experimentation and learning. Use at your own risk.

  • It has not undergone an independent third-party security review or penetration test.
  • Do not run it in production, or on any internet-exposed environment you care about, without first commissioning your own security audit and penetration test.
  • APIs, manifests, secrets handling and deploy scripts can change without notice and may contain breaking changes or security gaps.
  • You are responsible for reviewing every component, rotating all generated credentials, and hardening the deployment for your own threat model.

WHAT THE PROJECT DOES DO ABOUT IT

  1. Kyverno admission policies ship enabledNo privileged containers, no host namespaces, no hostPath volumes, all capabilities dropped, non-root enforced, :latest rejected.
  2. Every namespace gets a default-deny network policyGenerated automatically, allowing only intra-namespace traffic, cluster DNS, ingress from Traefik and Prometheus scrape on metrics ports.
  3. A secret-leak gate fails the buildscripts/validate-iac.sh rejects any raw Kubernetes Secret carrying a real value.
  4. Credentials are generated, never shippedNothing in the repository is a working password. The wizard discards your Proxmox root credentials the moment it has minted an API token.

ONE DELIBERATE EXCEPTION

Every forked deployment stores user feedback locally for its own admins and forwards a sanitised copy to a single canonical endpoint, so maintainers can improve the platform for all forks. It is a hardcoded constant with no environment override, documented in the infra README. Everything else in InfraWeaver is a variable.

Start it on a spare box first.

A nested Proxmox VM with 32 GB is enough to watch the whole thing come up. If it breaks, bash scripts/redeploy.sh wipes the cluster and rebuilds it, keeping your .env and users.yaml.

$ curl -sSL https://raw.githubusercontent.com/Werewolf-p/InfraWeaver-platform/main/scripts/init/setup.sh | bash