- docker-compose.coolify(.prebuilt).yml: Service craftvia-worker (Target worker, Chromium, shm_size 1gb, gleiche Härtung), Craftvia-Variablen für app und worker. - Dockerfile: worker-Stage mit HOME=/home/app (Chromium-Profil für non-root); lokaler docker build der Targets runner und worker erfolgreich, PDF-Erzeugung im Image geprüft. - .env.example/.env.prod.example/.env.coolify.example: alle Craftvia-Variablen inkl. RLS, KI-Provider, PDF_CHROMIUM_PATH, OFFLINE_MAX_DAYS, API_RATE_LIMIT_*, AI_GENERATION_RETENTION_DAYS, AI_MONTHLY_TOKEN_LIMIT. - CI (.github, .gitea): Job gate mit Postgres (pgvector) und Redis als Service: migrate deploy, seed, Passwort für craftvia_app, tsc, lint, build, npm run test. - docs/craftvia/DEPLOY.md (aus den Certvia-Deploy-Docs abgeleitet): Architektur, Domains, Secrets, Worker, Migrationen, RLS-Aktivierung, Backup/Restore, KI, Rate Limits, Aufbewahrung, Smoke, Update/Rollback. build-and-push-images.sh baut craftvia-worker. - Certvia-/ISMS-Dokumente aus docs/ nach docs/_certvia-archiv/ (mit README); Verweise in README.md und Skript-Kommentaren angepasst. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
61 lines
2.4 KiB
Bash
Executable File
61 lines
2.4 KiB
Bash
Executable File
#!/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=registry.example.com/craftvia TAG=$(git rev-parse --short HEAD) ./scripts/build-and-push-images.sh
|
|
#
|
|
# Env-Variablen:
|
|
# REGISTRY Image-Präfix (Default: registry.example.com/craftvia)
|
|
# 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:-registry.example.com/craftvia}"
|
|
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 craftvia-app
|
|
build_one migrate craftvia-migrate
|
|
build_one garage craftvia-garage
|
|
# L10b: Hintergrund-Worker (BullMQ: Import-Extraktion, Transkription, Berichts-PDF mit Chromium, KI-Aufbewahrung)
|
|
build_one worker craftvia-worker
|
|
|
|
echo
|
|
echo ">> Push ..."
|
|
for name in craftvia-app craftvia-migrate craftvia-garage craftvia-worker; 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)"
|