0c0a6cd5be
- Replace port-forward/netcat PVC upload with kubectl cp for integrity - Add build cancellation API and session cleanup; deploy catches cancel - Default port 80 for WordPress, PHP, and Laravel on create - Build progress modal with cancel; Helm/K8s adjustments for deployments - Update build and kubernetes specs Co-authored-by: Cursor <cursoragent@cursor.com>
241 lines
9.1 KiB
YAML
241 lines
9.1 KiB
YAML
{{- $name := include "cloudhost-app.name" . -}}
|
|
{{- $ns := include "cloudhost-app.namespace" . -}}
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
metadata:
|
|
name: {{ $name }}
|
|
namespace: {{ $ns }}
|
|
labels:
|
|
{{- include "cloudhost-app.labels" . | nindent 4 }}
|
|
annotations:
|
|
kubernetes.io/change-cause: {{ .Values.changeCause | default (printf "Deploy %s" .Values.app.image) | quote }}
|
|
spec:
|
|
revisionHistoryLimit: 10
|
|
replicas: {{ .Values.app.replicas }}
|
|
selector:
|
|
matchLabels:
|
|
{{- include "cloudhost-app.selectorLabels" . | nindent 6 }}
|
|
template:
|
|
metadata:
|
|
labels:
|
|
{{- include "cloudhost-app.labels" . | nindent 8 }}
|
|
spec:
|
|
imagePullSecrets:
|
|
- name: registry-pull-secret
|
|
containers:
|
|
- name: {{ $name }}
|
|
image: {{ .Values.app.image | quote }}
|
|
imagePullPolicy: Always
|
|
ports:
|
|
- containerPort: {{ .Values.app.port }}
|
|
{{- if and .Values.envVars (gt (len .Values.envVars) 0) }}
|
|
envFrom:
|
|
- secretRef:
|
|
name: {{ $name }}-env
|
|
{{- end }}
|
|
env:
|
|
{{- if and .Values.database.enabled (eq .Values.database.type "postgresql") }}
|
|
- name: DB_HOST
|
|
value: {{ include "cloudhost-app.dbDeploymentName" . }}
|
|
- name: DB_PORT
|
|
value: "5432"
|
|
- name: DB_NAME
|
|
value: {{ include "cloudhost-app.dbName" . }}
|
|
- name: DB_USER
|
|
valueFrom:
|
|
secretKeyRef:
|
|
name: {{ $name }}-db-secret
|
|
key: username
|
|
- name: DB_PASSWORD
|
|
valueFrom:
|
|
secretKeyRef:
|
|
name: {{ $name }}-db-secret
|
|
key: password
|
|
- name: DATABASE_URL
|
|
value: "postgresql://$(DB_USER):$(DB_PASSWORD)@{{ include "cloudhost-app.dbDeploymentName" . }}:5432/{{ include "cloudhost-app.dbName" . }}"
|
|
{{- end }}
|
|
{{- if and .Values.database.enabled (eq .Values.database.type "mysql") }}
|
|
- name: DB_HOST
|
|
value: {{ include "cloudhost-app.dbDeploymentName" . }}
|
|
- name: DB_PORT
|
|
value: "3306"
|
|
- name: DB_NAME
|
|
value: {{ include "cloudhost-app.dbName" . }}
|
|
- name: DB_USER
|
|
valueFrom:
|
|
secretKeyRef:
|
|
name: {{ $name }}-db-secret
|
|
key: username
|
|
- name: DB_PASSWORD
|
|
valueFrom:
|
|
secretKeyRef:
|
|
name: {{ $name }}-db-secret
|
|
key: password
|
|
- name: DATABASE_URL
|
|
value: "mysql://$(DB_USER):$(DB_PASSWORD)@{{ include "cloudhost-app.dbDeploymentName" . }}:3306/{{ include "cloudhost-app.dbName" . }}"
|
|
{{- end }}
|
|
{{- if and .Values.database.enabled (eq .Values.database.type "mariadb") }}
|
|
- name: DB_HOST
|
|
value: {{ include "cloudhost-app.dbDeploymentName" . }}
|
|
- name: DB_PORT
|
|
value: "3306"
|
|
- name: DB_NAME
|
|
value: {{ include "cloudhost-app.dbName" . }}
|
|
- name: DB_USER
|
|
valueFrom:
|
|
secretKeyRef:
|
|
name: {{ $name }}-db-secret
|
|
key: username
|
|
- name: DB_PASSWORD
|
|
valueFrom:
|
|
secretKeyRef:
|
|
name: {{ $name }}-db-secret
|
|
key: password
|
|
- name: DATABASE_URL
|
|
value: "mysql://$(DB_USER):$(DB_PASSWORD)@{{ include "cloudhost-app.dbDeploymentName" . }}:3306/{{ include "cloudhost-app.dbName" . }}"
|
|
{{- end }}
|
|
{{- if and .Values.database.enabled (eq .Values.database.type "mongodb") }}
|
|
- name: DB_HOST
|
|
value: {{ include "cloudhost-app.dbDeploymentName" . }}
|
|
- name: DB_PORT
|
|
value: "27017"
|
|
- name: DB_NAME
|
|
value: {{ include "cloudhost-app.dbName" . }}
|
|
- name: DB_USER
|
|
valueFrom:
|
|
secretKeyRef:
|
|
name: {{ $name }}-db-secret
|
|
key: username
|
|
- name: DB_PASSWORD
|
|
valueFrom:
|
|
secretKeyRef:
|
|
name: {{ $name }}-db-secret
|
|
key: password
|
|
- name: MONGODB_URI
|
|
value: "mongodb://$(DB_USER):$(DB_PASSWORD)@{{ include "cloudhost-app.dbDeploymentName" . }}:27017/{{ include "cloudhost-app.dbName" . }}?authSource=admin"
|
|
- name: DATABASE_URL
|
|
value: "mongodb://$(DB_USER):$(DB_PASSWORD)@{{ include "cloudhost-app.dbDeploymentName" . }}:27017/{{ include "cloudhost-app.dbName" . }}?authSource=admin"
|
|
{{- end }}
|
|
{{- /* Redis connection env vars */}}
|
|
{{- if .Values.redis.enabled }}
|
|
- name: REDIS_HOST
|
|
value: {{ printf "%s-redis" $name }}
|
|
- name: REDIS_PORT
|
|
value: "6379"
|
|
- name: REDIS_PASSWORD
|
|
valueFrom:
|
|
secretKeyRef:
|
|
name: {{ printf "%s-redis-secret" $name }}
|
|
key: password
|
|
- name: REDIS_URL
|
|
value: "redis://:$(REDIS_PASSWORD)@{{ printf "%s-redis" $name }}:6379"
|
|
{{- end }}
|
|
{{- /* RabbitMQ connection env vars */}}
|
|
{{- if .Values.rabbitmq.enabled }}
|
|
- name: RABBITMQ_HOST
|
|
value: {{ printf "%s-rabbitmq" $name }}
|
|
- name: RABBITMQ_PORT
|
|
value: "5672"
|
|
- name: RABBITMQ_MANAGEMENT_PORT
|
|
value: "15672"
|
|
- name: RABBITMQ_USER
|
|
valueFrom:
|
|
secretKeyRef:
|
|
name: {{ printf "%s-rabbitmq-secret" $name }}
|
|
key: username
|
|
- name: RABBITMQ_PASSWORD
|
|
valueFrom:
|
|
secretKeyRef:
|
|
name: {{ printf "%s-rabbitmq-secret" $name }}
|
|
key: password
|
|
- name: AMQP_URL
|
|
value: "amqp://$(RABBITMQ_USER):$(RABBITMQ_PASSWORD)@{{ printf "%s-rabbitmq" $name }}:5672"
|
|
{{- end }}
|
|
{{- /* WordPress-specific env vars (official image expects these) */}}
|
|
{{- if and .Values.wordpress.enabled .Values.database.enabled }}
|
|
- name: WORDPRESS_DB_HOST
|
|
value: "{{ include "cloudhost-app.dbDeploymentName" . }}:{{ include "cloudhost-app.dbPort" . }}"
|
|
- name: WORDPRESS_DB_NAME
|
|
value: {{ include "cloudhost-app.dbName" . }}
|
|
- name: WORDPRESS_DB_USER
|
|
valueFrom:
|
|
secretKeyRef:
|
|
name: {{ $name }}-db-secret
|
|
key: username
|
|
- name: WORDPRESS_DB_PASSWORD
|
|
valueFrom:
|
|
secretKeyRef:
|
|
name: {{ $name }}-db-secret
|
|
key: password
|
|
- name: WORDPRESS_TABLE_PREFIX
|
|
value: "wp_"
|
|
{{- end }}
|
|
resources:
|
|
requests:
|
|
cpu: {{ .Values.resources.cpuRequest | quote }}
|
|
memory: {{ .Values.resources.memoryRequest | quote }}
|
|
limits:
|
|
cpu: {{ .Values.resources.cpuLimit | quote }}
|
|
memory: {{ .Values.resources.memoryLimit | quote }}
|
|
readinessProbe:
|
|
tcpSocket:
|
|
port: {{ .Values.app.port }}
|
|
initialDelaySeconds: 5
|
|
periodSeconds: 5
|
|
livenessProbe:
|
|
tcpSocket:
|
|
port: {{ .Values.app.port }}
|
|
initialDelaySeconds: 15
|
|
periodSeconds: 10
|
|
failureThreshold: 5
|
|
volumeMounts:
|
|
- name: app-storage
|
|
mountPath: {{ include "cloudhost-app.storageMountPath" . | trim }}
|
|
{{- if .Values.elasticsearch.enabled }}
|
|
- name: app-logs
|
|
mountPath: /var/log/app
|
|
{{- end }}
|
|
{{- if .Values.elasticsearch.enabled }}
|
|
- name: fluent-bit
|
|
image: fluent/fluent-bit:2.2
|
|
resources:
|
|
requests:
|
|
cpu: "10m"
|
|
memory: "32Mi"
|
|
limits:
|
|
cpu: "50m"
|
|
memory: "64Mi"
|
|
volumeMounts:
|
|
- name: app-logs
|
|
mountPath: /var/log/app
|
|
readOnly: true
|
|
- name: fluent-bit-config
|
|
mountPath: /fluent-bit/etc
|
|
env:
|
|
- name: APP_NAME
|
|
value: {{ $name }}
|
|
- name: APP_NAMESPACE
|
|
value: {{ $ns }}
|
|
- name: ES_HOST
|
|
value: "elasticsearch.logging.svc.cluster.local"
|
|
- name: ES_PORT
|
|
value: "9200"
|
|
- name: ES_PASSWORD
|
|
valueFrom:
|
|
secretKeyRef:
|
|
name: elasticsearch-credentials
|
|
key: ELASTIC_PASSWORD
|
|
optional: true
|
|
{{- end }}
|
|
volumes:
|
|
- name: app-storage
|
|
persistentVolumeClaim:
|
|
claimName: {{ $name }}-storage
|
|
{{- if .Values.elasticsearch.enabled }}
|
|
- name: app-logs
|
|
emptyDir: {}
|
|
- name: fluent-bit-config
|
|
configMap:
|
|
name: {{ $name }}-fluent-bit-config
|
|
{{- end }}
|