index geändert

This commit is contained in:
Martin 2025-12-14 19:48:29 +01:00
parent cce072dad3
commit f9d94cf170

161
index.md
View File

@ -1,161 +0,0 @@
# deploy.sh
## Was ist `deploy.sh` und wofür ist es gedacht?
`deploy.sh` ist ein kleines, bewusst simples Hilfsskript, das zwei Dinge standardisiert:
1. Docker-Stacks reproduzierbar aus dem Git-Repo nach `/srv` ausrollen
2. Updates einheitlich durchführen (Images ziehen, Container neu starten)
Es ist **kein Deployment-Framework**, kein CI/CD-Ersatz und keine Magie.
Es ist ein Werkzeug, das den im Projekt definierten **Mini-Standard** automatisiert.
---
## Typische Anwendungsfälle
### Einzelnen Stack deployen
Mit diesem Befehl wird ein einzelner Stack aus dem Repository ausgerollt:
```bash
./scripts/deploy.sh n8n
```
Das Skript macht dabei:
- holt den neuesten Stand aus dem Git-Repo (`git pull`)
- kopiert `docker-compose.yml` nach `/srv/n8n/`
- lässt eine vorhandene `.env` **unangetastet**
- zieht Images und startet Container neu
- zeigt am Ende den Status
Die Docker-Kommandos, die dafür (pro Stack) ausgeführt werden, sind:
```bash
docker compose pull
docker compose up -d
docker compose ps
```
---
### Alle Stacks aktualisieren
```bash
./scripts/deploy.sh --all
```
Geeignet für regelmäßige Updates oder Wartungsfenster.
---
### Verfügbare Stacks anzeigen
```bash
./scripts/deploy.sh --list
```
---
## Grundprinzip
- **Git ist der Soll-Zustand**
- `/srv/<stack>` ist der Ist-Zustand
- `deploy.sh` bringt beides zusammen
- `.env` bleibt immer lokal und wird nie überschrieben
---
## Minimalistische Implementierung
Datei: `scripts/deploy.sh`
```bash
#!/usr/bin/env bash
set -euo pipefail
REPO_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
STACKS_DIR="$REPO_ROOT/stacks"
TARGET_ROOT="/srv"
usage() {
echo "Usage:"
echo " $0 <stackname> Deploy one stack (e.g. n8n)"
echo " $0 --all Deploy all stacks"
echo " $0 --list List stacks"
exit 1
}
list_stacks() {
find "$STACKS_DIR" -maxdepth 1 -mindepth 1 -type d -printf "%f\n" | sort
}
deploy_stack() {
local stack="$1"
local src="$STACKS_DIR/$stack"
local dst="$TARGET_ROOT/$stack"
if [[ ! -d "$src" ]]; then
echo "ERROR: Stack '$stack' not found in $STACKS_DIR"
exit 2
fi
if [[ ! -d "$dst" ]]; then
echo "ERROR: Target dir '$dst' does not exist."
echo "Create it first:"
echo " sudo mkdir -p $dst && sudo chown -R $USER:$USER $dst"
exit 3
fi
echo "==> Deploying stack: $stack"
cp "$src/docker-compose.yml" "$dst/docker-compose.yml"
if [[ -f "$src/.env.example" && ! -f "$dst/.env" ]]; then
echo "NOTE: $dst/.env is missing. Create it from .env.example."
fi
( cd "$dst" && docker compose pull && docker compose up -d )
( cd "$dst" && docker compose ps )
echo
}
main() {
cd "$REPO_ROOT"
git pull --ff-only
if [[ "${1:-}" == "--list" ]]; then
list_stacks
exit 0
fi
if [[ "${1:-}" == "--all" ]]; then
while read -r s; do
deploy_stack "$s"
done < <(list_stacks)
exit 0
fi
[[ $# -eq 1 ]] || usage
deploy_stack "$1"
}
main "$@"
```
Ausführbar machen:
```bash
chmod +x scripts/deploy.sh
```
---
## Was `deploy.sh` bewusst nicht tut
- keine `.env` erzeugen, verändern oder überschreiben
- keine Daten- oder Volume-Ordner anfassen
- keine Firewall- oder Proxy-Änderungen vornehmen
- keine Secrets ins Git schreiben
---