SELF-HOSTED INFRASTRUCTURE PLATFORM

Infra in
2 minutes.
No tickets.
No cloud bill.

Open-source self-service platform for small engineering teams. Runs on your own Incus server — not a credit card. One sysadmin sets it up once; everyone else uses the dashboard.

provision · incus · local
# Web UI → select template → create tofu apply incus_instance.node: Creating... incus_instance.node: Created ✓ bootstrap base hardening ✓ docker-ce installed ✓ node registered ✓ outputs captured public_ip: 10.0.4.12 ssh_user: ubuntu ✓ environment ready — elapsed: 1m 42s
<2m
Container ready
$0
Cloud bill
0
Tickets required
TTL
Auto-destroy built in
Real use case
Without this platform
😤
Dev needs staging DB
Opens a ticket. Waits 2 days. Pings DevOps in Slack. Gets a VM with port 5432 open to the world and no backups.
~2 days
Step 1
🖥
Opens the dashboard
Selects PostgreSQL template. Sets expiry. No YAML. No CLI. No Terraform knowledge needed.
0:00
Step 2
⚙️
Platform runs
OpenTofu provisions the container on your Incus server. Bootstrap scripts harden, configure, and register the node.
~2 min
Result
Gets connection string
postgresql://...@host:5432/app — ready, hardened, monitored. Auto-destroys on expiry. No zombie environments.
not 2 days. 2 minutes.
How it works
01
🖥
Web UI
Select template, provider, lifetime. No CLI, no YAML, no git knowledge needed.
0:00
02
⚙️
Provision
OpenTofu creates the container, firewall rules, and a per-environment SSH key on your Incus server.
0:30
03
🔧
Bootstrap
Scripts harden the VM, install Docker, configure services, register node with control plane.
1:30
04
📡
Inventory
Node checks in every 5 minutes. Control plane tracks health, last seen, provider, outputs. Self-cleans when environment is destroyed.
1:58
05
🎛
Runtime actions
Reboot, redeploy, run playbooks — from the dashboard. No SSH manual work needed.
on demand
06
💀
Auto-destroy
TTL expires. Control plane queues destroy. OpenTofu tears down. State cleaned from R2. No zombies.
on schedule
What you get
SELF-HOSTED PROVIDER
Runs on your own server
Incus (LXC containers) today — no cloud account needed, ready in under two minutes on hardware you already have. Proxmox and public cloud providers are next; see below.
SELF-HOSTED
You own everything
Runs on your GitHub Actions and your Cloudflare account. No SaaS vendor. No monthly platform fee. No lock-in. State stored in your own R2 bucket.
AUTO-LIFECYCLE
Resources expire automatically
Every environment has a TTL — 1h to 7 days or manual. Auto-destroy on schedule. No zombie environments silently burning disk.
BOOTSTRAP
Configured from day one
Post-provision hooks run after every apply. Base hardening, Docker, monitoring agent — idempotent scripts, fully customisable per template.
INVENTORY
Live node tracking
Nodes check in after bootstrap and every 5 minutes. Control plane tracks health, IP, provider, last seen. Self-cleaning: node removes itself when environment is destroyed.
ACCESS CONTROL
RBAC + audit log
Admin, operator, viewer roles. API keys with expiry. Every mutation logged in the audit trail. Sensitive outputs (SSH keys, DB passwords) encrypted with AES-GCM in the database.
ZERO TRUST
No open firewall ports
Services like Portainer and pgAdmin are reachable through Cloudflare Tunnel via cfzt — nothing exposed directly to the internet.
Where it runs

One provider working today. We'd rather ship one thing that actually works than claim six that don't.

Provider Status Notes
Incus working LXC containers on a server you control. The only fully implemented provider today.
Proxmox ○ planned Provider contract is defined — see the stub in providers/proxmox/. Contributions welcome.
Cloud (Hetzner, etc.) ○ planned Same story — the interface is ready, the implementation isn't yet.
⚠ Before you start

Incus needs a real virtualization layer — KVM with /dev/kvm present. A container-based VPS (OpenVZ/Virtuozzo) will not work, even if it looks like a normal Linux box. Check with systemd-detect-virt first. 2GB+ RAM recommended.

Platform engineering
without a platform team.

Open source. Self-hosted. Running in under an hour.

git clone https://github.com/casablanque-code/platform-infra

cp platform.config.example.yml platform.config.yml && sudo bash setup.sh



View on GitHub →