From f9d94cf17074469cbe1fcc0b7e0e9124ccf8b6dc Mon Sep 17 00:00:00 2001 From: Martin Date: Sun, 14 Dec 2025 19:48:29 +0100 Subject: [PATCH] =?UTF-8?q?index=20ge=C3=A4ndert?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- index.md | 161 ------------------------------------------------------- 1 file changed, 161 deletions(-) delete mode 100644 index.md diff --git a/index.md b/index.md deleted file mode 100644 index bd655e6..0000000 --- a/index.md +++ /dev/null @@ -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/` 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 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 - ----