distribute READMEs

This commit is contained in:
2024-07-21 10:37:55 -04:00
parent e6aff894e8
commit 60eb1e26a0
15 changed files with 196 additions and 261 deletions

187
README.md
View File

@@ -10,19 +10,6 @@ A project to store homelab stuff.
- [Supported Projects](#supported-projects) - [Supported Projects](#supported-projects)
- [Graduation Requirements](#graduation-requirements) - [Graduation Requirements](#graduation-requirements)
- [Retirement Requirements](#retirement-requirements) - [Retirement Requirements](#retirement-requirements)
- [Apps (TODO: Move these into their respective folders)](#apps-todo-move-these-into-their-respective-folders)
- [Gitea](#gitea)
- [Staging](#staging)
- [Install](#install)
- [Minecraft](#minecraft)
- [Testing](#testing)
- [Nimcraft](#nimcraft)
- [Courtnie](#courtnie)
- [Snapdrop](#snapdrop)
- [Jellyfin](#jellyfin)
- [Iperf3](#iperf3)
- [Wordpress](#wordpress)
- [Grafana](#grafana)
## Project Lifecycle ## Project Lifecycle
@@ -55,7 +42,9 @@ All projects will fall into one of the following categories:
- kubernetes - kubernetes
Hardware will contain projects that relate to specific machines or equipment. 3D printers, Raspberry Hardware will contain projects that relate to specific machines or equipment. 3D printers, Raspberry
Pis, and other IOT devices qualify as specialized hardware that needs documentation and configuration. Pis, and other IOT devices qualify as specialized hardware that needs documentation and
configuration. This is not limited to computer equipment. The furnace is an important part of the
home lab. the Air Conditioner is integral to the homelab's function. These projects will also be documented.
Infrastructure will contain projects that set up the environments for the remaining listed project Infrastructure will contain projects that set up the environments for the remaining listed project
types. For example, infrastructure will contain "how to set up a linux box with docker" or "how to types. For example, infrastructure will contain "how to set up a linux box with docker" or "how to
@@ -87,173 +76,3 @@ Kubernetes projects are helm, kustomize, kubectl, or some other kubernetes compl
- [ ] A reason for retirement is documented - [ ] A reason for retirement is documented
- [ ] If applicable, a replacement has been identified and documented - [ ] If applicable, a replacement has been identified and documented
- [ ] If applicable, backup data locations are documented - [ ] If applicable, backup data locations are documented
## Apps (TODO: Move these into their respective folders)
### 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
<https://grafana.com/docs/grafana/latest/setup-grafana/installation/kubernetes/>
Grafana has a kubernetes yaml they prefer you use. See `kubectl/grafana.yaml`.
```bash
kubectl apply -f kubectl/grafana.yaml
```

View File

@@ -1,3 +1,7 @@
# Ansible Inventory
This project lives outside the typical project structures as a means of tracking inventory.
## Install ## Install
```bash ```bash

View File

@@ -0,0 +1 @@
# AWS SES

View File

@@ -10,3 +10,9 @@
6. Set Device Name 6. Set Device Name
7. Enable Bluetooth Gateway 7. Enable Bluetooth Gateway
8. Update Firmware 8. Update Firmware
### Reset
Resetting is super finnicky. You'll need to plug it in, press and hold the power button until the
red light flashes quickly (not slowly, that's a reboot). You'll probably have to do it multiple
times because they seem to reboot halfway through the reset process.

View File

@@ -19,13 +19,6 @@
- [Test Minecraft Server](#test-minecraft-server) - [Test Minecraft Server](#test-minecraft-server)
- [Automatic Updates](#automatic-updates) - [Automatic Updates](#automatic-updates)
- [Database Backups](#database-backups) - [Database Backups](#database-backups)
- [Quickstart](#quickstart)
- [Help](#help)
- [Troubleshooting](#troubleshooting)
- [Deleting a stuck namespace](#deleting-a-stuck-namespace)
- [Fixing a bad volume](#fixing-a-bad-volume)
- [Mounting an ix-application volume from truenas](#mounting-an-ix-application-volume-from-truenas)
- [Mounting a volume](#mounting-a-volume)
- [Uninstall](#uninstall) - [Uninstall](#uninstall)
## Guide ## Guide
@@ -104,24 +97,24 @@ scp kube:/etc/rancher/k3s/k3s.yaml ~/.kube/admin-kube-config
```bash ```bash
# Download the updated template from github # Download the updated template from github
kubectl kustomize "github.com/rancher/local-path-provisioner/deploy?ref=v0.0.28" > local-path-provisioner/local-path-storage.yaml kubectl kustomize "github.com/rancher/local-path-provisioner/deploy?ref=v0.0.28" > kubernetes/incubating/local-path-provisioner/local-path-storage.yaml
# Apply customizations (ssd/hdd storage, read write many support) # Apply customizations (ssd/hdd storage, read write many support)
kubectl kustomize local-path-provisioner | kubectl apply -f - kubectl kustomize kubernetes/incubating/local-path-provisioner/local-path-provisioner | kubectl apply -f -
# Create test pod # Create test pod
kubectl apply -f k3s/tests/local-storage-test.yaml kubectl apply -f infrastructure/graduated/k3s/tests/local-storage-test.yaml
``` ```
## Coredns ## Coredns
1. Edit `coredns/values.yaml` to ensure the forward nameserver is correct. 1. Edit `kubernetes/graduated/coredns/values.yaml` to ensure the forward nameserver is correct.
```bash ```bash
# Install CoreDNS # Install CoreDNS
helm upgrade --install \ helm upgrade --install \
--namespace=kube-system \ --namespace=kube-system \
--values coredns/values.yaml \ --values kubernetes/graduated/coredns/values.yaml \
coredns coredns/coredns coredns coredns/coredns
# Test DNS works # Test DNS works
@@ -188,7 +181,7 @@ you can list them. We're only going to use one because we want to port forward f
```bash ```bash
# create the metallb allocation pool # create the metallb allocation pool
kubectl apply -f metallb/addresspool.yaml kubectl apply -f kubernetes/graduated/metallb/addresspool.yaml
``` ```
You'll need to annotate your service as follows if you want an external IP: You'll need to annotate your service as follows if you want an external IP:
@@ -231,9 +224,9 @@ EOF
kubectl create secret generic external-dns \ kubectl create secret generic external-dns \
--namespace kube-system --from-file secrets/externaldns-credentials --namespace kube-system --from-file secrets/externaldns-credentials
kubectl apply -f external-dns/sa.yaml kubectl apply -f kubernetes/graduated/external-dns/sa.yaml
kubectl apply -f external-dns/deploy.yaml kubectl apply -f kubernetes/graduated/external-dns/deploy.yaml
``` ```
### Annotation ### Annotation
@@ -256,7 +249,7 @@ helm repo update
helm upgrade --install \ helm upgrade --install \
ingress-nginx \ ingress-nginx \
ingress-nginx/ingress-nginx \ ingress-nginx/ingress-nginx \
--values ingress-nginx/values.yaml \ --values kubernetes/graduated/ingress-nginx/values.yaml \
--namespace kube-system --namespace kube-system
``` ```
@@ -325,16 +318,16 @@ You can test if your ingress is working with:
```bash ```bash
# Navigate to demo.reeseapps.com # Navigate to demo.reeseapps.com
kubectl apply -f k3s/tests/ingress-nginx-test.yaml kubectl apply -f infrastructure/graduated/k3s/tests/ingress-nginx-test.yaml
# Cleanup # Cleanup
kubectl delete -f k3s/tests/ingress-nginx-test.yaml kubectl delete -f infrastructure/graduated/k3s/tests/ingress-nginx-test.yaml
``` ```
## Test Minecraft Server ## Test Minecraft Server
```bash ```bash
helm upgrade --install minecraft ./minecraft -n minecraft --create-namespace helm upgrade --install minecraft kubernetes/graduated/minecraft -n minecraft --create-namespace
``` ```
## Automatic Updates ## Automatic Updates
@@ -345,7 +338,7 @@ helm upgrade --install minecraft ./minecraft -n minecraft --create-namespace
kubectl create namespace system-upgrade kubectl create namespace system-upgrade
kubectl apply -f https://github.com/rancher/system-upgrade-controller/releases/latest/download/system-upgrade-controller.yaml kubectl apply -f https://github.com/rancher/system-upgrade-controller/releases/latest/download/system-upgrade-controller.yaml
kubectl apply -f https://github.com/rancher/system-upgrade-controller/releases/latest/download/crd.yaml kubectl apply -f https://github.com/rancher/system-upgrade-controller/releases/latest/download/crd.yaml
kubectl apply -f k3s/upgrade-plan.yaml kubectl apply -f infrastructure/graduated/k3s/upgrade-plan.yaml
# Check plan # Check plan
kubectl get plan -n system-upgrade kubectl get plan -n system-upgrade
@@ -369,60 +362,8 @@ k3s server \
--cluster-reset-restore-path=/var/lib/rancher/k3s/server/db/snapshots/on-demand-kube-1720459685 --cluster-reset-restore-path=/var/lib/rancher/k3s/server/db/snapshots/on-demand-kube-1720459685
``` ```
### Quickstart
```bash
# Create certsigner pod for all other operations
./setup.sh <server_fqdn>
# Create a user, use "admin" to create an admin user
./upsertuser.sh <ssh_address> <server_fqdn (for kubectl)> <user>
# Remove a user, their namespace, and their access
./removeuserspace <server_fqdn> <user>
```
## Help
### Troubleshooting
#### Deleting a stuck namespace
```bash
NAMESPACE=nginx
kubectl proxy &
kubectl get namespace $NAMESPACE -o json |jq '.spec = {"finalizers":[]}' >temp.json
curl -k -H "Content-Type: application/json" -X PUT --data-binary @temp.json 127.0.0.1:8001/api/v1/namespaces/$NAMESPACE/finalize
```
#### Fixing a bad volume
```bash
xfs_repair -L /dev/sdg
```
#### Mounting an ix-application volume from truenas
```bash
# set the mountpoint
zfs set mountpoint=/ix_pvc enc1/ix-applications/releases/gitea/volumes/pvc-40e27277-71e3-4469-88a3-a39f53435a8b
#"unset" the mountpoint (back to legacy)
zfs set mountpoint=legacy enc1/ix-applications/releases/gitea/volumes/pvc-40e27277-71e3-4469-88a3-a39f53435a8b
```
#### Mounting a volume
```bash
# mount
mount -t xfs /dev/zvol/enc0/dcsi/apps/pvc-d5090258-cf20-4f2e-a5cf-330ac00d0049 /mnt/dcsi_pvc
# unmount
umount /mnt/dcsi_pvc
```
## Uninstall ## Uninstall
```bash ```bash
/usr/local/bin/k3s-uninstall.sh /usr/local/bin/k3s-uninstall.sh
``` ```

View File

@@ -0,0 +1,69 @@
# 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 kubernetes/graduated/gitea/gitea-values.yaml \
--namespace gitea \
--create-namespace
```
## Backup and Restore
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
```

View File

@@ -0,0 +1,13 @@
# Iperf3
This creates a basic iperf3 server.
## Install
```bash
helm upgrade --install \
iperf3 \
./kubernetes/graduated/iperf3 \
--namespace iperf3 \
--create-namespace
```

View File

@@ -0,0 +1,11 @@
# Jellyfin
## Install
```bash
helm upgrade --install \
jellyfin \
./kubernetes/graduated/jellyfin \
--namespace jellyfin \
--create-namespace
```

View File

@@ -0,0 +1,36 @@
# 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 \
./kubernetes/graduated/minecraft \
--namespace minecraft \
--create-namespace
```
## Nimcraft
```bash
helm upgrade --install \
nimcraft \
./kubernetes/graduated/minecraft \
--namespace minecraft \
--create-namespace
```
## Courtnie
```bash
helm upgrade --install \
courtniecraft \
./kubernetes/graduated/minecraft \
--namespace minecraft \
--create-namespace
```

View File

@@ -0,0 +1,13 @@
# Snapdrop
Snapdrop is a file sharing app that allows airdrop-like functionality over the web
## Install
```bash
helm upgrade --install \
snapdrop \
./kubernetes/graduated/snapdrop \
--namespace snapdrop \
--create-namespace
```

View File

@@ -8,7 +8,7 @@ helm repo update
helm upgrade --install my-grafana grafana/grafana \ helm upgrade --install my-grafana grafana/grafana \
--namespace monitoring \ --namespace monitoring \
--create-namespace \ --create-namespace \
--values grafana/values.yaml --values kubernetes/incubating/grafana/values.yaml
kubectl get secret --namespace monitoring my-grafana -o jsonpath="{.data.admin-password}" | base64 --decode ; echo kubectl get secret --namespace monitoring my-grafana -o jsonpath="{.data.admin-password}" | base64 --decode ; echo
``` ```
@@ -25,5 +25,5 @@ helm upgrade --install \
kube-prometheus-stack \ kube-prometheus-stack \
prometheus-community/kube-prometheus-stack \ prometheus-community/kube-prometheus-stack \
--namespace kube-system \ --namespace kube-system \
--values grafana/helm-prom-stack-values.yaml --values kubernetes/incubating/grafana/helm-prom-stack-values.yaml
``` ```

View File

@@ -0,0 +1,18 @@
# 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.
## Install
```bash
helm upgrade --install \
wordpress \
-f kubernetes/incubating/bitnami/wordpress.yaml \
--set wordpressUsername=admin \
--set wordpressPassword=password \
--set mariadb.auth.rootPassword=secretpassword \
oci://registry-1.docker.io/bitnamicharts/wordpress
```

View File

@@ -10,5 +10,5 @@ records in route53.
<https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html> <https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html>
```bash ```bash
ansible-playbook -i ansible/inventory.yaml ddns/install_ddns.yaml ansible-playbook -i ansible/inventory.yaml systemd/graduated/ddns/install_ddns.yaml
``` ```

View File

@@ -16,7 +16,7 @@ This project pairs with the ddns service. Set that up first!
4. Run the following ansible script: 4. Run the following ansible script:
```bash ```bash
ansible-playbook -i ansible/inventory.yaml ipv4-proxy/nginx.yaml ansible-playbook -i ansible/inventory.yaml systemd/graduated/ipv4-proxy/nginx.yaml
``` ```
## Logging ## Logging

View File

@@ -2,6 +2,10 @@
<https://help.ui.com/hc/en-us/articles/220066768-Updating-and-Installing-Self-Hosted-UniFi-Network-Servers-Linux> <https://help.ui.com/hc/en-us/articles/220066768-Updating-and-Installing-Self-Hosted-UniFi-Network-Servers-Linux>
## Prereqs
This runs best on Ubuntu 20.04. See `infrastructure/graduated/ubuntu`.
## Install ## Install
```bash ```bash