159 lines
5 KiB
Bash
Executable file
159 lines
5 KiB
Bash
Executable file
#!/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=<langer-zufaelliger-string> │"
|
|
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 ""
|