From a5995857e87702015766823a1487af92a81c7102 Mon Sep 17 00:00:00 2001 From: Alexander Schmidt Date: Sat, 7 Feb 2026 17:55:12 +0100 Subject: [PATCH] feat: add rsync deploy script with documentation --- README.md | 19 ++++++++++++++++++- deploy.sh | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 67 insertions(+), 1 deletion(-) create mode 100755 deploy.sh diff --git a/README.md b/README.md index 04bfdec..2a0e974 100644 --- a/README.md +++ b/README.md @@ -114,7 +114,24 @@ Für Produktion werden nur diese Dateien benötigt: └── assets/ ``` -**Nicht deployen:** `tests/`, `docs/`, `AGENTS.md`, `README.md`, `.git/` +**Nicht deployen:** `tests/`, `docs/`, `AGENTS.md`, `README.md`, `.git/`, `deploy.sh` + +#### Deploy via Script + +```bash +# Einmalig: SSH-User und Pfad anpassen +./deploy.sh user@dgray.io /home/user/web/dgray.io/public_html + +# Oder Defaults im Script setzen und einfach: +./deploy.sh +``` + +Das Script nutzt `rsync` über SSH und synchronisiert nur geänderte Dateien. +Ausgeschlossene Dateien/Ordner (tests, docs, .git, etc.) werden automatisch übersprungen. + +**Voraussetzungen:** +- SSH-Key-Authentifizierung zum Server +- `rsync` lokal und auf dem Server installiert ### Tests ausführen diff --git a/deploy.sh b/deploy.sh new file mode 100755 index 0000000..855570f --- /dev/null +++ b/deploy.sh @@ -0,0 +1,49 @@ +#!/bin/bash +# deploy.sh - Deploy dgray.io to production server via rsync +# +# Usage: ./deploy.sh [user@host] [remote-path] +# Example: ./deploy.sh admin@dgray.io /home/admin/web/dgray.io/public_html +# +# Prerequisites: +# - SSH key authentication configured +# - rsync installed locally and on server + +set -e + +# --- Configuration --- +REMOTE_USER_HOST="${1:-admin@dgray.io}" +REMOTE_PATH="${2:-/home/admin/web/dgray.io/public_html}" +SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" + +# Files/directories to exclude from deployment +EXCLUDES=( + ".git" + ".gitignore" + "AGENTS.md" + "deploy.sh" + "docs/" + "tests/" + "README.md" + ".vscode" + ".idea" +) + +# --- Build exclude arguments --- +EXCLUDE_ARGS="" +for item in "${EXCLUDES[@]}"; do + EXCLUDE_ARGS="$EXCLUDE_ARGS --exclude=$item" +done + +# --- Deploy --- +echo "Deploying dgray.io" +echo " From: $SCRIPT_DIR" +echo " To: $REMOTE_USER_HOST:$REMOTE_PATH" +echo "" + +rsync -avz --delete \ + $EXCLUDE_ARGS \ + "$SCRIPT_DIR/" \ + "$REMOTE_USER_HOST:$REMOTE_PATH/" + +echo "" +echo "Deploy complete."