scripts/README.md aktualisiert
This commit is contained in:
parent
c5cb20a5bc
commit
aef8402381
@ -1,15 +1,161 @@
|
||||
deploy.sh war als kleiner, dummer Helfer gedacht, der dir zwei nervige Dinge abnimmt:
|
||||
# deploy.sh
|
||||
|
||||
Stacks reproduzierbar aus dem Repo nach /srv ausrollen (ohne Copy-Paste-Orgie)
|
||||
## Was ist `deploy.sh` und wofür ist es gedacht?
|
||||
|
||||
Updates standardisiert fahren (pull + up, optional healthcheck)
|
||||
`deploy.sh` ist ein kleines, bewusst simples Hilfsskript, das zwei Dinge standardisiert:
|
||||
|
||||
Also kein „Kubernetes für Arme“, sondern ein Skript, das deinen Mini-Standard automatisiert, wenn du willst.
|
||||
1. Docker-Stacks reproduzierbar aus dem Git-Repo nach `/srv` ausrollen
|
||||
2. Updates einheitlich durchführen (Images ziehen, Container neu starten)
|
||||
|
||||
Typische Use-Cases bei dir
|
||||
Es ist **kein Deployment-Framework**, kein CI/CD-Ersatz und keine Magie.
|
||||
Es ist ein Werkzeug, das den im Projekt definierten **Mini-Standard** automatisiert.
|
||||
|
||||
Du änderst docker-compose.yml im Repo und willst es sauber nach /srv/<stack> übernehmen.
|
||||
---
|
||||
|
||||
Du willst auf dem Server „alle Stacks updaten“: Images pullen, Container neu starten, kurz prüfen.
|
||||
## Typische Anwendungsfälle
|
||||
|
||||
Du willst einen neuen Server aufsetzen: Repo klonen, .env anlegen, deploy laufen lassen, fertig.
|
||||
### 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
|
||||
|
||||
---
|
||||
|
||||
Loading…
Reference in New Issue
Block a user