192 lines
5.9 KiB
Bash
Executable File
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 ""
|