Skip to content

Overview

Components

+--------------+
|    ./apps    |
|--------------|
|  ./platform  |
|--------------|       +------------+
|   ./system   |- - - -| ./external |
|--------------|       +------------+
|   ./metal    |
|--------------|
|   HARDWARE   |
+--------------+

Main components:

  • ./metal: bare metal management, install Linux and Kubernetes
  • ./system: critical system components for the cluster (load balancer, storage, ingress, operation tools...)
  • ./platform: essential components for service hosting platform (git, build runners, dashboards...)
  • ./apps: user facing applications
  • ./external (optional): externally managed services

Support components:

  • ./docs: all documentation go here, this will generate a searchable web UI
  • ./scripts: scripts to automate common tasks

Provisioning flow

Everything is automated, after you edit the configuration files, you just need to run a single make command and it will:

  • (1) Build the ./metal layer:
    • Create an ephemeral, stateless PXE server
    • Install Linux on all servers in parallel
    • Build a Kubernetes cluster (based on k3s)
  • (2) Bootstrap the ./system layer:
    • Install ArgoCD and the root app to manage itself and other layers, from now on ArgoCD will do the rest
    • Install the remaining components (storage, monitoring, etc)
  • (3) Build the ./platform layer (Gitea, Grafana, SSO, etc)
  • (4) Deploy applications in the ./apps layer
flowchart TD
  subgraph metal[./metal]
    pxe[PXE Server] -.-> linux[Fedora Server] --> k3s
  end

  subgraph system[./system]
    argocd[ArgoCD and root app]
    nginx[NGINX]
    rook-ceph[Rook Ceph]
    cert-manager
    external-dns[External DNS]
    cloudflared
  end

  subgraph external[./external]
    letsencrypt[Let's Encrypt]
    cloudflare[Cloudflare]
  end

  letsencrypt -.-> cert-manager
  cloudflare -.-> cert-manager
  cloudflare -.-> external-dns
  cloudflare -.-> cloudflared

  subgraph platform[./platform]
    Gitea
    Woodpecker
    Grafana
  end

  subgraph apps[./apps]
    homepage[Homepage]
    jellyfin[Jellyfin]
    matrix[Matrix]
    paperless[Paperless]
  end

  make[Run make] -- 1 --> metal -- 2 --> system -. 3 .-> platform -. 4 .-> apps