scripts/README.md aktualisiert

This commit is contained in:
kai
2026-05-14 15:31:14 +00:00
parent 07e384e17f
commit a9afc88140
+265 -69
View File
@@ -35,31 +35,45 @@ Debian / Ubuntu basiertes Linux
Netzwerkzugriff auf den Gitea-Server Netzwerkzugriff auf den Gitea-Server
SSH-Key in Gitea hinterlegt SSH-Key in Gitea hinterlegt
Git installiert Git installiert
## Optional ## Optional
Docker + Docker Compose Docker + Docker Compose
WireGuard VPN WireGuard VPN
SSH-Key vorbereiten
SSH-Key erzeugen # SSH-Key vorbereiten
## SSH-Key erzeugen
```
ssh-keygen -t ed25519 ssh-keygen -t ed25519
Public Key anzeigen ```
## Public Key anzeigen
```
cat ~/.ssh/id_ed25519.pub cat ~/.ssh/id_ed25519.pub
Key in Gitea hinzufügen ```
## Key in Gitea hinzufügen
Gitea: Gitea:
Profil Profil -> Settings -> SSH Keys -> Add Key
Settings
SSH Keys ---
Add Key
Git installieren # Git installieren
```
sudo apt update sudo apt update
sudo apt install git -y sudo apt install git -y
Repository klonen ```
Standard ---
# Repository klonen
## Standard
```
sudo mkdir -p /opt/pingu sudo mkdir -p /opt/pingu
sudo chown -R $USER:$USER /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 git clone ssh://git@10.200.200.2:2222/kai/pingu-infra.git /opt/pingu/repo
Verzeichnisstruktur ```
---
# Verzeichnisstruktur
/opt/pingu/ /opt/pingu/
├── logs/ ├── logs/
│ ├── deploy.log │ ├── deploy.log
@@ -68,61 +82,86 @@ Verzeichnisstruktur
├── scripts/ ├── scripts/
├── docker/ ├── docker/
└── configs/ └── configs/
Deploy-Prozess
---
# Deploy-Prozess
Das Deploy-Skript aktualisiert: Das Deploy-Skript aktualisiert:
Repository - Repository
Skripte - Skripte
Berechtigungen - Berechtigungen
Deploy manuell starten
## Deploy manuell starten
```
bash /opt/pingu/repo/scripts/deploy.sh bash /opt/pingu/repo/scripts/deploy.sh
Deploy per Cronjob ```
Raspberry / interne Systeme # Deploy per Cronjob
## Raspberry / interne Systeme
```
*/15 * * * * /opt/pingu/repo/scripts/deploy.sh >> /opt/pingu/logs/deploy.log 2>&1 */15 * * * * /opt/pingu/repo/scripts/deploy.sh >> /opt/pingu/logs/deploy.log 2>&1
Cloudserver ```
## Cloudserver
```
0 * * * * /opt/pingu/repo/scripts/deploy.sh >> /opt/pingu/logs/deploy.log 2>&1 0 * * * * /opt/pingu/repo/scripts/deploy.sh >> /opt/pingu/logs/deploy.log 2>&1
```
Cronjob bearbeiten: Cronjob bearbeiten:
```
crontab -e crontab -e
Update-Prozess ```
---
# Update-Prozess
Das Update-Skript: Das Update-Skript:
führt apt updates durch - führt apt updates durch
prüft Docker Updates - prüft Docker Updates
aktualisiert Systempakete - aktualisiert Systempakete
loggt Ergebnisse - loggt Ergebnisse
Manuell starten ## Manuell starten
bash /opt/pingu/repo/scripts/update.sh ```
Sudo-Rechte für Update-Skript - bash /opt/pingu/repo/scripts/update.sh
```
---
# Sudo-Rechte für Update-Skript
Damit apt ohne Passwort funktioniert: Damit apt ohne Passwort funktioniert:
```
sudo visudo sudo visudo
```
Hinzufügen: Hinzufügen:
```
kai ALL=(ALL) NOPASSWD: /usr/bin/apt, /usr/bin/apt-get kai ALL=(ALL) NOPASSWD: /usr/bin/apt, /usr/bin/apt-get
WireGuard Setup (Cloudzugriff) ```
Ziel ---
# WireGuard Setup (Cloudzugriff)
## Ziel
Cloudserver greifen sicher auf interne Dienste zu: Cloudserver greifen sicher auf interne Dienste zu:
Gitea - Gitea
Pi-hole - Pi-hole
Interne APIs - Interne APIs
Docker Services - Docker Services
Beispiel Netzwerk
Gerät WireGuard IP ---
# Beispiel Netzwerk
## Gerät WireGuard IP
Gitea/Home Server 10.200.200.2 Gitea/Home Server 10.200.200.2
Cloudserver 10.200.200.1 Cloudserver 10.200.200.1
Heimserver Config
---
# Heimserver Config
Datei: Datei:
```
/etc/wireguard/wg0.conf /etc/wireguard/wg0.conf
```
```
[Interface] [Interface]
Address = 10.200.200.2/24 Address = 10.200.200.2/24
PrivateKey = HOME_PRIVATE_KEY PrivateKey = HOME_PRIVATE_KEY
@@ -132,7 +171,9 @@ PublicKey = CLOUD_PUBLIC_KEY
AllowedIPs = 10.200.200.1/32 AllowedIPs = 10.200.200.1/32
Endpoint = CLOUD_IP:51820 Endpoint = CLOUD_IP:51820
PersistentKeepalive = 25 PersistentKeepalive = 25
```
Cloudserver Config Cloudserver Config
```
[Interface] [Interface]
Address = 10.200.200.1/24 Address = 10.200.200.1/24
PrivateKey = CLOUD_PRIVATE_KEY PrivateKey = CLOUD_PRIVATE_KEY
@@ -142,40 +183,82 @@ ListenPort = 51820
PublicKey = HOME_PUBLIC_KEY PublicKey = HOME_PUBLIC_KEY
AllowedIPs = 10.200.200.2/32 AllowedIPs = 10.200.200.2/32
PersistentKeepalive = 25 PersistentKeepalive = 25
WireGuard starten ```
---
# WireGuard starten
```
sudo systemctl enable wg-quick@wg0 sudo systemctl enable wg-quick@wg0
sudo systemctl restart wg-quick@wg0 sudo systemctl restart wg-quick@wg0
Verbindung testen ```
---
# Verbindung testen
```
ping 10.200.200.2 ping 10.200.200.2
sudo wg sudo wg
Docker Systeme ```
Docker installieren ---
# Docker Systeme
## Docker installieren
```
sudo apt install docker.io docker-compose-plugin -y sudo apt install docker.io docker-compose-plugin -y
Docker Compose Update Workflow ```
Compose-Verzeichnis öffnen ---
# Docker Compose Update Workflow
## Compose-Verzeichnis öffnen
```
cd /opt/paperless cd /opt/paperless
Backup erstellen ```
PostgreSQL Dump ---
# Backup erstellen
## PostgreSQL Dump
```
sudo bash -c 'docker exec paperless-db-1 pg_dump -U paperless paperless > ~/paperless_backup.sql' sudo bash -c 'docker exec paperless-db-1 pg_dump -U paperless paperless > ~/paperless_backup.sql'
Neue Images herunterladen ```
---
# Neue Images herunterladen
```
sudo docker compose pull sudo docker compose pull
Container neu erstellen ```
---
# Container neu erstellen
```
sudo docker compose up -d sudo docker compose up -d
Status prüfen ```
---
# Status prüfen
```
sudo docker ps sudo docker ps
Logs prüfen ```
---
# Logs prüfen
```
sudo docker logs -f paperless-webserver-1 sudo docker logs -f paperless-webserver-1
Docker Cleanup ```
---
# Docker Cleanup
Nicht mehr benötigte Images entfernen: Nicht mehr benötigte Images entfernen:
```
sudo docker image prune -a sudo docker image prune -a
Logrotate ```
Konfiguration erstellen ---
# Logrotate
## Konfiguration erstellen
```
sudo nano /etc/logrotate.d/pingu-deploy sudo nano /etc/logrotate.d/pingu-deploy
```
Inhalt: Inhalt:
```
/opt/pingu/logs/*.log { /opt/pingu/logs/*.log {
weekly weekly
rotate 4 rotate 4
@@ -184,18 +267,34 @@ Inhalt:
notifempty notifempty
copytruncate copytruncate
} }
Nützliche Befehle ```
Git Status ---
# Nützliche Befehle
## Git Status
```
git -C /opt/pingu/repo status git -C /opt/pingu/repo status
Remote prüfen ```
## Remote prüfen
```
git -C /opt/pingu/repo remote -v git -C /opt/pingu/repo remote -v
Repository aktualisieren ```
## Repository aktualisieren
```
git -C /opt/pingu/repo pull git -C /opt/pingu/repo pull
Docker Container anzeigen ```
## Docker Container anzeigen
```
sudo docker ps sudo docker ps
WireGuard Status ```
## WireGuard Status
```
sudo wg sudo wg
Troubleshooting ```
## Troubleshooting
Permission denied bei apt Permission denied bei apt
Script nicht als root gestartet oder fehlende sudo-Regeln. Script nicht als root gestartet oder fehlende sudo-Regeln.
@@ -222,4 +321,101 @@ Philosophie
Kleine Infrastruktur. Kleine Infrastruktur.
Wenig Overhead. Wenig Overhead.
Maximal nachvollziehbar. Maximal nachvollziehbar.
Lieber einfache Bash-Skripte als unnötige Komplexität. Lieber einfache Bash-Skripte als unnötige Komplexität.
# Logrotate
Die Deploy- und Update-Logs wachsen dauerhaft mit.
Um zu verhindern, dass Logdateien über Monate oder Jahre unendlich groß werden, wird logrotate verwendet.
Die Logrotate-Konfiguration wird zentral über das Git-Repository verteilt und automatisch installiert.
---
# Repository Struktur
```text
repo/
├── scripts/
│ ├── deploy.sh
│ ├── update.sh
│ └── install-logrotate.sh
├── configs/
│ └── logrotate/
│ └── pingu
Logrotate Konfiguration
Datei im Repository:
configs/logrotate/pingu
Inhalt:
/opt/pingu/logs/*.log {
weekly
rotate 4
compress
missingok
notifempty
copytruncate
}
Installationsskript
Datei:
scripts/install-logrotate.sh
Inhalt:
#!/bin/bash
set -euo pipefail
REPO_DIR="/opt/pingu/repo"
echo "[INFO] Installiere logrotate config..."
sudo cp "$REPO_DIR/configs/logrotate/pingu" /etc/logrotate.d/pingu
sudo chmod 644 /etc/logrotate.d/pingu
echo "[OK] Logrotate config installiert"
Integration in deploy.sh
Im deploy.sh wird das Installationsskript automatisch ausgeführt.
Beispiel:
echo "Install logrotate config..."
bash "$REPO_DIR/scripts/install-logrotate.sh"
Dadurch werden Änderungen an der Logrotate-Konfiguration automatisch auf alle Systeme verteilt.
Funktion
Die Konfiguration sorgt dafür:
Rotation einmal pro Woche
4 alte Logs werden behalten
alte Logs werden komprimiert
fehlende Logs erzeugen keinen Fehler
laufende Prozesse können weiterloggen
Logrotate testen
Konfiguration prüfen:
sudo logrotate -d /etc/logrotate.d/pingu
Rotation erzwingen:
sudo logrotate -f /etc/logrotate.d/pingu
Typische Logdateien
/opt/pingu/logs/deploy.log
/opt/pingu/logs/update.log
Vorteile dieses Ansatzes
zentrale Verwaltung über Git
automatische Verteilung
keine manuelle Pflege auf einzelnen Systemen
identisches Verhalten auf allen Hosts
leicht erweiterbar für weitere Systemconfigs