From ef6b46dc0509c5d380b6219130d4b584d438e0bc Mon Sep 17 00:00:00 2001 From: Till Tomczak Date: Mon, 31 Mar 2025 15:02:35 +0200 Subject: [PATCH] =?UTF-8?q?Verbessere=20Docker=20Compose=20Kompatibilit?= =?UTF-8?q?=C3=A4t=20f=C3=BCr=20Installation?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Verbessere Docker Compose Versionsprüfung und -installation - Aktualisiere docker-compose.yml zu Version 3 Format - Behebe YAML-Syntax-Fehler in Environment-Variablen - Füge Unterstützung für beide Befehlsvarianten hinzu (docker-compose/docker compose) - Verwende Docker Compose v2.6.1 für ARM-Architekturen (Raspberry Pi) 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude --- backend/docker-compose.yml | 4 +- install-backend.sh | 130 +++++++++++++----- install-frontend.sh | 130 +++++++++++++----- .../reservation-platform/docker-compose.yml | 2 +- 4 files changed, 201 insertions(+), 65 deletions(-) diff --git a/backend/docker-compose.yml b/backend/docker-compose.yml index 45fbcea..60e3798 100755 --- a/backend/docker-compose.yml +++ b/backend/docker-compose.yml @@ -1,4 +1,4 @@ -version: '2' +version: '3' services: backend: @@ -10,7 +10,7 @@ services: - DATABASE_PATH=${DATABASE_PATH:-instance/myp.db} - TAPO_USERNAME=${TAPO_USERNAME:-till.tomczak@mercedes-benz.com} - TAPO_PASSWORD=${TAPO_PASSWORD:-744563017196A} - - PRINTERS='${PRINTERS:-{"Printer 1": {"ip": "192.168.0.100"}, "Printer 2": {"ip": "192.168.0.101"}, "Printer 3": {"ip": "192.168.0.102"}, "Printer 4": {"ip": "192.168.0.103"}, "Printer 5": {"ip": "192.168.0.104"}, "Printer 6": {"ip": "192.168.0.106"}}}' + - "PRINTERS=${PRINTERS:-{\"Printer 1\": {\"ip\": \"192.168.0.100\"}, \"Printer 2\": {\"ip\": \"192.168.0.101\"}, \"Printer 3\": {\"ip\": \"192.168.0.102\"}, \"Printer 4\": {\"ip\": \"192.168.0.103\"}, \"Printer 5\": {\"ip\": \"192.168.0.104\"}, \"Printer 6\": {\"ip\": \"192.168.0.106\"}}}" - FLASK_APP=app.py - PYTHONUNBUFFERED=1 volumes: diff --git a/install-backend.sh b/install-backend.sh index 062befa..ebf5f29 100755 --- a/install-backend.sh +++ b/install-backend.sh @@ -95,35 +95,48 @@ install_docker() { log "${GREEN}Docker wurde installiert.${NC}" log "${YELLOW}WICHTIG: Möglicherweise müssen Sie sich neu anmelden, damit die Gruppenänderung wirksam wird.${NC}" - # Installiere Docker Compose v1 (für ältere Systeme besser kompatibel) - log "${YELLOW}Installiere Docker Compose...${NC}" + # Prüfen, ob Docker Compose v2 Plugin verfügbar ist (bevorzugt, da moderner) + log "${YELLOW}Prüfe Docker Compose Version...${NC}" - if [ "$IS_RASPBERRY_PI" = true ]; then - # Für Raspberry Pi ist es besser, die richtige Architektur zu verwenden - if [ "$ARCH" = "armhf" ]; then - log "Installiere Docker Compose für armhf (32-bit)..." - sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-Linux-armv7" -o /usr/local/bin/docker-compose - elif [ "$ARCH" = "arm64" ]; then - log "Installiere Docker Compose für arm64 (64-bit)..." - sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-Linux-aarch64" -o /usr/local/bin/docker-compose - else - log "Verwende automatische Architekturerkennung für Docker Compose..." - sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose - fi + if docker compose version &> /dev/null; then + log "${GREEN}Docker Compose v2 Plugin ist bereits installiert.${NC}" + DOCKER_COMPOSE_V2=true else - # Für andere Systeme - sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose + log "${YELLOW}Docker Compose v2 Plugin nicht gefunden. Versuche Docker Compose v1 zu installieren...${NC}" + DOCKER_COMPOSE_V2=false + + if [ "$IS_RASPBERRY_PI" = true ]; then + # Für Raspberry Pi ist es besser, die richtige Architektur zu verwenden + if [ "$ARCH" = "armhf" ]; then + log "Installiere Docker Compose für armhf (32-bit)..." + sudo curl -L "https://github.com/docker/compose/releases/download/v2.6.1/docker-compose-linux-armv7" -o /usr/local/bin/docker-compose + elif [ "$ARCH" = "arm64" ]; then + log "Installiere Docker Compose für arm64 (64-bit)..." + sudo curl -L "https://github.com/docker/compose/releases/download/v2.6.1/docker-compose-linux-aarch64" -o /usr/local/bin/docker-compose + else + # Fallback auf v1.29.2 für unbekannte ARM-Architekturen + log "Verwende automatische Architekturerkennung für Docker Compose v1.29.2..." + sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose + fi + else + # Für andere Systeme versuche zuerst v2, dann v1.29.2 als Fallback + log "Installiere Docker Compose v2 für $(uname -s)/$(uname -m)..." + if ! sudo curl -L "https://github.com/docker/compose/releases/download/v2.6.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose; then + log "${YELLOW}Konnte Docker Compose v2 nicht herunterladen. Versuche v1.29.2...${NC}" + sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose + fi + fi + + if [ $? -ne 0 ]; then + error_log "Konnte Docker Compose nicht herunterladen. Bitte manuell installieren." + exit 1 + fi + + sudo chmod +x /usr/local/bin/docker-compose + + log "${GREEN}Docker Compose wurde installiert.${NC}" fi - if [ $? -ne 0 ]; then - error_log "Konnte Docker Compose nicht herunterladen. Bitte manuell installieren." - exit 1 - fi - - sudo chmod +x /usr/local/bin/docker-compose - - log "${GREEN}Docker Compose wurde installiert.${NC}" - # Starte Docker-Dienst if command -v systemctl &> /dev/null; then sudo systemctl enable docker @@ -172,13 +185,48 @@ if ! docker info &> /dev/null; then fi # Prüfen ob Docker Compose installiert ist -if ! command -v docker-compose &> /dev/null; then +if docker compose version &> /dev/null; then + log "${GREEN}Docker Compose v2 Plugin ist bereits installiert.${NC}" + DOCKER_COMPOSE_V2=true +elif command -v docker-compose &> /dev/null; then + log "${GREEN}Docker Compose v1 ist bereits installiert.${NC}" + DOCKER_COMPOSE_V2=false +else log "${YELLOW}Docker Compose ist nicht installiert.${NC}" + DOCKER_COMPOSE_V2=false read -p "Möchten Sie Docker Compose installieren? (j/n): " install_compose_choice if [[ "$install_compose_choice" == "j" ]]; then log "${YELLOW}Installiere Docker Compose...${NC}" - if ! sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose; then + # Prüfe ob das Betriebssystem ARM-basiert ist (z.B. Raspberry Pi) + if grep -q "arm" /proc/cpuinfo 2> /dev/null; then + ARCH=$(dpkg --print-architecture 2> /dev/null || echo "unknown") + IS_RASPBERRY_PI=true + else + IS_RASPBERRY_PI=false + fi + + # Versuche zuerst Docker Compose v2 zu installieren + if [ "$IS_RASPBERRY_PI" = true ]; then + if [ "$ARCH" = "armhf" ]; then + log "Installiere Docker Compose für armhf (32-bit)..." + sudo curl -L "https://github.com/docker/compose/releases/download/v2.6.1/docker-compose-linux-armv7" -o /usr/local/bin/docker-compose + elif [ "$ARCH" = "arm64" ]; then + log "Installiere Docker Compose für arm64 (64-bit)..." + sudo curl -L "https://github.com/docker/compose/releases/download/v2.6.1/docker-compose-linux-aarch64" -o /usr/local/bin/docker-compose + else + log "Verwende automatische Architekturerkennung für Docker Compose v1.29.2..." + sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose + fi + else + log "Installiere Docker Compose v2 für $(uname -s)/$(uname -m)..." + if ! sudo curl -L "https://github.com/docker/compose/releases/download/v2.6.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose; then + log "${YELLOW}Konnte Docker Compose v2 nicht herunterladen. Versuche v1.29.2...${NC}" + sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose + fi + fi + + if [ $? -ne 0 ]; then error_log "Konnte Docker Compose nicht herunterladen. Bitte manuell installieren." exit 1 fi @@ -249,9 +297,23 @@ fi # Docker-Image bauen und starten log "${YELLOW}Baue und starte Backend-Container...${NC}" -if ! docker-compose up -d --build; then - error_log "Docker Compose fehlgeschlagen. Siehe Fehlermeldung oben." - exit 1 + +# Verwende die richtige Docker Compose Version +if [ "${DOCKER_COMPOSE_V2:-false}" = true ]; then + # Docker Compose V2 Plugin (docker compose) + if ! docker compose up -d --build; then + error_log "Docker Compose (v2) fehlgeschlagen. Versuche mit v1 Format..." + if ! docker-compose up -d --build; then + error_log "Docker Compose fehlgeschlagen. Siehe Fehlermeldung oben." + exit 1 + fi + fi +else + # Docker Compose V1 (docker-compose) + if ! docker-compose up -d --build; then + error_log "Docker Compose fehlgeschlagen. Siehe Fehlermeldung oben." + exit 1 + fi fi # Prüfe, ob der Container läuft @@ -308,4 +370,10 @@ fi log "${GREEN}=== Installation abgeschlossen ===${NC}" log "Das Backend ist unter http://localhost:5000 erreichbar" log "Anzeigen der Logs: docker logs -f myp-backend" -log "Backend stoppen: docker-compose -f $BACKEND_DIR/docker-compose.yml down" \ No newline at end of file + +# Verwende die richtige Docker Compose Version für Hinweis +if [ "${DOCKER_COMPOSE_V2:-false}" = true ]; then + log "Backend stoppen: docker compose -f $BACKEND_DIR/docker-compose.yml down" +else + log "Backend stoppen: docker-compose -f $BACKEND_DIR/docker-compose.yml down" +fi \ No newline at end of file diff --git a/install-frontend.sh b/install-frontend.sh index e13778a..dde46b6 100755 --- a/install-frontend.sh +++ b/install-frontend.sh @@ -95,35 +95,48 @@ install_docker() { log "${GREEN}Docker wurde installiert.${NC}" log "${YELLOW}WICHTIG: Möglicherweise müssen Sie sich neu anmelden, damit die Gruppenänderung wirksam wird.${NC}" - # Installiere Docker Compose v1 (für ältere Systeme besser kompatibel) - log "${YELLOW}Installiere Docker Compose...${NC}" + # Prüfen, ob Docker Compose v2 Plugin verfügbar ist (bevorzugt, da moderner) + log "${YELLOW}Prüfe Docker Compose Version...${NC}" - if [ "$IS_RASPBERRY_PI" = true ]; then - # Für Raspberry Pi ist es besser, die richtige Architektur zu verwenden - if [ "$ARCH" = "armhf" ]; then - log "Installiere Docker Compose für armhf (32-bit)..." - sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-Linux-armv7" -o /usr/local/bin/docker-compose - elif [ "$ARCH" = "arm64" ]; then - log "Installiere Docker Compose für arm64 (64-bit)..." - sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-Linux-aarch64" -o /usr/local/bin/docker-compose - else - log "Verwende automatische Architekturerkennung für Docker Compose..." - sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose - fi + if docker compose version &> /dev/null; then + log "${GREEN}Docker Compose v2 Plugin ist bereits installiert.${NC}" + DOCKER_COMPOSE_V2=true else - # Für andere Systeme - sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose + log "${YELLOW}Docker Compose v2 Plugin nicht gefunden. Versuche Docker Compose v1 zu installieren...${NC}" + DOCKER_COMPOSE_V2=false + + if [ "$IS_RASPBERRY_PI" = true ]; then + # Für Raspberry Pi ist es besser, die richtige Architektur zu verwenden + if [ "$ARCH" = "armhf" ]; then + log "Installiere Docker Compose für armhf (32-bit)..." + sudo curl -L "https://github.com/docker/compose/releases/download/v2.6.1/docker-compose-linux-armv7" -o /usr/local/bin/docker-compose + elif [ "$ARCH" = "arm64" ]; then + log "Installiere Docker Compose für arm64 (64-bit)..." + sudo curl -L "https://github.com/docker/compose/releases/download/v2.6.1/docker-compose-linux-aarch64" -o /usr/local/bin/docker-compose + else + # Fallback auf v1.29.2 für unbekannte ARM-Architekturen + log "Verwende automatische Architekturerkennung für Docker Compose v1.29.2..." + sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose + fi + else + # Für andere Systeme versuche zuerst v2, dann v1.29.2 als Fallback + log "Installiere Docker Compose v2 für $(uname -s)/$(uname -m)..." + if ! sudo curl -L "https://github.com/docker/compose/releases/download/v2.6.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose; then + log "${YELLOW}Konnte Docker Compose v2 nicht herunterladen. Versuche v1.29.2...${NC}" + sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose + fi + fi + + if [ $? -ne 0 ]; then + error_log "Konnte Docker Compose nicht herunterladen. Bitte manuell installieren." + exit 1 + fi + + sudo chmod +x /usr/local/bin/docker-compose + + log "${GREEN}Docker Compose wurde installiert.${NC}" fi - if [ $? -ne 0 ]; then - error_log "Konnte Docker Compose nicht herunterladen. Bitte manuell installieren." - exit 1 - fi - - sudo chmod +x /usr/local/bin/docker-compose - - log "${GREEN}Docker Compose wurde installiert.${NC}" - # Starte Docker-Dienst if command -v systemctl &> /dev/null; then sudo systemctl enable docker @@ -172,13 +185,48 @@ if ! docker info &> /dev/null; then fi # Prüfen ob Docker Compose installiert ist -if ! command -v docker-compose &> /dev/null; then +if docker compose version &> /dev/null; then + log "${GREEN}Docker Compose v2 Plugin ist bereits installiert.${NC}" + DOCKER_COMPOSE_V2=true +elif command -v docker-compose &> /dev/null; then + log "${GREEN}Docker Compose v1 ist bereits installiert.${NC}" + DOCKER_COMPOSE_V2=false +else log "${YELLOW}Docker Compose ist nicht installiert.${NC}" + DOCKER_COMPOSE_V2=false read -p "Möchten Sie Docker Compose installieren? (j/n): " install_compose_choice if [[ "$install_compose_choice" == "j" ]]; then log "${YELLOW}Installiere Docker Compose...${NC}" - if ! sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose; then + # Prüfe ob das Betriebssystem ARM-basiert ist (z.B. Raspberry Pi) + if grep -q "arm" /proc/cpuinfo 2> /dev/null; then + ARCH=$(dpkg --print-architecture 2> /dev/null || echo "unknown") + IS_RASPBERRY_PI=true + else + IS_RASPBERRY_PI=false + fi + + # Versuche zuerst Docker Compose v2 zu installieren + if [ "$IS_RASPBERRY_PI" = true ]; then + if [ "$ARCH" = "armhf" ]; then + log "Installiere Docker Compose für armhf (32-bit)..." + sudo curl -L "https://github.com/docker/compose/releases/download/v2.6.1/docker-compose-linux-armv7" -o /usr/local/bin/docker-compose + elif [ "$ARCH" = "arm64" ]; then + log "Installiere Docker Compose für arm64 (64-bit)..." + sudo curl -L "https://github.com/docker/compose/releases/download/v2.6.1/docker-compose-linux-aarch64" -o /usr/local/bin/docker-compose + else + log "Verwende automatische Architekturerkennung für Docker Compose v1.29.2..." + sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose + fi + else + log "Installiere Docker Compose v2 für $(uname -s)/$(uname -m)..." + if ! sudo curl -L "https://github.com/docker/compose/releases/download/v2.6.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose; then + log "${YELLOW}Konnte Docker Compose v2 nicht herunterladen. Versuche v1.29.2...${NC}" + sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose + fi + fi + + if [ $? -ne 0 ]; then error_log "Konnte Docker Compose nicht herunterladen. Bitte manuell installieren." exit 1 fi @@ -256,9 +304,23 @@ fi # Docker-Image bauen und starten log "${YELLOW}Baue und starte Frontend-Container...${NC}" -if ! docker-compose up -d --build; then - error_log "Docker Compose fehlgeschlagen. Siehe Fehlermeldung oben." - exit 1 + +# Verwende die richtige Docker Compose Version +if [ "${DOCKER_COMPOSE_V2:-false}" = true ]; then + # Docker Compose V2 Plugin (docker compose) + if ! docker compose up -d --build; then + error_log "Docker Compose (v2) fehlgeschlagen. Versuche mit v1 Format..." + if ! docker-compose up -d --build; then + error_log "Docker Compose fehlgeschlagen. Siehe Fehlermeldung oben." + exit 1 + fi + fi +else + # Docker Compose V1 (docker-compose) + if ! docker-compose up -d --build; then + error_log "Docker Compose fehlgeschlagen. Siehe Fehlermeldung oben." + exit 1 + fi fi # Prüfe, ob der Container läuft @@ -319,4 +381,10 @@ fi log "${GREEN}=== Installation abgeschlossen ===${NC}" log "Das Frontend ist unter http://localhost:3000 erreichbar" log "Anzeigen der Logs: docker logs -f myp-frontend" -log "Frontend stoppen: docker-compose -f $FRONTEND_DIR/docker-compose.yml down" \ No newline at end of file + +# Verwende die richtige Docker Compose Version für Hinweis +if [ "${DOCKER_COMPOSE_V2:-false}" = true ]; then + log "Frontend stoppen: docker compose -f $FRONTEND_DIR/docker-compose.yml down" +else + log "Frontend stoppen: docker-compose -f $FRONTEND_DIR/docker-compose.yml down" +fi \ No newline at end of file diff --git a/packages/reservation-platform/docker-compose.yml b/packages/reservation-platform/docker-compose.yml index d00329b..f5bd3a3 100644 --- a/packages/reservation-platform/docker-compose.yml +++ b/packages/reservation-platform/docker-compose.yml @@ -1,4 +1,4 @@ -version: '2' +version: '3' services: frontend: