#!/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 (nur falls noch keine Zugangsdaten hinterlegt sind) if grep -q "\"${REGISTRY}\"" "${HOME}/.docker/config.json" 2>/dev/null; then echo ">>> Bei ${REGISTRY} bereits angemeldet." else echo ">>> Login zu ${REGISTRY}..." docker login "${REGISTRY}" fi echo "" # 2. Image bauen (nur linux/amd64 - der Zielserver ist ein x86-Linux). # Auf dem ARM-Mac laeuft der amd64-Build ueber Rosetta im Standard-Builder von Docker # Desktop. Nicht den docker-container-Builder (qemu) verwenden: dort scheitert der # emulierte Build am apt-get ("At least one invalid signature was encountered"). echo ">>> Baue linux/amd64 Image..." docker buildx use desktop-linux 2>/dev/null || true docker build \ --platform linux/amd64 \ --build-arg BUILD_DATE="${BUILD_DATE}" \ -t "${FULL_IMAGE}" \ . echo ">>> Pushe ${FULL_IMAGE}..." docker push "${FULL_IMAGE}" # 3. Keep :latest in sync for simple rollbacks and manual usage. echo ">>> Tagge das image zusätzlich als :latest ..." docker tag "${FULL_IMAGE}" "${REGISTRY}/${IMAGE_NAME}:latest" docker push "${REGISTRY}/${IMAGE_NAME}:latest" echo ">>> Build und Push erfolgreich!" echo "" echo "==========================================" echo "✓ Deploy erfolgreich abgeschlossen!" echo "==========================================" echo "" echo "Auf dem Server (strato_1) als User rxf ausführen - NICHT mit sudo," echo "root hat keine Registry-Zugangsdaten und wuerde still das alte Image nehmen:" echo " docker pull ${REGISTRY}/${IMAGE_NAME}:latest" echo " cd /opt/stacks/myapp && docker compose up -d --force-recreate spritzschema-app" echo ""