Some checks are pending
CI / validate (push) Waiting to run
Ω-1: Text-Only-Architektur ist scharfgestellt. Code-Cleanup: - 4 Components gelöscht: ImageOcclusionEditor, ImageOcclusionView, AudioFrontView, AudioUploadField - 3 API-Module gelöscht: routes/media.ts, services/storage.ts, db/schema/media.ts (mediaRefs + mediaFiles), routes/decks-from-image.ts - packages/cards-domain: image-occlusion.ts + Tests entfernt, CardTypeSchema reduziert auf basic/basic-reverse/cloze/typing/multiple-choice - 3 Web-Routes (study/[deckId], cards/new, cards/[id]/edit) bereinigt: Image-Occlusion- und Audio-Front-Code-Pfade raus - anki/import.ts text-only: kein Media-Upload mehr, img/sound werden ersatzlos gestrippt - 21 weitere Files bereinigt: dto, health, me, dsgvo, tools, cards, decks, share-handlers, marketplace/decks, marketplace/fork, marketplace/pull-requests, AnkiImport.svelte DB-Migrationen (noch nicht gerannt, idempotent): - 0004_wordeck_text_only.sql: DELETE image-occlusion/audio (0 betroffene Rows), media_files-Tabelle DROP, media_refs-Spalte DROP, CHECK cards.type IN (basic, basic-reverse, cloze, type-in, multiple-choice) - 0005_wordeck_license_rename.sql: Cardecky-Personal-Use-1.0 → Wordeck-Personal-Use-1.0, Cardecky-Pro-Only-1.0 → Wordeck-Pro-Only-1.0, Default + CHECK + Backfill Infrastruktur: - docker-compose.production.yml: cards-minio-Service raus, MinIO-Envs aus cards-api raus, CARDS_PUBLIC_URL + PUBLIC_CARDS_API_URL auf wordeck.com / api.wordeck.com - App-Manifest schon vorher auf wordeck umgestellt Type-Check grün (api, domain, web — alle 3 Sub-Pakete). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
100 lines
4 KiB
YAML
100 lines
4 KiB
YAML
# Production-Stack für Cards auf dem Mac Mini.
|
|
#
|
|
# Lebt unter ~/projects/cards/ auf mana-server (Forgejo-Klon von
|
|
# git.mana.how/till/cards). Build-Contexte zeigen relativ in den
|
|
# Repo, kein externes Image-Registry — Cards ist Greenfield-eigenständig
|
|
# (Strategie B), kein Plattform-Coupling.
|
|
#
|
|
# Ports auf dem Mac Mini:
|
|
# cards-postgres: 5436 (Plattform 5432, Dev 5435 sind belegt)
|
|
# cards-minio S3: 9210 (cadvisor hat 9110 belegt)
|
|
# cards-minio UI: 9211
|
|
# cards-api: 3191 (alt war 3072 → cards-api.mana.how)
|
|
# cards-web: 5181 (alt war 5180 → cards.mana.how)
|
|
#
|
|
# Cutover (2026-05-08): cardecky.mana.how + cardecky-api.mana.how
|
|
# zeigen via Cloudflare-Tunnel auf diese Container. Alte Hostnames
|
|
# cards.mana.how / cards-api.mana.how → nginx :4400 → 301 zu
|
|
# cardecky.* (User-Bookmark-Erhalt).
|
|
#
|
|
# Start (von ~/projects/cards/ auf mana-server):
|
|
# docker compose -f infrastructure/docker-compose.production.yml \
|
|
# --env-file infrastructure/.env.production up -d --build
|
|
#
|
|
# Stop:
|
|
# docker compose -f infrastructure/docker-compose.production.yml down
|
|
|
|
services:
|
|
cards-postgres:
|
|
image: postgres:16-alpine
|
|
container_name: cards-postgres
|
|
restart: unless-stopped
|
|
environment:
|
|
POSTGRES_USER: cards
|
|
POSTGRES_PASSWORD: ${CARDS_DB_PASSWORD:?missing CARDS_DB_PASSWORD}
|
|
POSTGRES_DB: cards
|
|
ports:
|
|
- '127.0.0.1:5436:5432'
|
|
volumes:
|
|
- /Volumes/ManaData/cards/postgres:/var/lib/postgresql/data
|
|
healthcheck:
|
|
test: ['CMD-SHELL', 'pg_isready -U cards -d cards']
|
|
interval: 5s
|
|
timeout: 3s
|
|
retries: 20
|
|
|
|
cards-api:
|
|
image: cards-api:local
|
|
container_name: cards-api
|
|
build:
|
|
context: ../
|
|
dockerfile: apps/api/Dockerfile
|
|
args:
|
|
NPM_AUTH_TOKEN: ${NPM_AUTH_TOKEN:?missing NPM_AUTH_TOKEN}
|
|
restart: unless-stopped
|
|
depends_on:
|
|
cards-postgres:
|
|
condition: service_healthy
|
|
environment:
|
|
DATABASE_URL: 'postgresql://cards:${CARDS_DB_PASSWORD}@cards-postgres:5432/cards'
|
|
CARDS_API_PORT: 3081
|
|
CARDS_API_VERSION: ${CARDS_API_VERSION:-1.0.0}
|
|
CARDS_PUBLIC_URL: https://wordeck.com
|
|
CARDS_DSGVO_SERVICE_KEY: ${CARDS_DSGVO_SERVICE_KEY:?missing CARDS_DSGVO_SERVICE_KEY}
|
|
MANA_AUTH_URL: https://auth.mana.how
|
|
MANA_CREDITS_URL: https://credits.mana.how
|
|
CARDS_MANA_SERVICE_KEY: ${CARDS_MANA_SERVICE_KEY:-}
|
|
# Fail-secure: opt-in. Auf der Prod-Box gar nicht setzen
|
|
# ⇒ Bypass AUS. Nur für gezielte lokale Diagnose temporär
|
|
# auf 'true' setzen (und sofort wieder rausnehmen).
|
|
CARDS_AUTH_DEV_STUB: ${CARDS_AUTH_DEV_STUB:-false}
|
|
NODE_ENV: production
|
|
ports:
|
|
- '127.0.0.1:3191:3081'
|
|
|
|
cards-web:
|
|
image: cards-web:local
|
|
container_name: cards-web
|
|
build:
|
|
context: ../
|
|
dockerfile: apps/web/Dockerfile
|
|
args:
|
|
NPM_AUTH_TOKEN: ${NPM_AUTH_TOKEN:?missing NPM_AUTH_TOKEN}
|
|
restart: unless-stopped
|
|
depends_on:
|
|
- cards-api
|
|
environment:
|
|
# SvelteKit `$env/dynamic/public` liest zur Runtime — daher
|
|
# hier statt als Build-Arg. Wert landet im SSR-Init-Snapshot
|
|
# und in client-fetches.
|
|
PUBLIC_CARDS_API_URL: https://api.wordeck.com
|
|
PUBLIC_MANA_AUTH_URL: https://auth.mana.how
|
|
PUBLIC_AUTH_WEB_URL: https://auth.mana.how
|
|
# mana e.V. Apple-Developer-Team-ID. Wird ausgeliefert in
|
|
# /.well-known/apple-app-site-association für die cards-native
|
|
# Universal-Links (applinks:cardecky.mana.how).
|
|
PUBLIC_APPLE_TEAM_ID: QP3GLU8PH3
|
|
CARDS_API_URL: https://api.wordeck.com
|
|
NODE_ENV: production
|
|
ports:
|
|
- '127.0.0.1:5181:3000'
|