n8n_node_librebooking/build-on-host.sh

184 lines
4.8 KiB
Bash
Executable File

#!/bin/bash
# ============================================================================
# build-on-host.sh - Baut den Node auf dem Host (außerhalb des Containers)
#
# Verwendung: Wenn das Volume als read-only gemountet werden soll
#
# Dieses Skript:
# 1. Installiert Dependencies auf dem Host
# 2. Baut den Node auf dem Host
# 3. Kopiert nur die fertigen Dateien in den Container
# 4. Das Volume kann dann read-only gemountet werden
# ============================================================================
set -e
# Farben
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m'
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
echo -e "${BLUE}============================================${NC}"
echo -e "${BLUE} LibreBooking Node - Build auf Host${NC}"
echo -e "${BLUE}============================================${NC}"
echo ""
# Hilfe anzeigen
show_help() {
echo "Verwendung: $0 [OPTIONEN]"
echo ""
echo "Dieses Skript baut den Node auf dem Host, sodass er als"
echo "read-only Volume gemountet werden kann."
echo ""
echo "Optionen:"
echo " -o, --output DIR Ausgabeverzeichnis (Standard: ./dist-for-docker)"
echo " -c, --copy-to PATH Kopiert direkt zu einem Pfad (z.B. custom-nodes/)"
echo " -h, --help Diese Hilfe anzeigen"
echo ""
echo "Beispiele:"
echo " $0 # Baut in ./dist-for-docker"
echo " $0 -c ../n8n/custom-nodes/n8n-nodes-librebooking"
echo ""
echo "Danach in docker-compose.yml:"
echo " volumes:"
echo " - ./dist-for-docker:/home/node/.n8n/custom/n8n-nodes-librebooking:ro"
exit 0
}
OUTPUT_DIR="$SCRIPT_DIR/dist-for-docker"
COPY_TO=""
# Parameter parsen
while [[ $# -gt 0 ]]; do
case $1 in
-o|--output)
OUTPUT_DIR="$2"
shift 2
;;
-c|--copy-to)
COPY_TO="$2"
shift 2
;;
-h|--help)
show_help
;;
*)
echo -e "${RED}Unbekannte Option: $1${NC}"
show_help
;;
esac
done
log() {
echo -e "${GREEN}[INFO]${NC} $1"
}
warn() {
echo -e "${YELLOW}[WARN]${NC} $1"
}
error() {
echo -e "${RED}[ERROR]${NC} $1"
exit 1
}
# Schritt 1: Prüfe Voraussetzungen
log "Prüfe Voraussetzungen..."
if ! command -v node &>/dev/null; then
error "Node.js ist nicht installiert!\n\n Installieren Sie Node.js 18+: https://nodejs.org/"
fi
NODE_VERSION=$(node -v | cut -d'v' -f2 | cut -d'.' -f1)
if [ "$NODE_VERSION" -lt 18 ]; then
error "Node.js Version $NODE_VERSION ist zu alt. Mindestens v18 erforderlich."
fi
if ! command -v npm &>/dev/null; then
error "npm ist nicht installiert!"
fi
log "Node.js: $(node -v)"
log "npm: $(npm -v)"
# Schritt 2: Dependencies installieren
log "Installiere Dependencies..."
cd "$SCRIPT_DIR"
if npm install 2>&1 | tail -5; then
log "Dependencies installiert ✓"
else
error "npm install fehlgeschlagen!"
fi
# Schritt 3: Bauen
log "Baue den Node..."
if npm run build 2>&1 | tail -10; then
log "Build erfolgreich ✓"
else
error "npm run build fehlgeschlagen!"
fi
# Schritt 4: Prüfe Build
if [ ! -d "$SCRIPT_DIR/dist" ]; then
error "dist/ Verzeichnis wurde nicht erstellt!"
fi
NODE_COUNT=$(find "$SCRIPT_DIR/dist" -name "*.node.js" | wc -l)
if [ "$NODE_COUNT" -eq 0 ]; then
error "Keine .node.js Dateien im dist/ Verzeichnis!"
fi
log "Gefunden: $NODE_COUNT Node-Datei(en)"
# Schritt 5: Erstelle Ausgabeverzeichnis
log "Erstelle Ausgabeverzeichnis: $OUTPUT_DIR"
mkdir -p "$OUTPUT_DIR"
# Kopiere alle notwendigen Dateien
cp -r "$SCRIPT_DIR/dist" "$OUTPUT_DIR/"
cp "$SCRIPT_DIR/package.json" "$OUTPUT_DIR/"
cp -r "$SCRIPT_DIR/node_modules" "$OUTPUT_DIR/" 2>/dev/null || true
# Optional: Nur essentielle Dateien für minimales Image
log "Räume auf..."
rm -rf "$OUTPUT_DIR/node_modules/.cache" 2>/dev/null || true
# Schritt 6: Optional kopieren
if [ -n "$COPY_TO" ]; then
log "Kopiere zu: $COPY_TO"
mkdir -p "$COPY_TO"
cp -r "$OUTPUT_DIR/"* "$COPY_TO/"
log "Kopiert ✓"
fi
echo ""
echo -e "${GREEN}============================================${NC}"
echo -e "${GREEN} Build abgeschlossen!${NC}"
echo -e "${GREEN}============================================${NC}"
echo ""
log "Ausgabe in: $OUTPUT_DIR"
echo ""
echo "Nächste Schritte:"
echo ""
echo "1. Kopieren Sie das Verzeichnis zu Ihrer n8n Installation:"
echo " cp -r $OUTPUT_DIR /pfad/zu/n8n/custom-nodes/n8n-nodes-librebooking"
echo ""
echo "2. Oder verwenden Sie es direkt in docker-compose.yml:"
echo ""
echo " services:"
echo " n8n:"
echo " volumes:"
echo " # Read-only möglich, da bereits gebaut!"
echo " - $OUTPUT_DIR:/home/node/.n8n/custom/n8n-nodes-librebooking:ro"
echo ""
echo "3. Starten Sie n8n neu:"
echo " docker compose restart n8n"
echo ""