banyaro/scripts/setup-ds.sh

179 lines
5.7 KiB
Bash
Executable file

#!/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=<langer-zufaelliger-string> │"
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 ""