| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
| Name | Name | Last commit date | ||
|---|---|---|---|---|
Self-service infrastructure for small teams. One sysadmin sets it up once; developers get their own test/dev machines through a web dashboard — no more "hey can you spin up a VM for me."
Runs entirely on your own hardware. No cloud account required, no per-minute billing, no vendor lock-in.
git clone https://github.com/casablanque-code/platform-infra.git
cd platform-infra
cp platform.config.example.yml platform.config.ymlEdit platform.config.yml:
Then:
sudo bash setup.shThis deploys the control plane, sets all secrets, and (for Incus) installs and configures everything needed on the current machine. At the end it prints the command to register your self-hosted GitHub Actions runner — run that on the same machine as Incus.
Open the dashboard URL it gives you, sign in with the admin key, create your first environment.
| Provider | Status | Notes |
|---|---|---|
| Incus | ✅ Working | LXC containers, runs on a single server. First and only fully implemented provider. |
| Proxmox | 🚧 Not implemented | Stub exists in providers/proxmox/, see NOTES.md there for what's needed. |
| Cloud (Hetzner etc.) | 🚧 Not implemented | Stub exists in providers/cloud/, see NOTES.md there. |
platform.config.yml's provider.type selects which one setup.sh uses. Proxmox and cloud currently fail with a clear error pointing at their NOTES.md — they were deliberately left as stubs with a defined contract (same tfvars/outputs shape as Incus) rather than half-implemented.
Both are LXC containers on Incus — not full VMs. For most dev/test workloads this is indistinguishable in practice (same SSH, same Docker, same everything), but keep it in mind if you need kernel-level isolation or non-Linux guests.
Services installed via actions (Portainer, Uptime Kuma, pgAdmin) can be exposed through Cloudflare Tunnel instead of opening firewall ports. Fill in cloudflare_tunnel.* in platform.config.yml to enable it — leave domain blank to skip.
SSH access for provisioning and actions always goes over your normal network path; the tunnel only covers the services themselves.
workers/control-plane/ Cloudflare Worker — API, auth, D1 schema
apps/dashboard/ React dashboard
providers/ One folder per provider: provider.json (+ NOTES.md for stubs)
templates/ One folder per template: template.json, runtime.json, tofu/
bootstrap/ Shell scripts run over SSH after provisioning
.github/workflows/ provision.yml, destroy.yml, action.yml
_archive/ Retired code kept for reference (old cloud provider
stubs, mock gateway) — not part of the running system
MIT
| Back | FazBrowse Home | New Git URL |