2026-04-17 15:41:20 +02:00
|
|
|
services:
|
|
|
|
|
kochwas:
|
2026-04-17 15:54:34 +02:00
|
|
|
# Image wird via Gitea Actions gebaut und in die Gitea-Container-Registry gepusht.
|
|
|
|
|
# Tag-Override per Umgebungsvariable: KOCHWAS_TAG=sha-abcd1234 docker compose pull
|
|
|
|
|
image: gitea.siegeln.net/claude/kochwas:${KOCHWAS_TAG:-latest}
|
|
|
|
|
pull_policy: always
|
2026-04-17 15:41:20 +02:00
|
|
|
volumes:
|
|
|
|
|
- ./data:/data
|
|
|
|
|
environment:
|
|
|
|
|
- DATABASE_PATH=/data/kochwas.db
|
|
|
|
|
- IMAGE_DIR=/data/images
|
|
|
|
|
- SEARXNG_URL=http://searxng:8080
|
|
|
|
|
- NODE_ENV=production
|
2026-04-20 08:41:18 +02:00
|
|
|
# Im Header als kleine Versionsnummer unter dem Logo angezeigt.
|
|
|
|
|
- KOCHWAS_TAG=${KOCHWAS_TAG:-dev}
|
2026-04-21 10:37:12 +02:00
|
|
|
# Gemini (Foto-Rezept-Magie). Leer = Feature deaktiviert.
|
|
|
|
|
- GEMINI_API_KEY=${GEMINI_API_KEY:-}
|
|
|
|
|
- GEMINI_MODEL=${GEMINI_MODEL:-gemini-2.5-flash}
|
|
|
|
|
- GEMINI_TIMEOUT_MS=${GEMINI_TIMEOUT_MS:-20000}
|
2026-04-21 13:31:34 +02:00
|
|
|
# adapter-node-Default ist 512 KB. Tablet- und iPad-Pro-Kameras liefern
|
|
|
|
|
# JPEGs/HEICs bis 15 MB. Endpoint-Limit ist 20 MB; hier 25 MB fuer den
|
|
|
|
|
# Multipart-Overhead.
|
|
|
|
|
- BODY_SIZE_LIMIT=25000000
|
2026-04-17 15:41:20 +02:00
|
|
|
depends_on:
|
|
|
|
|
- searxng
|
|
|
|
|
restart: unless-stopped
|
2026-04-17 16:05:06 +02:00
|
|
|
networks:
|
2026-04-17 16:06:38 +02:00
|
|
|
- traefik_proxy
|
2026-04-17 16:05:06 +02:00
|
|
|
- internal
|
|
|
|
|
labels:
|
|
|
|
|
- "traefik.enable=true"
|
|
|
|
|
# Router for HTTPS traffic
|
|
|
|
|
- "traefik.http.routers.kochwas.rule=Host(`kochwas.siegeln.net`)"
|
|
|
|
|
- "traefik.http.routers.kochwas.entrypoints=websecure"
|
|
|
|
|
- "traefik.http.routers.kochwas.tls.certresolver=cloudflareResolver"
|
2026-04-18 13:06:14 +02:00
|
|
|
- "traefik.http.routers.kochwas.tls.domains[0].main=siegeln.net"
|
|
|
|
|
- "traefik.http.routers.kochwas.tls.domains[0].sans=*.siegeln.net"
|
2026-04-17 16:05:06 +02:00
|
|
|
# Specify which port Traefik should forward traffic to inside the container
|
|
|
|
|
- "traefik.http.services.kochwas.loadbalancer.server.port=3000"
|
|
|
|
|
# Explicitly tell Traefik which network to use (since kochwas is on two networks)
|
2026-04-17 16:06:38 +02:00
|
|
|
- "traefik.docker.network=traefik_proxy"
|
2026-04-17 15:41:20 +02:00
|
|
|
|
2026-04-18 14:15:01 +02:00
|
|
|
# Ein-Shot-Init: expandiert ${…}-Platzhalter in der Source-settings.yml und
|
|
|
|
|
# legt das gerenderte File aufs searxng-config Named-Volume. Verwendet das
|
|
|
|
|
# gleiche SearXNG-Image — bereits gepullt, hat Python 3 an Bord. Kein
|
|
|
|
|
# zusätzliches Image, kein apk add gettext, kein fragiler entrypoint-Override
|
|
|
|
|
# am Hauptcontainer. FORCE_OWNERSHIP=false, damit der Init-Container nicht
|
|
|
|
|
# versucht den chown-Setup zu machen.
|
|
|
|
|
searxng-init:
|
|
|
|
|
image: searxng/searxng:latest
|
|
|
|
|
restart: 'no'
|
|
|
|
|
user: root
|
|
|
|
|
entrypoint:
|
|
|
|
|
- /bin/sh
|
|
|
|
|
- -c
|
|
|
|
|
- |
|
|
|
|
|
set -e
|
|
|
|
|
python3 -c "import os; open('/out/settings.yml','w').write(os.path.expandvars(open('/in/settings.yml').read()))"
|
|
|
|
|
volumes:
|
|
|
|
|
- ./searxng:/in:ro
|
|
|
|
|
- searxng-config:/out
|
|
|
|
|
environment:
|
|
|
|
|
- FORCE_OWNERSHIP=false
|
|
|
|
|
- BRAVE_API_KEY=${BRAVE_API_KEY:-}
|
|
|
|
|
- SEARXNG_SECRET=${SEARXNG_SECRET:-dev-secret-change-in-prod}
|
|
|
|
|
|
2026-04-17 15:41:20 +02:00
|
|
|
searxng:
|
2026-04-17 16:05:06 +02:00
|
|
|
# Absichtlich nur intern erreichbar — keine Traefik-Labels, kein externer Port.
|
2026-04-17 15:41:20 +02:00
|
|
|
image: searxng/searxng:latest
|
|
|
|
|
volumes:
|
2026-04-18 14:15:01 +02:00
|
|
|
- searxng-config:/etc/searxng
|
2026-04-17 15:41:20 +02:00
|
|
|
environment:
|
|
|
|
|
- BASE_URL=http://searxng:8080/
|
|
|
|
|
- INSTANCE_NAME=kochwas-search
|
2026-04-18 14:15:01 +02:00
|
|
|
depends_on:
|
|
|
|
|
searxng-init:
|
|
|
|
|
condition: service_completed_successfully
|
2026-04-17 15:41:20 +02:00
|
|
|
restart: unless-stopped
|
2026-04-17 16:05:06 +02:00
|
|
|
networks:
|
|
|
|
|
- internal
|
|
|
|
|
|
2026-04-18 14:15:01 +02:00
|
|
|
volumes:
|
|
|
|
|
searxng-config:
|
|
|
|
|
|
2026-04-17 16:05:06 +02:00
|
|
|
networks:
|
2026-04-17 16:06:38 +02:00
|
|
|
traefik_proxy:
|
|
|
|
|
# Dasselbe externe Netz wie bei deinem Gitea-Compose.
|
2026-04-17 16:05:06 +02:00
|
|
|
external: true
|
|
|
|
|
internal:
|
2026-04-17 16:06:38 +02:00
|
|
|
# Eigenes internes Netz für kochwas ↔ searxng, von außen nicht erreichbar.
|
2026-04-17 16:05:06 +02:00
|
|
|
driver: bridge
|