#!/usr/bin/env bash # Plan B — Prod-Images auf einem leistungsfähigen amd64-Host bauen und in die # Registry pushen, damit der Prod-Host (Coolify) nur noch PULLT statt zu bauen. # # Voraussetzungen auf dem Build-Host: # - Docker mit BuildKit, Architektur amd64 (empfohlen: interner Server, der die # Test-Instanz baut). Auf arm64 (z. B. Mac) läuft es via Emulation, aber langsam. # - Vorher an der Registry angemeldet: docker login "$REGISTRY_HOST" # # Aufruf (im Repo-Root, auf dem gewünschten Commit ausgecheckt): # REGISTRY=git.certvia.de/msolarczek TAG=$(git rev-parse --short HEAD) ./scripts/build-and-push-images.sh # # Env-Variablen: # REGISTRY Image-Präfix (Default: git.certvia.de/msolarczek) # TAG Image-Tag (Default: kurzer Git-SHA des aktuellen HEAD) # PLATFORM Zielplattform (Default: linux/amd64 — passend zum Prod-Host) # ALSO_MAIN wenn "true": zusätzlich das bewegliche Tag :main setzen/pushen set -euo pipefail REGISTRY="${REGISTRY:-git.certvia.de/msolarczek}" TAG="${TAG:-$(git rev-parse --short HEAD)}" PLATFORM="${PLATFORM:-linux/amd64}" ALSO_MAIN="${ALSO_MAIN:-false}" REGISTRY_HOST="${REGISTRY%%/*}" echo ">> Registry: $REGISTRY" echo ">> Tag: $TAG" echo ">> Plattform: $PLATFORM" echo ">> Login-Host: $REGISTRY_HOST (vorher: docker login $REGISTRY_HOST)" echo export DOCKER_BUILDKIT=1 # target -> Image-Name (siehe docker-compose.coolify.prebuilt.yml) build_one() { local target="$1" name="$2" echo ">> Baue $name (target=$target) ..." docker build --platform "$PLATFORM" --target "$target" \ -t "$REGISTRY/$name:$TAG" \ $( [ "$ALSO_MAIN" = "true" ] && echo -t "$REGISTRY/$name:main" ) \ . } # migrate + runner teilen sich die teuren Stages deps/builder (npm ci + next build). # Sequentiell auf demselben Host -> zweiter Build nutzt den Layer-Cache des ersten. build_one runner certvia-app build_one migrate certvia-migrate build_one garage certvia-garage echo echo ">> Push ..." for name in certvia-app certvia-migrate certvia-garage; do docker push "$REGISTRY/$name:$TAG" [ "$ALSO_MAIN" = "true" ] && docker push "$REGISTRY/$name:main" || true done echo echo ">> Fertig. In Coolify (Prod) setzen: IMAGE_TAG=$TAG (und ggf. REGISTRY=$REGISTRY)"