Files
keyhan 54ab2f2f05 Fix Kaniko registry auth and push target for Harbor builds.
Mount docker config as config.json (Kaniko requirement), push via
harbor-registry internal URL, and wire harbor_registry_user credentials
in Helm/GitOps values.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-10 12:29:23 +03:30

177 lines
6.6 KiB
YAML

{{- if .Values.backend.enabled }}
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ include "cloudhost-platform.backend.fullname" . }}
namespace: {{ include "cloudhost-platform.namespace" . }}
labels:
app: {{ include "cloudhost-platform.backend.fullname" . }}
{{- include "cloudhost-platform.labels" . | nindent 4 }}
spec:
replicas: {{ .Values.backend.replicas }}
# Zero-downtime rollouts: DB migrations run in a pre-upgrade hook Job, so the
# new pod only starts against a ready schema. The uploads PVC is RWO but
# local-path volumes pin pods to the same node, so surge pods can attach.
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 1
maxUnavailable: 0
selector:
matchLabels:
app: {{ include "cloudhost-platform.backend.fullname" . }}
template:
metadata:
labels:
app: {{ include "cloudhost-platform.backend.fullname" . }}
spec:
{{- with .Values.backend.imagePullSecrets }}
imagePullSecrets:
{{- toYaml . | nindent 8 }}
{{- end }}
initContainers:
{{- if .Values.postgres.enabled }}
- name: wait-postgres
image: {{ .Values.images.busybox | quote }}
command:
- sh
- -c
- |
until nc -z {{ include "cloudhost-platform.postgres.fullname" . }} 5432; do
echo "waiting for postgres..."
sleep 2
done
{{- end }}
{{- if .Values.redis.enabled }}
- name: wait-redis
image: {{ .Values.images.busybox | quote }}
command:
- sh
- -c
- |
until nc -z {{ include "cloudhost-platform.redis.fullname" . }} 6379; do
echo "waiting for redis..."
sleep 2
done
{{- end }}
containers:
- name: backend
image: {{ include "cloudhost-platform.backendImage" . | quote }}
imagePullPolicy: {{ .Values.images.backend.pullPolicy }}
ports:
- containerPort: 4000
env:
- name: DB_HOST
value: {{ include "cloudhost-platform.postgres.fullname" . }}
- name: DB_PORT
value: "5432"
- name: DB_USERNAME
value: {{ .Values.postgres.username | quote }}
- name: DB_PASSWORD
valueFrom:
secretKeyRef:
name: {{ include "cloudhost-platform.secretName" . }}
key: postgres-password
- name: DB_DATABASE
value: {{ .Values.postgres.database | quote }}
- name: REDIS_HOST
value: {{ include "cloudhost-platform.redis.fullname" . }}
- name: REDIS_PORT
value: "6379"
- name: REDIS_PASSWORD
valueFrom:
secretKeyRef:
name: {{ include "cloudhost-platform.secretName" . }}
key: redis-password
- name: JWT_SECRET
valueFrom:
secretKeyRef:
name: {{ include "cloudhost-platform.secretName" . }}
key: jwt-secret
- name: JWT_REFRESH_SECRET
valueFrom:
secretKeyRef:
name: {{ include "cloudhost-platform.secretName" . }}
key: jwt-refresh-secret
- name: CLUSTER_KUBECONFIG_KEY
valueFrom:
secretKeyRef:
name: {{ include "cloudhost-platform.secretName" . }}
key: cluster-kubeconfig-key
- name: ELASTIC_PASSWORD
valueFrom:
secretKeyRef:
name: {{ include "cloudhost-platform.secretName" . }}
key: elastic-password
- name: FRONTEND_URL
value: {{ include "cloudhost-platform.corsOrigins" . | quote }}
{{- if .Values.backend.sms.enabled }}
- name: SMS_PROVIDER
value: {{ .Values.backend.sms.provider | default "mizbansms" | quote }}
- name: MIZBANSMS_FROM
value: {{ .Values.backend.sms.from | default "5000467254" | quote }}
- name: MIZBANSMS_API
value: {{ .Values.backend.sms.api | default "2016" | quote }}
- name: MIZBANSMS_USERTYPE
value: {{ .Values.backend.sms.userType | default "2" | quote }}
- name: MIZBANSMS_USERNAME
valueFrom:
secretKeyRef:
name: {{ include "cloudhost-platform.secretName" . }}
key: mizbansms-username
- name: MIZBANSMS_PASSWORD
valueFrom:
secretKeyRef:
name: {{ include "cloudhost-platform.secretName" . }}
key: mizbansms-password
{{- end }}
{{- if .Values.registry.credentialsSecret }}
- name: REGISTRY_USERNAME
value: {{ .Values.registry.username | default "harbor_registry_user" | quote }}
- name: REGISTRY_PASSWORD
valueFrom:
secretKeyRef:
name: {{ .Values.registry.credentialsSecret | quote }}
key: {{ .Values.registry.credentialsPasswordKey | default "REGISTRY_CREDENTIAL_PASSWORD" | quote }}
{{- end }}
{{- include "cloudhost-platform.buildEnv" . | nindent 12 }}
{{- range $key, $val := .Values.backend.env }}
- name: {{ $key }}
value: {{ $val | quote }}
{{- end }}
{{- range $key, $val := .Values.backend.extraEnv }}
- name: {{ $key }}
value: {{ $val | quote }}
{{- end }}
{{- if .Values.backend.sourceStorage.enabled }}
envFrom:
- secretRef:
name: {{ .Values.backend.sourceStorage.existingSecret }}
{{- end }}
volumeMounts:
- name: uploads
mountPath: /app/uploads
livenessProbe:
httpGet:
path: /api/v1/health
port: 4000
initialDelaySeconds: 60
periodSeconds: 15
timeoutSeconds: 5
readinessProbe:
httpGet:
path: /api/v1/ready
port: 4000
initialDelaySeconds: 20
periodSeconds: 10
timeoutSeconds: 5
{{- with .Values.backend.resources }}
resources:
{{- toYaml . | nindent 12 }}
{{- end }}
volumes:
- name: uploads
persistentVolumeClaim:
claimName: {{ include "cloudhost-platform.backend.fullname" . }}-uploads
{{- end }}