n8n_node_librebooking/install-in-container.sh

192 lines
5.9 KiB
Bash
Executable File

#!/bin/sh
# ============================================================================
# install-in-container.sh - Installiert den LibreBooking Node IM Docker Container
# Dieses Skript wird INNERHALB des Containers ausgeführt!
# ============================================================================
set -e
echo "============================================"
echo " LibreBooking Node - Container Installation"
echo "============================================"
echo ""
# Funktion: Prüft ob ein Verzeichnis read-only ist
check_readonly() {
local dir="$1"
local test_file="$dir/.write_test_$$"
# Versuche eine Test-Datei zu erstellen
if touch "$test_file" 2>/dev/null; then
rm -f "$test_file" 2>/dev/null
return 0 # Schreibbar (exit code 0 = true)
else
return 1 # Read-only (exit code 1 = false)
fi
}
print_readonly_error() {
local dir="$1"
echo ""
echo "============================================"
echo " FEHLER: Read-only Volume!"
echo "============================================"
echo ""
echo "Das Verzeichnis '$dir' ist read-only gemountet."
echo "npm install und npm run build benötigen Schreibrechte."
echo ""
echo "LÖSUNGEN:"
echo ""
echo "1. Volume OHNE :ro mounten:"
echo " In docker-compose.yml oder docker-compose.override.yml:"
echo ""
echo " volumes:"
echo " - ./custom-nodes:/home/node/.n8n/custom/n8n-nodes-librebooking"
echo " # NICHT:"
echo " - ./custom-nodes:/home/node/.n8n/custom/n8n-nodes-librebooking:ro"
echo ""
echo "2. Auf dem Host bauen:"
echo " Führen Sie auf dem HOST aus: ./build-on-host.sh"
echo " Dann verwenden Sie: docker-compose.readonly.yml"
echo ""
echo "Siehe: TROUBLESHOOTING.md"
exit 1
}
# Mögliche Pfade für custom-nodes
POSSIBLE_PATHS="
/home/node/.n8n/custom/n8n-nodes-librebooking
/home/node/.n8n/custom
/opt/n8n/custom-nodes
/data/custom-nodes
"
CUSTOM_NODE_PATH=""
# Finde den custom-nodes Pfad
echo "[1/5] Suche custom-nodes Verzeichnis..."
for path in $POSSIBLE_PATHS; do
if [ -d "$path" ]; then
# Prüfe ob package.json vorhanden ist
if [ -f "$path/package.json" ]; then
CUSTOM_NODE_PATH="$path"
echo " ✓ Gefunden: $path"
break
elif [ -f "$path/n8n-nodes-librebooking/package.json" ]; then
CUSTOM_NODE_PATH="$path/n8n-nodes-librebooking"
echo " ✓ Gefunden: $CUSTOM_NODE_PATH"
break
fi
fi
done
if [ -z "$CUSTOM_NODE_PATH" ]; then
echo " ✗ Kein custom-nodes Verzeichnis mit package.json gefunden!"
echo ""
echo " Geprüfte Pfade:"
for path in $POSSIBLE_PATHS; do
if [ -d "$path" ]; then
echo " - $path (existiert, aber keine package.json)"
else
echo " - $path (existiert nicht)"
fi
done
echo ""
echo " Bitte stellen Sie sicher, dass die Dateien korrekt kopiert wurden."
exit 1
fi
# Wechsle ins Verzeichnis
echo "[2/5] Wechsle ins Verzeichnis: $CUSTOM_NODE_PATH"
cd "$CUSTOM_NODE_PATH"
echo " ✓ Aktuelles Verzeichnis: $(pwd)"
# Prüfe ob npm verfügbar ist
echo "[3/5] Prüfe npm..."
if ! command -v npm >/dev/null 2>&1; then
echo " ✗ npm ist nicht installiert!"
echo ""
echo " Im n8n Docker-Image sollte npm vorhanden sein."
echo " Falls nicht, verwenden Sie ein Image mit Node.js."
exit 1
fi
echo " ✓ npm Version: $(npm --version)"
echo " ✓ node Version: $(node --version)"
# Prüfe Schreibrechte (read-only Volume?)
echo "[3.5/5] Prüfe Schreibrechte..."
if ! check_readonly "$CUSTOM_NODE_PATH"; then
print_readonly_error "$CUSTOM_NODE_PATH"
fi
echo " ✓ Schreibrechte vorhanden"
# Dependencies installieren
echo "[4/5] Installiere Dependencies..."
echo " Führe 'npm install' aus..."
if npm install 2>&1; then
echo " ✓ Dependencies installiert"
else
echo " ✗ npm install fehlgeschlagen!"
echo ""
echo " Mögliche Lösungen:"
echo " - Prüfen Sie die Berechtigungen"
echo " - Prüfen Sie die Internetverbindung"
echo " - Führen Sie 'npm cache clean --force' aus"
exit 1
fi
# Build ausführen
echo "[5/5] Baue den Node..."
echo " Führe 'npm run build' aus..."
if npm run build 2>&1; then
echo " ✓ Build erfolgreich"
else
echo " ✗ Build fehlgeschlagen!"
echo ""
echo " Prüfen Sie die TypeScript-Fehler in der Ausgabe oben."
exit 1
fi
# Prüfe Ergebnis
echo ""
echo "============================================"
echo " Prüfe Installation..."
echo "============================================"
if [ -d "$CUSTOM_NODE_PATH/dist" ]; then
echo "✓ dist/ Verzeichnis existiert"
# Prüfe auf .node.js Dateien
NODE_FILES=$(find "$CUSTOM_NODE_PATH/dist" -name "*.node.js" 2>/dev/null | wc -l)
if [ "$NODE_FILES" -gt 0 ]; then
echo "$NODE_FILES Node-Datei(en) gefunden:"
find "$CUSTOM_NODE_PATH/dist" -name "*.node.js" -exec echo " - {}" \;
else
echo "✗ Keine .node.js Dateien im dist/ Verzeichnis gefunden!"
fi
# Prüfe credentials
CRED_FILES=$(find "$CUSTOM_NODE_PATH/dist" -name "*.credentials.js" 2>/dev/null | wc -l)
if [ "$CRED_FILES" -gt 0 ]; then
echo "$CRED_FILES Credential-Datei(en) gefunden"
fi
else
echo "✗ dist/ Verzeichnis wurde nicht erstellt!"
exit 1
fi
echo ""
echo "============================================"
echo " Installation abgeschlossen!"
echo "============================================"
echo ""
echo "Nächste Schritte:"
echo " 1. Verlassen Sie den Container: exit"
echo " 2. Starten Sie n8n neu: docker restart n8n"
echo " 3. Öffnen Sie n8n im Browser und suchen Sie nach 'LibreBooking'"
echo ""
echo "Falls der Node nicht erscheint:"
echo " - Prüfen Sie die Umgebungsvariable N8N_CUSTOM_EXTENSIONS"
echo " - Führen Sie ./check-installation.sh aus"
echo ""