titan-iac/services/health/sparkyfitness-server-deployment.yaml

171 lines
5.3 KiB
YAML

# services/health/sparkyfitness-server-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: sparkyfitness-server
namespace: health
labels:
app: sparkyfitness-server
spec:
replicas: 1
selector:
matchLabels:
app: sparkyfitness-server
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 0
maxUnavailable: 1
template:
metadata:
labels:
app: sparkyfitness-server
spec:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: hardware
operator: In
values: ["rpi5", "rpi4"]
- key: node-role.kubernetes.io/worker
operator: Exists
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 90
preference:
matchExpressions:
- key: hardware
operator: In
values: ["rpi5"]
- weight: 70
preference:
matchExpressions:
- key: hardware
operator: In
values: ["rpi4"]
securityContext:
runAsUser: 1000
runAsGroup: 1000
fsGroup: 1000
fsGroupChangePolicy: OnRootMismatch
initContainers:
- name: init-data
image: alpine:3.20
command: ["/bin/sh", "-c"]
args:
- |
set -e
mkdir -p /data/uploads /data/backup
chown -R 1000:1000 /data
securityContext:
runAsUser: 0
runAsGroup: 0
volumeMounts:
- name: sparkyfitness-data
mountPath: /data
containers:
- name: sparkyfitness-server
image: codewithcj/sparkyfitness_server:0.16.3.3
imagePullPolicy: IfNotPresent
ports:
- name: http
containerPort: 3010
env:
- name: SPARKY_FITNESS_SERVER_PORT
value: "3010"
- name: SPARKY_FITNESS_LOG_LEVEL
value: INFO
- name: NODE_ENV
value: production
- name: TZ
value: Etc/UTC
- name: SPARKY_FITNESS_FRONTEND_URL
value: https://sparkyfitness.bstein.dev
- name: SPARKY_FITNESS_DISABLE_SIGNUP
value: "false"
- name: SPARKY_FITNESS_DB_HOST
valueFrom:
secretKeyRef:
name: sparkyfitness-db
key: SPARKY_FITNESS_DB_HOST
- name: SPARKY_FITNESS_DB_PORT
valueFrom:
secretKeyRef:
name: sparkyfitness-db
key: SPARKY_FITNESS_DB_PORT
- name: SPARKY_FITNESS_DB_NAME
valueFrom:
secretKeyRef:
name: sparkyfitness-db
key: SPARKY_FITNESS_DB_NAME
- name: SPARKY_FITNESS_DB_USER
valueFrom:
secretKeyRef:
name: sparkyfitness-db
key: SPARKY_FITNESS_DB_USER
- name: SPARKY_FITNESS_DB_PASSWORD
valueFrom:
secretKeyRef:
name: sparkyfitness-db
key: SPARKY_FITNESS_DB_PASSWORD
- name: SPARKY_FITNESS_APP_DB_USER
valueFrom:
secretKeyRef:
name: sparkyfitness-db
key: SPARKY_FITNESS_APP_DB_USER
- name: SPARKY_FITNESS_APP_DB_PASSWORD
valueFrom:
secretKeyRef:
name: sparkyfitness-db
key: SPARKY_FITNESS_APP_DB_PASSWORD
- name: SPARKY_FITNESS_API_ENCRYPTION_KEY
valueFrom:
secretKeyRef:
name: sparkyfitness-secrets
key: SPARKY_FITNESS_API_ENCRYPTION_KEY
- name: JWT_SECRET
valueFrom:
secretKeyRef:
name: sparkyfitness-secrets
key: JWT_SECRET
- name: SPARKY_FITNESS_ADMIN_EMAIL
valueFrom:
secretKeyRef:
name: sparkyfitness-admin
key: email
volumeMounts:
- name: sparkyfitness-data
mountPath: /app/SparkyFitnessServer/uploads
subPath: uploads
- name: sparkyfitness-data
mountPath: /app/SparkyFitnessServer/backup
subPath: backup
readinessProbe:
httpGet:
path: /health
port: http
initialDelaySeconds: 15
periodSeconds: 10
timeoutSeconds: 3
failureThreshold: 6
livenessProbe:
httpGet:
path: /health
port: http
initialDelaySeconds: 30
periodSeconds: 20
timeoutSeconds: 3
failureThreshold: 6
resources:
requests:
cpu: 200m
memory: 512Mi
limits:
cpu: "1"
memory: 2Gi
volumes:
- name: sparkyfitness-data
persistentVolumeClaim:
claimName: sparkyfitness-data