um keinen eigenen Cronjob anlegen zu müssen, wurde hier die Installation von Logrotate integriert
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
+-------------------+
| 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.