A GitOps-managed homelab infrastructure using ArgoCD and Helm charts for deploying media server applications on Kubernetes.
This repository contains the GitOps configuration for a personal homelab setup, managing various media server applications through ArgoCD. The infrastructure is designed to be declarative, version-controlled, and automatically synchronized with the Kubernetes cluster.
- ArgoCD: GitOps operator for continuous deployment
- Helm Charts: Package manager for Kubernetes applications
- Traefik: Ingress controller for external access
- Sealed Secrets: Encrypted secrets management
- Let's Encrypt: Automated SSL certificate provisioning
akxr-gitops/
├── charts/
│ ├── core/ # Base Helm chart for applications
│ ├── deployment/ # Chart that generates ArgoCD Application resources
│ ├── production/ # Production-specific chart templates
│ └── staging/ # Staging-specific chart templates
├── environments/
│ ├── core/ # Core/production applications
│ │ ├── deployment/ # App list for core environment
│ │ ├── jellyfin/
│ │ ├── sonarr/
│ │ └── ...
│ ├── production/ # Production-specific apps
│ └── staging/ # Staging apps
├── manifests/
│ ├── core.yaml # Root ArgoCD Application for core environment
│ ├── production.yaml # Root ArgoCD Application for production
│ ├── staging.yaml # Root ArgoCD Application for staging
│ └── argocd/ # ArgoCD configuration (certificates, ingress, etc.)
└── secrets/ # Encrypted secrets management
- Root Applications (
manifests/*.yaml): Bootstrap ArgoCD Applications that point to thecharts/deploymentchart - Deployment Chart (
charts/deployment/): Generates ArgoCD Application resources for each app defined in environment values - Environment Values (
environments/{env}/deployment/values.yaml): Lists all apps for an environment with their chart paths and value files - App Values (
environments/{env}/{app}/values.yaml): Application-specific configuration - Core Chart (
charts/core/): Base Helm chart that renders Kubernetes resources (Deployment, Service, Ingress, etc.)
The following applications are managed through this GitOps setup:
- Jellyfin: Media server for streaming movies and TV shows
- Jellyseerr: Request management for Jellyfin
- Sonarr: TV series management and automation
- Radarr: Movie management and automation
- Prowlarr: Indexer manager for Sonarr and Radarr
- qBittorrent: BitTorrent client
- FlareSolverr: Proxy for bypassing Cloudflare protection
- ntfy: Push notifications server
- Docker Registry: Private container registry
- Kubernetes cluster with ArgoCD installed
- kubectl configured to access the cluster
- kubeseal for secret encryption
- Helm 3.x
This repo is also being used by Students in WAGMI. You can deploy your apps by following these steps:
git clone https://github.com/your-username/akxr-gitops.git
cd akxr-gitopsYou will have to dockerize your service and push it to DockerHub or another public repository.
Follow the instructions in secrets/readme.md to set up encrypted secrets for your applications.
To add a new application to an environment:
-
Create application values file:
mkdir -p environments/{core|production|staging}/your-app cp environments/staging/example/values.yaml environments/{core|production|staging}/your-app/values.yaml -
Configure your application in
environments/{env}/your-app/values.yaml:- Update container image and tag (from step 2)
- Update ingress hosts to match your domain
- Configure resource limits and requests
- Set up persistent volumes for data storage
- Adjust environment-specific settings
-
Register the app in
environments/{env}/deployment/values.yaml:apps: - name: your-app path: charts/core valueFiles: - ../../environments/{env}/your-app/values.yaml
-
Commit and push - ArgoCD will automatically sync the changes
Applications are configured to use the pixr.in domain with subdomains:
tv.pixr.in- Jellyfinsonarr.pixr.in- Sonarrradarr.pixr.in- Radarr- And more...
Update these domains in the respective values.yaml files to match your setup.
Also add your domain to the manifests/argocd/certificates.yaml file so that certificates can be issued for your domain.
The setup uses hostPath volumes for persistent storage:
- Configuration data:
/home/thisisamank/{app-name}/ - Media data:
/mnt/hetzner/data/
Adjust these paths in the application values files to match your storage setup.
The repository supports multiple environments:
- core: Production media server applications
- production: Production-specific applications
- staging: Staging/test applications
Each environment has its own ArgoCD Application manifest in manifests/ and its own app configurations in environments/.
- Secrets are encrypted using Sealed Secrets
- SSL certificates are automatically managed via Let's Encrypt
- Applications run with non-root user contexts where supported
- Fork the repository
- Create a feature branch
- Make your changes
- Test the configuration
- Submit a pull request
This project is for personal use. Please ensure you comply with the licenses of the applications being deployed.