{ "apiVersion": "apps/v1", "kind": "Deployment", "metadata": { "labels": { "app.kubernetes.io/name": "ttsreader-web", "app.kubernetes.io/part-of": "flowercore" }, "name": "ttsreader-web", "namespace": "fc-ttsreader" }, "spec": { "progressDeadlineSeconds": 600, "replicas": 1, "revisionHistoryLimit": 10, "selector": { "matchLabels": { "app.kubernetes.io/name": "ttsreader-web" } }, "strategy": { "type": "Recreate" }, "template": { "metadata": { "annotations": { "fc.flowercore.io/healthz-anon": "true", "fc.flowercore.io/probe-path": "/health", "kubectl.kubernetes.io/restartedAt": "2026-06-14T00:57:20-05:00", "prometheus.io/path": "/metrics", "prometheus.io/port": "5217", "prometheus.io/scrape": "true" }, "labels": { "app.kubernetes.io/name": "ttsreader-web", "app.kubernetes.io/part-of": "flowercore" } }, "spec": { "containers": [ { "env": [ { "name": "ASPNETCORE_URLS", "value": "http://+:5217" }, { "name": "ASPNETCORE_ENVIRONMENT", "value": "Production" }, { "name": "FlowerCore__Database__ConnectionStrings__Sqlite", "value": "Data Source=/data/ttsreader.db" }, { "name": "TtsReader__Audio__OutputRoot", "value": "/data/audio" }, { "name": "TtsReader__Audio__FfmpegPath", "value": "/usr/bin/ffmpeg" }, { "name": "TtsReader__Bible__CorpusRoot", "value": "/data/corpus-cache/world-english-bible/eng/usx" }, { "name": "TtsReader__ChapterContext__DatabasePath", "value": "/data/chapter-context.db" }, { "name": "TtsReader__Jobs__Root", "value": "/data/jobs" }, { "name": "TtsReader__Export__LocalCasRoot", "value": "/data/bundles/cas" }, { "name": "TtsReader__Piper__Host", "value": "10.0.57.17" }, { "name": "TtsReader__Piper__Port", "value": "8500" }, { "name": "TtsReader__Piper__Transport", "value": "http" }, { "name": "TtsReader__Piper__HttpPath", "value": "/tts" }, { "name": "TtsReader__Kokoro__Enabled", "value": "true" }, { "name": "TtsReader__Kokoro__BaseUrl", "value": "http://ttsreader-kokoro.fc-ttsreader.svc.cluster.local.:8880" }, { "name": "TtsReader__Kokoro__TimeoutSeconds", "value": "120" }, { "name": "FlowerCore__Tts__BiblicalTts__Enabled", "value": "true" }, { "name": "FlowerCore__Tts__BiblicalTts__BaseUrl", "value": "http://ttsreader-biblical.fc-ttsreader.svc.cluster.local.:10402" }, { "name": "FlowerCore__Tts__BiblicalTts__TimeoutSeconds", "value": "60" }, { "name": "FlowerCore__Tts__BiblicalTts__DefaultLanguage", "value": "grc" }, { "name": "Speech__Alignment__Enabled", "value": "true" }, { "name": "Speech__Alignment__BaseUrl", "value": "http://ttsreader-align.fc-ttsreader.svc.cluster.local.:9200" }, { "name": "Speech__Alignment__TimeoutSeconds", "value": "120" }, { "name": "TtsReader__Transcription__Enabled", "value": "true" }, { "name": "TtsReader__Transcription__BaseUrl", "value": "http://ttsreader-align.fc-ttsreader.svc.cluster.local.:9200" }, { "name": "TtsReader__Transcription__TimeoutSeconds", "value": "300" }, { "name": "TtsReader__Ollama__BaseUrl", "value": "http://10.0.57.201:11434" }, { "name": "TtsReader__Ollama__DefaultModel", "value": "gemma3:4b" }, { "name": "TtsReader__Ollama__TimeoutSeconds", "value": "45" }, { "name": "TtsReader__Runtime__LogsRoot", "value": "/data/logs" }, { "name": "TtsReader__Runtime__SmokeStatePath", "value": "/data/ops/smoke-status.json" }, { "name": "TtsReader__Preview__CacheDirectory", "value": "/data/voice-previews" }, { "name": "TtsReader__VoiceLibrary__ReferenceClip__Directory", "value": "/data/voice-reference-clips" }, { "name": "TtsReader__Render__CdnDirectory", "value": "/data/cdn" }, { "name": "Auth__ApiKey", "valueFrom": { "secretKeyRef": { "key": "Auth__ApiKey", "name": "ttsreader-secrets", "optional": true } } }, { "name": "Auth__AdminApiKey", "valueFrom": { "secretKeyRef": { "key": "Auth__AdminApiKey", "name": "ttsreader-secrets", "optional": true } } } ], "image": "localhost/fc-ttsreader-web:v20260616-quicknav-b8c6174", "imagePullPolicy": "Never", "livenessProbe": { "failureThreshold": 3, "httpGet": { "path": "/health", "port": 5217, "scheme": "HTTP" }, "initialDelaySeconds": 15, "periodSeconds": 30, "successThreshold": 1, "timeoutSeconds": 1 }, "name": "web", "ports": [ { "containerPort": 5217, "name": "http", "protocol": "TCP" } ], "readinessProbe": { "failureThreshold": 3, "httpGet": { "path": "/health", "port": 5217, "scheme": "HTTP" }, "initialDelaySeconds": 5, "periodSeconds": 10, "successThreshold": 1, "timeoutSeconds": 1 }, "resources": { "limits": { "cpu": "500m", "memory": "512Mi" }, "requests": { "cpu": "10m", "memory": "256Mi" } }, "securityContext": { "allowPrivilegeEscalation": false, "capabilities": { "drop": [ "ALL" ] }, "readOnlyRootFilesystem": true, "runAsGroup": 1654, "runAsNonRoot": true, "runAsUser": 1654 }, "terminationMessagePath": "/dev/termination-log", "terminationMessagePolicy": "File", "volumeMounts": [ { "mountPath": "/data", "name": "data" }, { "mountPath": "/tmp", "name": "tmp" } ] } ], "dnsPolicy": "ClusterFirst", "restartPolicy": "Always", "schedulerName": "default-scheduler", "securityContext": { "fsGroup": 1654, "fsGroupChangePolicy": "OnRootMismatch" }, "terminationGracePeriodSeconds": 30, "volumes": [ { "name": "data", "persistentVolumeClaim": { "claimName": "ttsreader-data" } }, { "emptyDir": {}, "name": "tmp" } ] } } } }