diff --git a/scripts/README.md b/scripts/README.md new file mode 100644 index 0000000..f3b8d5e --- /dev/null +++ b/scripts/README.md @@ -0,0 +1,223 @@ +# Pingu Infrastructure + +Zentrale Infrastruktur- und Deployment-Repository für: +- Raspberry Pis +- Linux Server +- Cloudsysteme +- Docker Hosts +- Automatisierte Updates & Deployments + +Die Systeme ziehen regelmäßig automatisch den aktuellen Stand aus dem Gitea-Repository und synchronisieren Skripte und Konfigurationen. + +--- + +# Architektur + +```text + +-------------------+ + | Gitea Server | + | 10.200.200.2:2222 | + +---------+---------+ + | + WireGuard VPN + | + +-----------------+-----------------+ + | | ++-------+--------+ +---------+--------+ +| Raspberry Pis | | Cloud / VPS | +| Heimnetz | | IONOS / Internet | ++----------------+ +------------------+ +Voraussetzungen +Allgemein +Debian / Ubuntu basiertes Linux +Netzwerkzugriff auf den Gitea-Server +SSH-Key in Gitea hinterlegt +Git installiert +Optional +Docker + Docker Compose +WireGuard VPN +SSH-Key vorbereiten +SSH-Key erzeugen +ssh-keygen -t ed25519 +Public Key anzeigen +cat ~/.ssh/id_ed25519.pub +Key in Gitea hinzufügen + +Gitea: + +Profil +Settings +SSH Keys +Add Key +Git installieren +sudo apt update +sudo apt install git -y +Repository klonen +Standard +sudo mkdir -p /opt/pingu +sudo chown -R $USER:$USER /opt/pingu +git clone ssh://git@10.200.200.2:2222/kai/pingu-infra.git /opt/pingu/repo +Verzeichnisstruktur +/opt/pingu/ +├── logs/ +│ ├── deploy.log +│ └── update.log +└── repo/ + ├── scripts/ + ├── docker/ + └── configs/ +Deploy-Prozess + +Das Deploy-Skript aktualisiert: + +Repository +Skripte +Berechtigungen +Deploy manuell starten +bash /opt/pingu/repo/scripts/deploy.sh +Deploy per Cronjob +Raspberry / interne Systeme +*/15 * * * * /opt/pingu/repo/scripts/deploy.sh >> /opt/pingu/logs/deploy.log 2>&1 +Cloudserver +0 * * * * /opt/pingu/repo/scripts/deploy.sh >> /opt/pingu/logs/deploy.log 2>&1 + +Cronjob bearbeiten: + +crontab -e +Update-Prozess + +Das Update-Skript: + +führt apt updates durch +prüft Docker Updates +aktualisiert Systempakete +loggt Ergebnisse +Manuell starten +bash /opt/pingu/repo/scripts/update.sh +Sudo-Rechte für Update-Skript + +Damit apt ohne Passwort funktioniert: + +sudo visudo + +Hinzufügen: + +kai ALL=(ALL) NOPASSWD: /usr/bin/apt, /usr/bin/apt-get +WireGuard Setup (Cloudzugriff) +Ziel + +Cloudserver greifen sicher auf interne Dienste zu: + +Gitea +Pi-hole +Interne APIs +Docker Services +Beispiel Netzwerk +Gerät WireGuard IP +Gitea/Home Server 10.200.200.2 +Cloudserver 10.200.200.1 +Heimserver Config + +Datei: + +/etc/wireguard/wg0.conf +[Interface] +Address = 10.200.200.2/24 +PrivateKey = HOME_PRIVATE_KEY + +[Peer] +PublicKey = CLOUD_PUBLIC_KEY +AllowedIPs = 10.200.200.1/32 +Endpoint = CLOUD_IP:51820 +PersistentKeepalive = 25 +Cloudserver Config +[Interface] +Address = 10.200.200.1/24 +PrivateKey = CLOUD_PRIVATE_KEY +ListenPort = 51820 + +[Peer] +PublicKey = HOME_PUBLIC_KEY +AllowedIPs = 10.200.200.2/32 +PersistentKeepalive = 25 +WireGuard starten +sudo systemctl enable wg-quick@wg0 +sudo systemctl restart wg-quick@wg0 +Verbindung testen +ping 10.200.200.2 +sudo wg +Docker Systeme +Docker installieren +sudo apt install docker.io docker-compose-plugin -y +Docker Compose Update Workflow +Compose-Verzeichnis öffnen +cd /opt/paperless +Backup erstellen +PostgreSQL Dump +sudo bash -c 'docker exec paperless-db-1 pg_dump -U paperless paperless > ~/paperless_backup.sql' +Neue Images herunterladen +sudo docker compose pull +Container neu erstellen +sudo docker compose up -d +Status prüfen +sudo docker ps +Logs prüfen +sudo docker logs -f paperless-webserver-1 +Docker Cleanup + +Nicht mehr benötigte Images entfernen: + +sudo docker image prune -a +Logrotate +Konfiguration erstellen +sudo nano /etc/logrotate.d/pingu-deploy + +Inhalt: + +/opt/pingu/logs/*.log { + weekly + rotate 4 + compress + missingok + notifempty + copytruncate +} +Nützliche Befehle +Git Status +git -C /opt/pingu/repo status +Remote prüfen +git -C /opt/pingu/repo remote -v +Repository aktualisieren +git -C /opt/pingu/repo pull +Docker Container anzeigen +sudo docker ps +WireGuard Status +sudo wg +Troubleshooting +Permission denied bei apt + +Script nicht als root gestartet oder fehlende sudo-Regeln. + +Git fragt nach Passwort + +SSH-Key fehlt oder nicht in Gitea hinterlegt. + +WireGuard kein Handshake + +Prüfen: + +Firewall +UDP 51820 +Endpoint +AllowedIPs +Hinweise +Deploy-Skripte laufen absichtlich simpel. +Docker Updates werden bewusst nicht automatisch durchgeführt. +Produktivsysteme sollten vor Updates gesichert werden. +WireGuard ermöglicht sicheren Zugriff ohne öffentliche Freigaben interner Dienste. +Philosophie + +Kleine Infrastruktur. +Wenig Overhead. +Maximal nachvollziehbar. +Lieber einfache Bash-Skripte als unnötige Komplexität. \ No newline at end of file