Drei Änderungen, die den Spitzenverbrauch eines Stapelscans senken: - Zuschnitte werden nicht mehr auf 1400 px hochgerechnet. Auf einem Stapelfoto ist eine Karte nur ein paar hundert Pixel breit; sie aufzublasen erzeugt vier Mal so viele Pixel ohne mehr Information und kostet zusätzlich Bildtokens beim Modellaufruf. OUT_WIDTH ist jetzt eine Obergrenze. - Die um 180 Grad gedrehte Fassung entsteht erst, wenn ein Ergebnis leer bleibt, statt für jede Karte auf Vorrat. Das halbiert die JPEG-Kodierungen im Normalfall. - Zuschnitte werden einzeln kodiert und sofort freigegeben, statt gesammelt im Speicher zu liegen. Dazu mem_limit und cpus für den App-Container: ein Ausreißer soll den Container treffen, nicht den Host, auf dem auch Jitsi und MySQL laufen. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
45 lines
1.5 KiB
YAML
45 lines
1.5 KiB
YAML
# Fester Projektname. Ohne das leitet Compose ihn aus dem Verzeichnisnamen
|
|
# ab - und der ist im CI-Job ein anderer als auf dem Host.
|
|
name: business-card-scanner
|
|
|
|
services:
|
|
app:
|
|
# Versionstag ermoeglicht Rollback ohne Rebuild.
|
|
image: business-card-scanner:${IMAGE_TAG:-latest}
|
|
build: .
|
|
# Fester Name: das ist die Adresse, auf die der Proxy zeigt.
|
|
container_name: business-card-scanner
|
|
restart: unless-stopped
|
|
# Wird im Workflow aus dem Secret DOTENV erzeugt.
|
|
env_file: .env
|
|
# Deckel gegen Ausreisser: ein Stapelscan braucht im Normalfall deutlich
|
|
# unter 500 MB. Laeuft er aus dem Ruder, stirbt der Container - nicht der
|
|
# Host, auf dem auch Jitsi und die Datenbank liegen.
|
|
mem_limit: 1g
|
|
cpus: 1.5
|
|
volumes:
|
|
- business-card-scanner-data:/data
|
|
networks:
|
|
- nginx-proxy-manager_default
|
|
# Pflicht: der Deploy-Schritt nutzt --wait und macht das zum Gate.
|
|
healthcheck:
|
|
test:
|
|
- CMD
|
|
- python
|
|
- -c
|
|
- import urllib.request,sys; sys.exit(0 if urllib.request.urlopen('http://127.0.0.1:8080/healthz', timeout=4).status == 200 else 1)
|
|
interval: 60s
|
|
timeout: 5s
|
|
retries: 3
|
|
|
|
# Kein ports-Mapping: Der Proxy erreicht den Container ueber das gemeinsame
|
|
# Netz unter seinem Container-Namen.
|
|
networks:
|
|
nginx-proxy-manager_default:
|
|
external: true
|
|
|
|
volumes:
|
|
business-card-scanner-data:
|
|
# Fester Name, damit das Volume nicht am Projektnamen haengt.
|
|
name: business-card-scanner-data
|