225 lines
4.7 KiB
Markdown
225 lines
4.7 KiB
Markdown
# 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. |