This repository serves as the immutable source of configurations for my personal homelab and is deployed using ArgoCD. The configurations contained in the repository self-manage ArgoCD as well as the applications. With various operators like external-dns, cert-manager, and metallb, this homelab pretty much manages itself. Once set up, there is zero intervention required to keep things running.
Applications are divided into ArgoCD projects by their respective types.
setup
- Required base components used to operate the cluster and deployments.- ArgoCD Application Definitions:
argocd/applications/setup
- Configurations:
configs/setup/
- ArgoCD Application Definitions:
external
- Externally facing applications.- ArgoCD Application Definitions:
argocd/applications/external
- Configurations:
configs/external/
- ArgoCD Application Definitions:
internal
- Internal-only applications.- ArgoCD Application Definitions:
argocd/applications/internal
- Configurations:
configs/internal/
- ArgoCD Application Definitions:
argocd
- The GitOps operator responsible for managing the clustercert-manager
- Automatic SSL certificate generation, configured for Cloudflareexternal-dns
- Automatically create DNS entries, configured for Lets Encryptk8s-gateway
- CoreDNS controller pluginmetacontroller
- For rapid prototyping an deployment of custom controllersmetallb
- A loadbalancer for non-cloud deploymentsmetrics-server
- Reports resource usage when runningkubectl top
nfs-subdir-provisioner
- Automatically provisions subdirectories against an NFS sharenginx-ingress
- The ingress controller for the cluster (Offical Kubernetes Ingress)sealed-secrets
- A controller for encrypting and decrypting secretstnsr-controller
- A homebrew controller that automatically adds firewall and NAT rules
chia-node
- A Chia node for the Chia cryptocurrencycontact-api
- A small API to submit form data from my website to an SMTP relayghost
- Blogging softwaremain-site
- Combines the Bitnami Nginx and Error Pages charts to deploy my websiteminio
- An S3 compliant object storage systemombi
- A multimedia request platform for Plexpaperless
- A document management systemplex
- A multimedia serverseafile
- Self-hosted cloud storage system
nzbget
- A Usenet download platformradarr
- Automatically search, download, and manage moviessonarr
- Automatically search, download, and manage television seriessmtp
- A local SMTP relay to centralize a point in the cluster from which to send emailstdarr
- An automatic multimedia transcoderunifi
- The Uniquiti Unifi controller for managing Ubiquiti network devices
ArgoCD needs to be manually bootstrapped before it can self-manage. The only pre-requisite is a Kubernetes cluster with a CNI installed. All other required components will be install after bootstrapping.
kubectl apply -k configs/setup/argocd/
kubectl apply -f argocd/app-of-apps.yaml -n argocd
The above commands will deploy ArgoCD and the app-of-apps
application which will be used to discover and deploy all other applications out of this repository. From this point forward, ArgoCD will also self-manage. Any updates to configs/setup/argocd/
will be automatically discovered and applied.
All secrets are encrypted and stored in this repository using sealed-secrets by Bitnami. Only I hold the decryption keys for the secrets in this repository. If you are using this repository as the basis for you own homelab or Kubernetes cluster, be aware that none of the sealed secrets here will unseal for you. You will need seal your own secrets and replace mine. As a result, if you try to deploy the applications contained in this repository using my configurations, the application will most likely be broken.