Turborepo + pnpm monorepo for k3s homelab cluster on Intel NUCs. - Apps: Next.js web frontend, Express API (TypeScript, Dockerfiles, k8s manifests) - Packages: shared UI, ESLint config, TypeScript config, Drizzle DB schemas - Infra/Ansible: bare-metal provisioning with roles for common, k3s-server, k3s-agent, hardening - Infra/Kubernetes: ArgoCD GitOps (app-of-apps + ApplicationSets), platform components (cert-manager, Traefik, CloudNativePG, Valkey, Longhorn, Sealed Secrets), namespaces - Observability: kube-prometheus-stack, Loki, Promtail as ArgoCD Applications - CI/CD: GitHub Actions for PR builds, preview deploys, production deploys - DX: Taskfile, utility scripts, copier templates, Ubiquiti network docs
75 lines
1.9 KiB
Markdown
75 lines
1.9 KiB
Markdown
# Homelab
|
|
|
|
Monorepo for self-hosted applications running on a k3s cluster across Intel NUC machines.
|
|
|
|
## What's Inside
|
|
|
|
- **Apps**: Next.js frontend, Express API (TypeScript)
|
|
- **Infrastructure**: Ansible provisioning, ArgoCD GitOps, full Kubernetes platform
|
|
- **Observability**: Prometheus, Grafana, Loki
|
|
|
|
## Prerequisites
|
|
|
|
- [Node.js](https://nodejs.org/) >= 20
|
|
- [pnpm](https://pnpm.io/) >= 9
|
|
- [go-task](https://taskfile.dev/) >= 3
|
|
- [kubectl](https://kubernetes.io/docs/tasks/tools/) >= 1.31
|
|
- [Helm](https://helm.sh/) >= 3.16
|
|
- [Ansible](https://docs.ansible.com/) >= 2.16
|
|
- [kubeseal](https://github.com/bitnami-labs/sealed-secrets) >= 0.27
|
|
|
|
## Quick Start
|
|
|
|
```bash
|
|
# Install dependencies
|
|
pnpm install
|
|
|
|
# Start development
|
|
task dev
|
|
|
|
# Build all apps
|
|
task build
|
|
```
|
|
|
|
## Bootstrap Cluster (Day 1)
|
|
|
|
1. Flash Ubuntu Server 24.04 on NUCs, configure SSH access
|
|
2. Configure Ubiquiti Cloud Gateway (see `infra/ubiquiti/`)
|
|
3. Provision nodes and install k3s:
|
|
```bash
|
|
task cluster:bootstrap
|
|
task cluster:kubeconfig
|
|
```
|
|
4. Install platform components:
|
|
```bash
|
|
task platform:install
|
|
```
|
|
5. Seal initial secrets:
|
|
```bash
|
|
task secrets:seal
|
|
```
|
|
6. Push an app — ArgoCD handles the rest
|
|
|
|
## Branch Deploys
|
|
|
|
Push a branch or open a PR → GitHub Actions builds changed apps → ArgoCD creates a preview namespace → merge to main deploys to production.
|
|
|
|
## Project Structure
|
|
|
|
```
|
|
homelab/
|
|
├── apps/ # Deployable applications
|
|
├── packages/ # Shared libraries
|
|
├── infra/
|
|
│ ├── ansible/ # Bare-metal provisioning
|
|
│ ├── kubernetes/ # K8s manifests (ArgoCD, platform, observability)
|
|
│ └── ubiquiti/ # Network documentation
|
|
├── scripts/ # Utility scripts
|
|
├── templates/ # App scaffolding templates
|
|
└── Taskfile.yaml # Task runner
|
|
```
|
|
|
|
## License
|
|
|
|
Private — All rights reserved.
|