#!/bin/bash # ============================================================================= # LibreBooking n8n Node - Manuelle Docker Installation (ohne docker-compose) # ============================================================================= # Diese Alternative verwendet nur "docker" Befehle für maximale Kompatibilität. # Nutzen Sie dieses Skript wenn docker-compose Probleme macht. # # Verwendung: ./install-docker-manual.sh [OPTIONS] # # Optionen: # -p, --port PORT n8n Port (Standard: 5678) # -n, --name NAME Container Name (Standard: n8n-librebooking) # -f, --force Bestehenden Container ersetzen # -h, --help Diese Hilfe anzeigen # # ============================================================================= set -e # Farben für Ausgabe RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' # No Color # Standardwerte N8N_PORT=5678 CONTAINER_NAME="n8n-librebooking" FORCE=false SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" # Hilfsfunktionen print_info() { echo -e "${BLUE}[INFO]${NC} $1" } print_success() { echo -e "${GREEN}[✓]${NC} $1" } print_warning() { echo -e "${YELLOW}[!]${NC} $1" } print_error() { echo -e "${RED}[FEHLER]${NC} $1" } show_help() { echo "LibreBooking n8n Node - Manuelle Docker Installation" echo "" echo "Verwendung: $0 [OPTIONS]" echo "" echo "Optionen:" echo " -p, --port PORT n8n Port (Standard: 5678)" echo " -n, --name NAME Container Name (Standard: n8n-librebooking)" echo " -f, --force Bestehenden Container ersetzen" echo " -h, --help Diese Hilfe anzeigen" echo "" echo "Beispiele:" echo " $0 # Standard-Installation" echo " $0 -p 8080 # Anderer Port" echo " $0 -n mein-n8n -p 9000 # Eigener Name und Port" exit 0 } # Argumente parsen while [[ $# -gt 0 ]]; do case $1 in -p|--port) N8N_PORT="$2" shift 2 ;; -n|--name) CONTAINER_NAME="$2" shift 2 ;; -f|--force) FORCE=true shift ;; -h|--help) show_help ;; *) print_error "Unbekannte Option: $1" show_help ;; esac done echo "" echo "=============================================" echo " LibreBooking n8n Node - Manuelle Installation" echo " (ohne docker-compose)" echo "=============================================" echo "" # ============================================================================= # Voraussetzungen prüfen # ============================================================================= print_info "Prüfe Voraussetzungen..." # Docker prüfen if ! command -v docker &> /dev/null; then print_error "Docker ist nicht installiert!" echo " Bitte installieren Sie Docker: https://docs.docker.com/get-docker/" exit 1 fi print_success "Docker gefunden: $(docker --version)" # Prüfen ob Container bereits existiert if docker ps -a --format '{{.Names}}' | grep -q "^${CONTAINER_NAME}$"; then if [ "$FORCE" = true ]; then print_warning "Bestehender Container '$CONTAINER_NAME' wird entfernt..." docker stop "$CONTAINER_NAME" 2>/dev/null || true docker rm "$CONTAINER_NAME" 2>/dev/null || true else print_error "Container '$CONTAINER_NAME' existiert bereits!" echo " Nutzen Sie -f um ihn zu ersetzen, oder -n für einen anderen Namen." exit 1 fi fi # ============================================================================= # Volume und Verzeichnisse vorbereiten # ============================================================================= print_info "Bereite Volumes vor..." # Docker Volume für n8n Daten erstellen VOLUME_NAME="${CONTAINER_NAME}_data" if ! docker volume ls --format '{{.Name}}' | grep -q "^${VOLUME_NAME}$"; then docker volume create "$VOLUME_NAME" print_success "Volume '$VOLUME_NAME' erstellt" else print_info "Volume '$VOLUME_NAME' existiert bereits" fi # Custom Nodes Verzeichnis vorbereiten CUSTOM_NODES_DIR="$SCRIPT_DIR/custom-nodes" if [ ! -d "$CUSTOM_NODES_DIR" ]; then print_error "custom-nodes Verzeichnis nicht gefunden: $CUSTOM_NODES_DIR" exit 1 fi # ============================================================================= # Node bauen (wenn nicht bereits gebaut) # ============================================================================= if [ ! -d "$CUSTOM_NODES_DIR/dist" ]; then print_info "Baue LibreBooking Node..." if command -v npm &> /dev/null; then cd "$CUSTOM_NODES_DIR" npm install 2>/dev/null || print_warning "npm install hatte Warnungen" npm run build 2>/dev/null || { print_warning "Build fehlgeschlagen, versuche alternativen Ansatz..." npx tsc 2>/dev/null || true mkdir -p dist/nodes/LibreBooking dist/nodes/LibreBookingTrigger cp nodes/LibreBooking/*.svg dist/nodes/LibreBooking/ 2>/dev/null || true cp nodes/LibreBookingTrigger/*.svg dist/nodes/LibreBookingTrigger/ 2>/dev/null || true } cd "$SCRIPT_DIR" print_success "Node erfolgreich gebaut" else print_warning "npm nicht gefunden - Node wird im Container gebaut" fi fi # ============================================================================= # n8n Container starten # ============================================================================= print_info "Starte n8n Container..." # Berechtigungen setzen if [ "$(id -u)" = "0" ]; then chown -R 1000:1000 "$CUSTOM_NODES_DIR" 2>/dev/null || true else sudo chown -R 1000:1000 "$CUSTOM_NODES_DIR" 2>/dev/null || print_warning "Konnte Berechtigungen nicht setzen" fi # Container starten docker run -d \ --name "$CONTAINER_NAME" \ --restart unless-stopped \ -p "${N8N_PORT}:5678" \ -v "${VOLUME_NAME}:/home/node/.n8n" \ -v "${CUSTOM_NODES_DIR}:/home/node/.n8n/custom/n8n-nodes-librebooking:ro" \ -e N8N_CUSTOM_EXTENSIONS=/home/node/.n8n/custom \ -e N8N_COMMUNITY_NODES_ENABLED=true \ -e TZ=Europe/Berlin \ -e GENERIC_TIMEZONE=Europe/Berlin \ n8nio/n8n:latest if [ $? -eq 0 ]; then print_success "Container gestartet!" else print_error "Container konnte nicht gestartet werden!" exit 1 fi # Warten auf Start print_info "Warte auf n8n Start..." sleep 5 # Status prüfen if docker ps --format '{{.Names}}' | grep -q "^${CONTAINER_NAME}$"; then print_success "n8n Container läuft!" else print_error "Container läuft nicht - prüfen Sie: docker logs $CONTAINER_NAME" exit 1 fi # ============================================================================= # Abschluss # ============================================================================= echo "" echo "=============================================" print_success "Installation abgeschlossen!" echo "=============================================" echo "" echo "n8n ist erreichbar unter: http://localhost:${N8N_PORT}" echo "" echo "Nützliche Befehle:" echo " docker logs $CONTAINER_NAME # Logs anzeigen" echo " docker stop $CONTAINER_NAME # Container stoppen" echo " docker start $CONTAINER_NAME # Container starten" echo " docker restart $CONTAINER_NAME # Container neustarten" echo " docker rm -f $CONTAINER_NAME # Container löschen" echo "" echo "Bei Problemen siehe: TROUBLESHOOTING.md" echo ""