apiVersion: apps/v1 kind: Deployment metadata: name: logic namespace: astrololo spec: replicas: 1 selector: { matchLabels: { app: logic } } template: metadata: { labels: { app: logic } } spec: imagePullSecrets: [{ name: gitea-registry }] containers: - name: logic image: gitea.czernobog.pl/gitea/astrololo-logic:9323803c ports: [{ containerPort: 8001 }] env: - name: DATA_URL value: "http://data:8002" # discovery po nazwie Service - name: EPHEMERIS_ENGINE value: "own" # silnik własny; swisseph pominięty # ENGINE_SWISSEPH_URL celowo NIE ustawiamy — engine-swisseph nie jest wdrażany # Token międzywarstwowy (LOG-32): logika oddaje treść baz, więc musi # odrzucać żądania z pominięciem logowania w prezentacji. Ten sam token # służy jej do uwierzytelnienia się w warstwie danych. - name: INTERNAL_TOKEN valueFrom: secretKeyRef: { name: astrololo-auth, key: INTERNAL_TOKEN } # --- Model językowy (LOG-31) --- # Domyślnie LOKALNY: prompt niesie oryginalne opisy z baz, więc nic nie # opuszcza sieci. Dostawcę można przełączyć w UI przy pojedynczym żądaniu. - name: LLM_PROVIDER value: "local" - name: LOCAL_BASE_URL value: "http://ollama.ollama.svc.cluster.local:11434/v1" - name: LOCAL_MODEL value: "llama3.1:8b" - name: LLM_TIMEOUT value: "180" # dłuższe horoskopy potrafią trwać - name: LLM_MAX_TOKENS value: "2000" # Klucze do chmury — OPCJONALNE (optional: true), bo to funkcja, nie # zabezpieczenie: bez sekretu pody startują normalnie i działa model # lokalny. Wybór chmury w UI oznacza, że treść baz OPUSZCZA naszą sieć. - name: OPENAI_API_KEY valueFrom: secretKeyRef: { name: astrololo-llm, key: OPENAI_API_KEY, optional: true } - name: ANTHROPIC_API_KEY valueFrom: secretKeyRef: { name: astrololo-llm, key: ANTHROPIC_API_KEY, optional: true } resources: requests: { cpu: "100m", memory: "128Mi" } limits: { cpu: "500m", memory: "512Mi" } --- apiVersion: v1 kind: Service metadata: name: logic namespace: astrololo spec: selector: { app: logic } ports: [{ port: 8001, targetPort: 8001 }]