#!/bin/bash # Deploy Script # Baut die Produktions-Images und lädt sie zur Registry hoch set -e # Konfiguration REGISTRY="docker.citysensor.de" PROJEKT="aerzte" IMAGE_NAME=("${PROJEKT}-frontend" "${PROJEKT}-backend") TAG="${TAG:-$(date +%Y%m%d%H%M)}" # default Datum # Build-Datum und Version BUILD_DATE=$(date +%d.%m.%Y) VERSION=$(grep '"version"' frontend/package.json | head -1 | sed 's/.*"version": "\(.*\)".*/\1/') echo "==========================================" echo " Deploy Script" echo "==========================================" echo "Registry: ${REGISTRY}" echo "Images: ${IMAGE_NAME[*]}" echo "Tag: ${TAG}" echo "Version: ${VERSION}" echo "Build-Datum: ${BUILD_DATE}" echo "==========================================" echo "" # 1. Login zur Registry (falls noch nicht eingeloggt) echo ">>> Login zu ${REGISTRY}..." docker login "${REGISTRY}" echo "" # 2. Multiplatform Builder einrichten (docker-container driver erforderlich) echo ">>> Richte Multiplatform Builder ein..." if ! docker buildx inspect multiplatform-builder &>/dev/null; then docker buildx create --name multiplatform-builder --driver docker-container --bootstrap fi docker buildx use multiplatform-builder echo "" for image in "${IMAGE_NAME[@]}"; do # Verzeichnisname = Image-Name ohne Projekt-Präfix (frontend / backend) IMAGE_DIR="${image#${PROJEKT}-}" FULL_IMAGE="${REGISTRY}/${image}:${TAG}" echo "==========================================" echo ">>> Baue ${image}..." echo ">>> Image: ${FULL_IMAGE}" echo "==========================================" # 3. Produktions-Image bauen und pushen (Multiplatform) # -> nutzt das jeweilige Dockerfile.prod (nginx bzw. npm start) docker buildx build \ --platform linux/amd64 \ -f "./${IMAGE_DIR}/Dockerfile.prod" \ -t "${FULL_IMAGE}" \ --push \ "./${IMAGE_DIR}" # 4. Tagge auch als :${VERSION} und :latest echo ">>> Tagge ${image} als :${VERSION} und :latest..." docker buildx imagetools create \ -t "${REGISTRY}/${image}:${VERSION}" \ -t "${REGISTRY}/${image}:latest" \ "${FULL_IMAGE}" echo "✓ ${image} erfolgreich gebaut und gepusht!" echo "" done echo ">>> Alle Builds erfolgreich!" echo "" echo "==========================================" echo "✓ Deploy erfolgreich abgeschlossen!" echo "==========================================" echo "Registry: ${REGISTRY}" echo "Projekt: ${PROJEKT}" echo "Tag: ${TAG} (zusätzlich: ${VERSION}, latest)" echo "" echo "Auf dem Server ausführen:" echo " docker compose -f docker-compose.images.yml pull" echo " docker compose -f docker-compose.images.yml up -d" echo ""