# FlowerCore TTS Reader — Text-to-speech book reader service --- apiVersion: v1 kind: Namespace metadata: name: fc-ttsreader labels: app.kubernetes.io/part-of: flowercore --- apiVersion: apps/v1 kind: Deployment metadata: name: ttsreader-web namespace: fc-ttsreader labels: app.kubernetes.io/name: ttsreader-web app.kubernetes.io/part-of: flowercore spec: replicas: 1 strategy: type: Recreate selector: matchLabels: app.kubernetes.io/name: ttsreader-web template: metadata: labels: app.kubernetes.io/name: ttsreader-web app.kubernetes.io/part-of: flowercore annotations: prometheus.io/scrape: "true" prometheus.io/port: "5217" prometheus.io/path: "/metrics" spec: securityContext: fsGroup: 1654 fsGroupChangePolicy: OnRootMismatch containers: - name: web image: localhost/fc-ttsreader-web:v202604162120 imagePullPolicy: Never ports: - containerPort: 5217 name: http 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__Jobs__Root value: "/data/jobs" - name: TtsReader__Piper__Host value: "10.0.57.17" - name: TtsReader__Piper__Port value: "10400" - name: TtsReader__Runtime__LogsRoot value: "/data/logs" envFrom: - secretRef: name: ttsreader-secrets optional: true resources: requests: cpu: 100m memory: 256Mi limits: cpu: 500m memory: 512Mi volumeMounts: - name: data mountPath: /data - name: tmp mountPath: /tmp securityContext: runAsNonRoot: true runAsUser: 1654 runAsGroup: 1654 allowPrivilegeEscalation: false readOnlyRootFilesystem: true capabilities: drop: - ALL readinessProbe: httpGet: path: /health port: 5217 initialDelaySeconds: 5 periodSeconds: 10 livenessProbe: httpGet: path: /health port: 5217 initialDelaySeconds: 15 periodSeconds: 30 volumes: - name: data persistentVolumeClaim: claimName: ttsreader-data - name: tmp emptyDir: {} --- apiVersion: v1 kind: Service metadata: name: ttsreader-web namespace: fc-ttsreader spec: selector: app.kubernetes.io/name: ttsreader-web ports: - port: 5217 targetPort: 5217 name: http --- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: ttsreader-data namespace: fc-ttsreader spec: accessModes: - ReadWriteOnce storageClassName: longhorn resources: requests: storage: 5Gi --- apiVersion: cert-manager.io/v1 kind: Certificate metadata: name: ttsreader-cert namespace: fc-ttsreader spec: secretName: ttsreader-tls issuerRef: name: step-ca-acme kind: ClusterIssuer dnsNames: - ttsreader.iamworkin.lan --- apiVersion: traefik.io/v1alpha1 kind: IngressRoute metadata: name: ttsreader-web namespace: fc-ttsreader spec: entryPoints: - websecure routes: - match: Host(`ttsreader.iamworkin.lan`) kind: Rule services: - name: ttsreader-web port: 5217 tls: secretName: ttsreader-tls