28f199f604da6f6900fcc9b47057b9c181e66ff1
Snarfnet Homelab GitOps & Infrastructure as Code
This repository contains declarative configurations for the Snarfnet homelab infrastructure across Kubernetes clusters (spaceport, aerodrome), Docker Swarm (shipyard), Synology NAS storage arrays, and Harvester HCI.
Repository Layout
homelab-gitops/
├── terraform/
│ ├── authentik/ # Authentik Providers, Applications, Proxy ForwardAuth, and Security Policies
│ ├── harvester/ # Declarative VLAN networks, VM templates, and SSH keys
│ ├── shipyard-swarm/ # Docker Swarm stacks (NPM, Gotify, Homebox, Peanut)
│ └── synology/ # Synology shared folders (kubernetes, docker, backups, media) and NFS rules
├── argocd/
│ ├── bootstrap/ # Root App-of-Apps and Project definitions
│ ├── spaceport/ # Applications hosted on spaceport (Gitea, Zabbix, Jenkins, Semaphore, Coder, Homepage)
│ └── aerodrome/ # Applications hosted on aerodrome (Authentik, AWX, Grafana, Uptime Kuma, Longhorn)
└── manifests/ # Raw Kubernetes YAML manifests managed by ArgoCD
├── spaceport/
└── aerodrome/
Terraform State Storage
Terraform state is stored in Gitea's built-in HTTP State Backend:
- Backend URL:
https://git.snarfnet.net/api/packages/snarf/terraform/state/<module> - HTTP Authentication: Basic auth via Gitea account (
snarf)
ArgoCD GitOps Engine
- ArgoCD Server:
https://argo.snarfnet.net(hosted onspaceportin namespaceinfrastructure) - Target Clusters:
- In-cluster (
https://kubernetes.default.svc): Spaceport (sninfr0lnxctl01–04,sninfr0lnxwrk01–06) - Remote cluster (
https://140.44.4.11:6443): Aerodrome (sninfr2lnxctl01–03,sninfr2lnxwrk01–07)
- In-cluster (
- Sync Policy:
automated: { prune: false, selfHeal: true }syncOptions: [ServerSideApply=true, CreateNamespace=true]
- Notifications Pipeline:
- Webhook integration to Gotify (
http://140.44.4.70:8090/message?token=A8aWxGiToPsAuToMaTiO) - Automated failover bridge to Discord channel
#infra-alerts
- Webhook integration to Gotify (
Description
Languages
HCL
100%