#!/bin/bash # Deploy Script für laufschrift # Baut das Docker Image und lädt es zu docker.citysensor.de hoch set -e # Konfiguration REGISTRY="docker.citysensor.de" PROJEKT="wetterstation" IMAGE_NAME=("${PROJEKT}-frontend" "${PROJEKT}-collector" "${PROJEKT}-api") TAG="${TAG:-$(date +%Y%m%d%H%M)}" # default Datum # Build-Datum BUILD_DATE=$(date +%d.%m.%Y) echo "==========================================" echo " Deploy Script" echo "==========================================" echo "Registry: ${REGISTRY}" echo "Images: ${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. 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 # Entferne Projekt-Präfix für Verzeichnisnamen IMAGE_DIR="${image#${PROJEKT}-}" FULL_IMAGE="${REGISTRY}/${image}:${TAG}" echo "==========================================" echo ">>> Baue ${image}..." echo ">>> Image: ${FULL_IMAGE}" echo "==========================================" # Build-Args vorbereiten (für Frontend Version und Build-Date) BUILD_ARGS="--build-arg BUILD_DATE=${BUILD_DATE}" if [ "${IMAGE_DIR}" = "frontend" ]; then VERSION=$(grep '"version"' "${IMAGE_DIR}/package.json" | head -1 | sed 's/.*"version": "\(.*\)".*/\1/') BUILD_ARGS="${BUILD_ARGS} --build-arg VERSION=${VERSION}" fi # 3. Docker Image bauen und pushen (Multiplatform) docker buildx build \ --platform linux/amd64,linux/arm64 \ ${BUILD_ARGS} \ -t "${FULL_IMAGE}" \ --push \ "./${IMAGE_DIR}" # 4. Tagge auch als :latest echo ">>> Tagge ${image} als :latest..." docker buildx imagetools create \ -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}" echo "" echo "Auf dem Server ausführen:" echo " docker compose -f docker-compose.prod.yml pull" echo " docker compose -f docker-compose.prod.yml up -d" echo ""