n8n_node_librebooking/install-docker-manual.sh

239 lines
7.4 KiB
Bash
Executable File

#!/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 ""