A learning journey into building cloud-native infrastructure for Go.
Project Platform is an experimental project where we are exploring how to build a hosting environment for Go applications. It is not a finished product, but a sandbox for learning about Kubernetes, serverless patterns, and infrastructure-as-code.
Important
Learning Project: This is a work in progress and is currently used for educational purposes. It is not intended for production use. We are figuring things out as we go!
- Go & Kubernetes: Understanding how to build and orchestrate Go services effectively.
- Serverless Patterns: Experimenting with Knative for "scale to zero" and event-driven architectures.
- Infrastructure as Code: Practicing with Terraform, Packer, and Task to manage complex setups.
- Security Sandboxing: Learning about gVisor, KubeArmor, and Kyverno for hardening workloads.
- Observability: Setting up and tuning the VictoriaMetrics and Loki stack.
- GitOps: ArgoCD for declarative application management.
This stack represents what we are currently playing with:
- Language: Go 1.22+
- Build Tools: ko and Docker
- Routing: chi (v5)
- Database: PostgreSQL (CloudNativePG)
- Auth: WorkOS (OIDC)
- Orchestration: K3s
- Provisioning: Terraform & Packer
- Providers: Hetzner Cloud & DigitalOcean
- Serverless: Knative Serving & Eventing
- Security: gVisor, KubeArmor, Kyverno
- Networking: Cilium & NATS
.
├── core/ # Go API & CLI Logic
│ ├── cmd/ # Entry points
│ ├── internal/ # Private application code
│ └── pkg/ # SDK experiments
├── database/ # Migrations & SQLC
├── infra/ # IaC experiments
│ ├── packer/ # Image builds
│ ├── platform/ # Kubernetes manifests
│ └── terraform/ # Cloud resources
├── web/ # Next.js
└── Runbook.md # Operational notes
If you want to poke around the project:
-
Clone the repo:
git clone https://github.com/kendricklawton/project-platform.git cd project-platform -
Setup Environment: Copy
.env.exampleto.envand add your local/dev credentials. -
Local DB:
task db:setup
-
Run the API:
cd core/cmd/platform-api go run main.go
- See Runbook.md for how we are thinking about operating this.
- This project is a messy work-in-progress—expect things to break!
Just learning by doing.