#!/bin/bash # ============================================================== # BAN YARO — Ersteinrichtung auf der DiskStation # # Läuft auf deinem MAC, richtet DS per SSH + rsync ein. # Kein git auf DS nötig — Dateien kommen direkt vom Mac. # # Aufruf: bash scripts/setup-ds.sh # ============================================================== set -e DS_HOST="ds" DS_IP="10.47.11.10" DS_SSH_PORT="4711" DS_PATH="/volume1/docker/ban-yaro" ROOT="$(cd "$(dirname "$0")/.." && pwd)" RED='\033[0;31m'; GREEN='\033[0;32m'; YELLOW='\033[1;33m'; NC='\033[0m' ok() { echo -e "${GREEN} ✓ $1${NC}"; } warn() { echo -e "${YELLOW} ⚠ $1${NC}"; } err() { echo -e "${RED} ✗ $1${NC}"; exit 1; } echo "" echo "=== Ban Yaro — Ersteinrichtung DS1621 ===" echo "" # ---------------------------------------------------------- # 0. SSH-Port prüfen # ---------------------------------------------------------- echo "→ Prüfe SSH-Erreichbarkeit (${DS_IP}:${DS_SSH_PORT})..." if ! nc -z -w3 "$DS_IP" "$DS_SSH_PORT" 2>/dev/null; then echo "" err "DS nicht erreichbar auf Port ${DS_SSH_PORT}! Ursachen: SSH-Port in Fritz!Box geschlossen, DS offline → Port öffnen, dann erneut ausführen." fi ok "SSH-Port ${DS_SSH_PORT} erreichbar" if ! ssh -q -o ConnectTimeout=5 -o BatchMode=yes "$DS_HOST" exit 2>/dev/null; then err "SSH-Verbindung fehlgeschlagen — prüfe: ssh ${DS_HOST}" fi ok "SSH-Verbindung funktioniert" # ---------------------------------------------------------- # 1. Verzeichnisse anlegen # ---------------------------------------------------------- echo "" echo "→ Verzeichnisse anlegen..." ssh "$DS_HOST" " mkdir -p '${DS_PATH}/data/media/dogs' mkdir -p '${DS_PATH}/data/media/diary' mkdir -p '${DS_PATH}/data/media/poison' " ok "Verzeichnisse angelegt" # ---------------------------------------------------------- # 2. Dateien per rsync übertragen (kein git auf DS nötig) # ---------------------------------------------------------- echo "" echo "→ Dateien übertragen (tar+ssh)..." cd "${ROOT}" && COPYFILE_DISABLE=1 tar czf - \ --exclude='.git' \ --exclude='./data' \ --exclude='./backend/venv' \ --exclude='./backend/__pycache__' \ --exclude='./.env' \ --exclude='./*.db' \ --exclude='./.DS_Store' \ . | ssh "$DS_HOST" "tar xzf - -C '${DS_PATH}/'" ok "Dateien übertragen" # ---------------------------------------------------------- # 3. .env anlegen # ---------------------------------------------------------- echo "" echo "→ Konfiguration (.env)..." ENV_EXISTS=$(ssh "$DS_HOST" "[ -f '${DS_PATH}/.env' ] && echo yes || echo no") if [ "$ENV_EXISTS" = "yes" ]; then ok ".env existiert bereits" else ssh "$DS_HOST" "cp '${DS_PATH}/.env.example' '${DS_PATH}/.env'" warn ".env angelegt — muss noch angepasst werden!" fi # Prüfen ob JWT_SECRET noch Default ist JWT_UNSET=$(ssh "$DS_HOST" "grep -c 'bitte-aendern' '${DS_PATH}/.env' 2>/dev/null || echo 0") if [ "$JWT_UNSET" -gt "0" ]; then echo "" warn "JWT_SECRET ist noch nicht gesetzt!" echo "" echo " ┌──────────────────────────────────────────────┐" echo " │ Mindestens setzen: │" echo " │ JWT_SECRET= │" echo " │ KI_MODE=local │" echo " └──────────────────────────────────────────────┘" echo "" read -r -p " .env jetzt bearbeiten? [J/n] " REPLY if [[ "${REPLY}" =~ ^[Jj]$|^$ ]]; then ssh -t "$DS_HOST" "vi '${DS_PATH}/.env'" else warn "Nicht vergessen: .env vor dem Start anpassen!" fi else ok ".env konfiguriert" fi # ---------------------------------------------------------- # 4. Docker bauen und starten # ---------------------------------------------------------- echo "" echo "→ Docker build (dauert 2-3 Minuten)..." ssh "$DS_HOST" " cd '${DS_PATH}' && sudo /usr/local/bin/docker compose build && sudo /usr/local/bin/docker compose up -d " ok "Container gestartet" # ---------------------------------------------------------- # 5. Health-Check # ---------------------------------------------------------- echo "" echo "→ Warte auf App-Start..." sleep 5 STATUS=$(ssh "$DS_HOST" \ "sudo /usr/local/bin/docker ps --filter name=ban-yaro --format '{{.Status}}'" 2>/dev/null || true) if echo "$STATUS" | grep -q "Up"; then ok "Container läuft — ${STATUS}" else warn "Container-Status: '${STATUS}' — Logs prüfen: make logs" fi # ---------------------------------------------------------- # 6. Fertig # ---------------------------------------------------------- echo "" echo "==================================" ok "Setup abgeschlossen!" echo "" echo " Nächste Schritte:" echo "" echo " NPM-Eintrag anlegen:" echo " Host: banyaro.app" echo " Ziel: http://10.47.11.10:3010" echo "" echo " Logs: make logs" echo " App: https://banyaro.app" echo ""