scripts/README.md aktualisiert
This commit is contained in:
+265
-69
@@ -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
|
||||||
Reference in New Issue
Block a user