239 lines
7.4 KiB
Bash
Executable File
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 ""
|