#!/bin/bash # ============================================================== # BAN YARO — Ersteinrichtung auf der DiskStation # # Läuft auf deinem MAC und richtet die DS per SSH ein. # Du musst dieses Skript NICHT auf die DS kopieren. # # Voraussetzung: SSH-Port auf DS offen, SSH-Key eingerichtet # Aufruf: bash scripts/setup-ds.sh # ============================================================== set -e DS_HOST="ds" DS_IP="10.47.11.10" DS_SSH_PORT="22" DS_PATH="/volume1/docker/ban-yaro" REPO_URL="https://git.motocamp.de/rene/banyaro.git" # HTTPS, kein SSH-Key auf DS nötig # Farben 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}"; } echo "" echo "=== Ban Yaro — Ersteinrichtung DS1621 ===" echo "" # ---------------------------------------------------------- # 0. SSH-Port prüfen BEVOR wir irgendwas versuchen # ---------------------------------------------------------- echo "→ Prüfe SSH-Erreichbarkeit (${DS_IP}:${DS_SSH_PORT})..." if ! nc -z -w3 "$DS_IP" "$DS_SSH_PORT" 2>/dev/null; then err "DS nicht erreichbar auf Port ${DS_SSH_PORT}!" echo "" echo " Mögliche Ursachen:" echo " • SSH-Port in der Fritz!Box ist geschlossen" echo " • DS-Firewall blockiert Port ${DS_SSH_PORT}" echo " • DS ist offline" echo "" echo " → SSH-Port öffnen, dann erneut ausführen." echo "" exit 1 fi ok "SSH-Port ${DS_SSH_PORT} erreichbar" # SSH-Verbindung selbst testen if ! ssh -q -o ConnectTimeout=5 -o BatchMode=yes "$DS_HOST" exit 2>/dev/null; then err "SSH-Verbindung zu '${DS_HOST}' fehlgeschlagen!" echo "" echo " Prüfe: ssh ${DS_HOST} (muss ohne Passwort funktionieren)" echo "" exit 1 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' echo ' Verzeichnisstruktur:' find '${DS_PATH}/data' -type d | sed 's/^/ /' " ok "Verzeichnisse angelegt" # ---------------------------------------------------------- # 2. Repo klonen oder aktualisieren # ---------------------------------------------------------- echo "" echo "→ Repository..." ssh "$DS_HOST" " if [ -d '${DS_PATH}/.git' ]; then echo ' Existiert bereits — aktualisiere...' cd '${DS_PATH}' && git pull else echo ' Klone von ${REPO_URL}...' git clone '${REPO_URL}' '${DS_PATH}' fi " ok "Repository bereit" # ---------------------------------------------------------- # 3. .env anlegen # ---------------------------------------------------------- echo "" echo "→ Konfiguration (.env)..." ssh "$DS_HOST" " if [ -f '${DS_PATH}/.env' ]; then echo ' .env existiert bereits — wird nicht überschrieben.' else cp '${DS_PATH}/.env.example' '${DS_PATH}/.env' echo ' .env angelegt aus .env.example' fi " # Prüfen ob JWT_SECRET noch der Default ist JWT_CHECK=$(ssh "$DS_HOST" "grep 'JWT_SECRET' '${DS_PATH}/.env' | grep -c 'bitte-aendern'" 2>/dev/null || true) if [ "$JWT_CHECK" -gt "0" ]; then warn ".env muss noch angepasst werden!" echo "" echo " Mindestens setzen:" echo "" echo " ssh ${DS_HOST}" echo " nano ${DS_PATH}/.env" echo "" echo " ┌─────────────────────────────────────────────────────┐" echo " │ JWT_SECRET= │" echo " │ KI_MODE=local │" echo " │ KI_LOCAL_URL=http://10.47.11.10:1234/v1 │" echo " └─────────────────────────────────────────────────────┘" echo "" read -r -p " .env jetzt bearbeiten? [J/n] " REPLY if [[ "${REPLY}" =~ ^[Jj]$ ]] || [[ -z "${REPLY}" ]]; then ssh -t "$DS_HOST" "nano '${DS_PATH}/.env'" else warn "Nicht vergessen: .env vor dem nächsten Start anpassen!" fi else ok ".env konfiguriert" fi # ---------------------------------------------------------- # 4. Docker-Image bauen und starten # ---------------------------------------------------------- echo "" echo "→ Docker build (kann 2-3 Minuten dauern)..." ssh "$DS_HOST" " cd '${DS_PATH}' && sudo docker compose build && sudo docker compose up -d " ok "Container gestartet" # ---------------------------------------------------------- # 5. Health-Check # ---------------------------------------------------------- echo "" echo "→ Warte auf App-Start..." sleep 4 STATUS=$(ssh "$DS_HOST" "sudo 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 err "Container-Status: ${STATUS}" echo " → Logs prüfen: make logs" fi # ---------------------------------------------------------- # 6. Zusammenfassung # ---------------------------------------------------------- echo "" echo "==========================================" echo "" ok "Setup abgeschlossen!" echo "" echo " Nächste Schritte:" echo "" echo " 1. NPM-Eintrag anlegen:" echo " Host: banyaro.app" echo " Ziel: http://10.47.11.10:3010" echo "" echo " 2. Logs prüfen:" echo " make logs" echo "" echo " 3. App aufrufen:" echo " https://banyaro.app" echo ""