diff --git a/scripts/README.md b/scripts/README.md new file mode 100644 index 0000000..f7e5fc8 --- /dev/null +++ b/scripts/README.md @@ -0,0 +1,15 @@ +deploy.sh war als kleiner, dummer Helfer gedacht, der dir zwei nervige Dinge abnimmt: + +Stacks reproduzierbar aus dem Repo nach /srv ausrollen (ohne Copy-Paste-Orgie) + +Updates standardisiert fahren (pull + up, optional healthcheck) + +Also kein „Kubernetes für Arme“, sondern ein Skript, das deinen Mini-Standard automatisiert, wenn du willst. + +Typische Use-Cases bei dir + +Du änderst docker-compose.yml im Repo und willst es sauber nach /srv/ übernehmen. + +Du willst auf dem Server „alle Stacks updaten“: Images pullen, Container neu starten, kurz prüfen. + +Du willst einen neuen Server aufsetzen: Repo klonen, .env anlegen, deploy laufen lassen, fertig. diff --git a/scripts/deploy.sh b/scripts/deploy.sh new file mode 100644 index 0000000..9268cd4 --- /dev/null +++ b/scripts/deploy.sh @@ -0,0 +1,69 @@ +#!/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. 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" + + # safety hint only + if [[ -f "$src/.env.example" && ! -f "$dst/.env" ]]; then + echo "NOTE: $dst/.env is missing. Create it from .env.example before starting." + 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 "$@"