Files
cloud-host/backend/helm/cloudhost-app/templates/db-deployment.yaml
T
keyhan 22359be40e fix(platform): apply production hardening from audit plan
Close billing, tenancy, migration, build, and CI/CD gaps identified in the
audit: wallet/gateway guards, full-UUID namespaces, idempotent migrations with
base schema, stateful service stability, safer Dockerfiles/git builds, and
platform chart hardening (Redis auth, RollingUpdate, backups, Swagger off).

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-02 19:35:07 +03:30

153 lines
5.9 KiB
YAML

{{- if .Values.database.enabled }}
{{- $name := include "cloudhost-app.name" . -}}
{{- $ns := include "cloudhost-app.namespace" . -}}
{{- $dbName := include "cloudhost-app.dbDeploymentName" . -}}
{{- $dbLogicalName := include "cloudhost-app.dbName" . -}}
{{- $dbPort := include "cloudhost-app.dbPort" . -}}
{{- $dbData := include "cloudhost-app.dbDataPath" . -}}
{{- $dbImg := include "cloudhost-app.dbImage" . -}}
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ $dbName }}
namespace: {{ $ns }}
labels:
app: {{ $dbName }}
{{- include "cloudhost-app.labels" . | nindent 4 }}
spec:
replicas: 1
# RWO volume + single replica: recreate the old pod before starting the new
# one — a rolling update would deadlock on the attached PVC.
strategy:
type: Recreate
selector:
matchLabels:
app: {{ $dbName }}
template:
metadata:
labels:
app: {{ $dbName }}
spec:
containers:
- name: {{ $dbName }}
image: {{ $dbImg }}
ports:
- containerPort: {{ include "cloudhost-app.dbPort" . | int }}
env:
{{- if eq .Values.database.type "postgresql" }}
- name: PGDATA
value: {{ include "cloudhost-app.pgDataDir" . }}
- name: POSTGRES_DB
value: {{ include "cloudhost-app.dbName" . }}
- name: POSTGRES_USER
valueFrom:
secretKeyRef:
name: {{ $name }}-db-secret
key: username
- name: POSTGRES_PASSWORD
valueFrom:
secretKeyRef:
name: {{ $name }}-db-secret
key: password
{{- else if eq .Values.database.type "mariadb" }}
- name: MARIADB_DATABASE
value: {{ include "cloudhost-app.dbName" . }}
- name: MARIADB_USER
valueFrom:
secretKeyRef:
name: {{ $name }}-db-secret
key: username
- name: MARIADB_PASSWORD
valueFrom:
secretKeyRef:
name: {{ $name }}-db-secret
key: password
- name: MARIADB_ROOT_PASSWORD
valueFrom:
secretKeyRef:
name: {{ $name }}-db-secret
key: password
{{- else if eq .Values.database.type "mongodb" }}
- name: MONGO_INITDB_DATABASE
value: {{ include "cloudhost-app.dbName" . }}
- name: MONGO_INITDB_ROOT_USERNAME
valueFrom:
secretKeyRef:
name: {{ $name }}-db-secret
key: username
- name: MONGO_INITDB_ROOT_PASSWORD
valueFrom:
secretKeyRef:
name: {{ $name }}-db-secret
key: password
{{- else }}
- name: MYSQL_DATABASE
value: {{ include "cloudhost-app.dbName" . }}
- name: MYSQL_USER
valueFrom:
secretKeyRef:
name: {{ $name }}-db-secret
key: username
- name: MYSQL_PASSWORD
valueFrom:
secretKeyRef:
name: {{ $name }}-db-secret
key: password
- name: MYSQL_ROOT_PASSWORD
valueFrom:
secretKeyRef:
name: {{ $name }}-db-secret
key: password
{{- end }}
volumeMounts:
- name: db-storage
mountPath: {{ $dbData }}
resources:
requests:
cpu: {{ .Values.database.resources.cpuRequest | quote }}
memory: {{ .Values.database.resources.memoryRequest | quote }}
limits:
cpu: {{ .Values.database.resources.cpuLimit | quote }}
memory: {{ .Values.database.resources.memoryLimit | quote }}
readinessProbe:
{{- if eq .Values.database.type "postgresql" }}
exec:
command: ["pg_isready", "-U", {{ .Values.database.username | quote }}, "-d", {{ $dbLogicalName | quote }}]
{{- else if eq .Values.database.type "mariadb" }}
exec:
command: ["healthcheck.sh", "--connect", "--innodb_initialized"]
{{- else if eq .Values.database.type "mongodb" }}
exec:
command: ["sh", "-c", "mongosh --quiet -u \"$MONGO_INITDB_ROOT_USERNAME\" -p \"$MONGO_INITDB_ROOT_PASSWORD\" --eval \"db.adminCommand('ping')\""]
{{- else }}
exec:
command: ["mysqladmin", "ping", "-h", "127.0.0.1"]
{{- end }}
initialDelaySeconds: 10
periodSeconds: 5
failureThreshold: 6
livenessProbe:
{{- if eq .Values.database.type "postgresql" }}
exec:
command: ["pg_isready", "-U", {{ .Values.database.username | quote }}, "-d", {{ $dbLogicalName | quote }}]
{{- else if eq .Values.database.type "mariadb" }}
exec:
command: ["healthcheck.sh", "--connect", "--innodb_initialized"]
{{- else if eq .Values.database.type "mongodb" }}
exec:
command: ["sh", "-c", "mongosh --quiet -u \"$MONGO_INITDB_ROOT_USERNAME\" -p \"$MONGO_INITDB_ROOT_PASSWORD\" --eval \"db.adminCommand('ping')\""]
{{- else }}
exec:
command: ["mysqladmin", "ping", "-h", "127.0.0.1"]
{{- end }}
initialDelaySeconds: 30
periodSeconds: 10
failureThreshold: 5
{{- include "cloudhost-app.logShipperContainers" (dict "root" . "workloadName" $dbName "workloadType" "database") | nindent 8 }}
volumes:
- name: db-storage
persistentVolumeClaim:
claimName: {{ $dbName }}
{{- include "cloudhost-app.logShipperVolumes" (dict "root" . "workloadName" $dbName) | nindent 8 }}
{{- end }}