Don't pay money to use services, host them yourself.
This repository provides the configuration to deploy a collection of useful services to your own local Kubernetes cluster. For an easier deployment helmfile is used.
To use this, you need a local kubernetes cluster installed (for example through minikube or k3s), and the following tools:
The services listed here are considered user-facing services, used by multiple clients with different platforms (mobile, web, computer).
| Service | Description |
|---|---|
| Jellyfin | The Free Software Media System |
| Nextcloud | Cloud Storage |
| Pi-hole | Network-wide Ad Blocking |
| VaultWarden | Bitwarden compatible server |
The services listed here are used by the cluster to enable and manage internal and external communication.
| Service | Description |
|---|---|
| Bitnami ExternalDNS | Automatic DNS for Pi-hole |
| Ingress-Nginx Controller | Ingress for local network |
| Longhorn | Distributed block storage (used as storage for Nextcloud) |
| MetalLB | Load balancer |
For monitoring purposes, the PLTG Stack (Prometheus, Loki, Tempo, Grafana) is provided, consisting of:
- Monitoring: Prometheus
- Log aggregation: Loki
- Tracing: Tempo
- Observability: Grafana
Some services might have additional requirements, be it installed tools, or deployed resources.
Update the default password:
kubectl create secret generic pihole-password \
--from-literal=password='new_password_here' \
--namespace=pihole-system \
--dry-run=client -o yaml | kubectl apply -f -Before you deploy to your cluster, you need to prepare it:
- Install / verify Helm dependencies:
make helm-depsDeploying to a cluster is as simple as running:
make helm-installImportant: Afterwards also apply the kustomizations by running:
make kustomizeTo help you bootstrap a production-grade lightweight kubernetes cluster, the Makefile provides three different targets:
Installing a minimal k3s cluster:
servicelbis disabled in favour of usingmetallbtraefikis disabled in favour of monitoring withgrafanalocal-storageis disabled in favour of usinglonghorn
make k3s-installCopying over the kubeconfig to your local ~/.kube/config:
make k3s-configTearing down the installed k3s cluster and deleting all installed files:
make k3s-uninstall