# Homelab A project to store homelab stuff. ## Table of Contents - [Homelab](#homelab) - [Table of Contents](#table-of-contents) - [Apps](#apps) - [Gitea](#gitea) - [Staging](#staging) - [Install](#install) - [Minecraft](#minecraft) - [Testing](#testing) - [Nimcraft](#nimcraft) - [Courtnie](#courtnie) - [Snapdrop](#snapdrop) - [Jellyfin](#jellyfin) - [Iperf3](#iperf3) - [Wordpress](#wordpress) - [Grafana](#grafana) ## Apps ### Gitea Gitea provides a helm chart [here](https://gitea.com/gitea/helm-chart/). We're not going to modify much, but we are going to solidify some of the default values in case they decide to change things. This is the first chart (besides ingress-nginx) where we need to pay attention to the MetalLB annotation. This has been set in the values.yaml file. #### Staging There is a `gitea-staging.yaml` file with staging values. This should be installed in the `gitea-staging` namespace. Follow the instructions below, but replace the `gitea` namespace with `gitea-staging`. Staging is useful for testing major release upgrades, especially since Gitea tends to change how `values.yaml` is structured. #### Install First we need to create the gitea admin secret ```bash kubectl create namespace gitea kubectl create secret generic gitea-admin-secret \ -n gitea \ --from-literal=username='gitea-admin' \ --from-literal=password="$(pwgen -c -s 64 | head -n 1)" \ --from-literal=email='' ``` ```bash helm repo add gitea-charts https://dl.gitea.io/charts/ helm repo update helm upgrade --install \ gitea \ gitea-charts/gitea \ --values gitea/gitea-values.yaml \ --namespace gitea \ --create-namespace ``` If you need to backup your database you can run: ```bash # Backup kubectl exec -it -n gitea gitea-postgresql-0 -- \ pg_dump \ --no-owner \ --dbname=postgresql://gitea:gitea@localhost:5432 > gitea_backup.db # Take gitea down to zero pods kubectl scale statefulset gitea --replicas 0 # Drop the existing database kubectl exec -it -n gitea gitea-postgresql-0 -- psql -U gitea \c postgres; drop database gitea; CREATE DATABASE gitea WITH OWNER gitea TEMPLATE template0 ENCODING UTF8 LC_COLLATE 'en_US.UTF-8' LC_CTYPE 'en_US.UTF-8'; exit # restore from backup kubectl exec -it -n gitea gitea-postgresql-0 -- \ psql \ postgresql://gitea:gitea@localhost:5432 gitea < gitea_backup.db # Restore gitea to 1 pod kubectl scale statefulset gitea --replicas 1 ``` ### Minecraft Minecraft is available through the custom helm chart (including a server downloader). The example below installs nimcraft. For each installation you'll want to create your own values.yaml with a new port. The server-downloader is called "minecraft_get_server" and is available on [Github](https://github.com/ducoterra/minecraft_get_server). #### Testing ```bash helm upgrade --install \ testcraft \ ./minecraft \ --namespace minecraft \ --create-namespace ``` #### Nimcraft ```bash helm upgrade --install \ nimcraft \ ./minecraft \ --namespace minecraft \ --create-namespace ``` #### Courtnie ```bash helm upgrade --install \ courtniecraft \ ./minecraft \ --namespace minecraft \ --create-namespace ``` ### Snapdrop Snapdrop is a file sharing app that allows airdrop-like functionality over the web ```bash helm upgrade --install \ snapdrop \ ./snapdrop \ --namespace snapdrop \ --create-namespace ``` ### Jellyfin This assumes you have a media NFS share. ```bash helm upgrade --install \ jellyfin \ ./jellyfin \ --namespace jellyfin \ --create-namespace ``` ### Iperf3 This creates a basic iperf3 server. ```bash helm upgrade --install \ iperf3 \ ./iperf3 \ --namespace iperf3 \ --create-namespace ``` ### Wordpress The bitnami wordpress chart allows enough customization to work on a custom K3S server. With some tweaks it's quite good. Use the values in `bitnami/wordpress.yaml` as a starting point. ```bash helm upgrade --install \ wordpress \ -f bitnami/wordpress.yaml \ --set wordpressUsername=admin \ --set wordpressPassword=password \ --set mariadb.auth.rootPassword=secretpassword \ oci://registry-1.docker.io/bitnamicharts/wordpress ``` ### Grafana Grafana has a kubernetes yaml they prefer you use. See `kubectl/grafana.yaml`. ```bash kubectl apply -f kubectl/grafana.yaml ```