#!/bin/bash # Deploy Script für spritzschema # Baut das Docker Image und lädt es zu docker.citysensor.de hoch set -e # Konfiguration REGISTRY="docker.citysensor.de" IMAGE_NAME="spritzschema" TAG="${TAG:-$(date +%Y%m%d%H%M)}" # default Datum FULL_IMAGE="${REGISTRY}/${IMAGE_NAME}:${TAG}" # Schutz gegen kopierte Deploy-Skripte: der Projektname muss zum Image-Namen passen. # Genau so ist im Maerz 2026 ein Tabletten-Build unter spritzschema:202603151025 gelandet. PKG_NAME=$(node -p "require('./package.json').name") if [[ "$PKG_NAME" != *"${IMAGE_NAME}"* ]]; then echo "ABBRUCH: package.json heisst '${PKG_NAME}', gepusht wuerde aber '${IMAGE_NAME}'." >&2 echo "Wurde dieses deploy.sh aus einem anderen Projekt kopiert?" >&2 exit 1 fi # Build-Datum BUILD_DATE=$(date +%d.%m.%Y) echo "==========================================" echo " Deploy Script" echo "==========================================" echo "Registry: ${REGISTRY}" echo "Image: ${IMAGE_NAME}" echo "Tag: ${TAG}" echo "Build-Datum: ${BUILD_DATE}" echo "==========================================" echo "" # 1. Login zur Registry (falls noch nicht eingeloggt) echo ">>> Login zu ${REGISTRY}..." docker login "${REGISTRY}" echo "" # 2. Je Architektur einzeln bauen und pushen. # Nicht den docker-container-Builder mit qemu verwenden: dort scheitert der emulierte # amd64-Build am apt-get ("At least one invalid signature was encountered"). # Der Standard-Builder von Docker Desktop nutzt Rosetta und baut amd64 zuverlaessig. echo ">>> Baue amd64 und arm64 und pushe zur Registry..." docker buildx use desktop-linux 2>/dev/null || true for ARCH in amd64 arm64; do echo ">>> ... linux/${ARCH}" docker build \ --platform "linux/${ARCH}" \ --build-arg BUILD_DATE="${BUILD_DATE}" \ -t "${FULL_IMAGE}-${ARCH}" \ . docker push "${FULL_IMAGE}-${ARCH}" done # 3. Beide Architekturen zu einem Multiplatform-Manifest zusammenfassen echo ">>> Fuege die Architekturen zu einem Multiplatform-Image zusammen..." docker buildx imagetools create \ -t "${FULL_IMAGE}" \ "${FULL_IMAGE}-amd64" \ "${FULL_IMAGE}-arm64" # 4. Keep :latest in sync for simple rollbacks and manual usage. echo ">>> Tagge das image zusätzlich als :latest ..." docker buildx imagetools create \ -t "${REGISTRY}/${IMAGE_NAME}:latest" \ "${FULL_IMAGE}" echo ">>> Build und Push erfolgreich!" echo "" echo "==========================================" echo "✓ Deploy erfolgreich abgeschlossen!" echo "==========================================" echo "" echo "Auf dem Server ausführen:" echo " docker pull ${FULL_IMAGE}" echo " docker-compose -f docker-compose.prod.yml up -d" echo ""