184 lines
4.8 KiB
Bash
Executable File
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 ""
|