apiVersion: apps/v1 kind: Deployment metadata: name: seo-api namespace: seo-image-renamer labels: app: seo-api component: backend spec: replicas: 3 strategy: type: RollingUpdate rollingUpdate: maxSurge: 1 maxUnavailable: 1 selector: matchLabels: app: seo-api template: metadata: labels: app: seo-api component: backend spec: containers: - name: api image: seo-image-renamer/api:latest ports: - containerPort: 3001 name: http env: - name: NODE_ENV valueFrom: configMapKeyRef: name: seo-image-renamer-config key: NODE_ENV - name: PORT valueFrom: configMapKeyRef: name: seo-image-renamer-config key: PORT - name: DATABASE_URL valueFrom: secretKeyRef: name: seo-image-renamer-secrets key: DATABASE_URL - name: JWT_SECRET valueFrom: secretKeyRef: name: seo-image-renamer-secrets key: JWT_SECRET - name: GOOGLE_CLIENT_ID valueFrom: secretKeyRef: name: seo-image-renamer-secrets key: GOOGLE_CLIENT_ID - name: GOOGLE_CLIENT_SECRET valueFrom: secretKeyRef: name: seo-image-renamer-secrets key: GOOGLE_CLIENT_SECRET - name: STRIPE_SECRET_KEY valueFrom: secretKeyRef: name: seo-image-renamer-secrets key: STRIPE_SECRET_KEY - name: STRIPE_WEBHOOK_SECRET valueFrom: secretKeyRef: name: seo-image-renamer-secrets key: STRIPE_WEBHOOK_SECRET - name: OPENAI_API_KEY valueFrom: secretKeyRef: name: seo-image-renamer-secrets key: OPENAI_API_KEY - name: REDIS_URL value: "redis://$(REDIS_PASSWORD)@redis-service:6379" - name: REDIS_PASSWORD valueFrom: secretKeyRef: name: seo-image-renamer-secrets key: REDIS_PASSWORD - name: MINIO_ENDPOINT valueFrom: configMapKeyRef: name: seo-image-renamer-config key: MINIO_ENDPOINT - name: MINIO_ACCESS_KEY valueFrom: secretKeyRef: name: seo-image-renamer-secrets key: MINIO_ACCESS_KEY - name: MINIO_SECRET_KEY valueFrom: secretKeyRef: name: seo-image-renamer-secrets key: MINIO_SECRET_KEY - name: SENTRY_DSN valueFrom: secretKeyRef: name: seo-image-renamer-secrets key: SENTRY_DSN resources: requests: memory: "256Mi" cpu: "250m" limits: memory: "512Mi" cpu: "500m" livenessProbe: httpGet: path: /api/health port: 3001 initialDelaySeconds: 30 periodSeconds: 10 timeoutSeconds: 5 failureThreshold: 3 readinessProbe: httpGet: path: /api/health port: 3001 initialDelaySeconds: 5 periodSeconds: 5 timeoutSeconds: 3 successThreshold: 1 failureThreshold: 3 volumeMounts: - name: temp-storage mountPath: /tmp volumes: - name: temp-storage emptyDir: {} restartPolicy: Always --- apiVersion: v1 kind: Service metadata: name: seo-api-service namespace: seo-image-renamer labels: app: seo-api spec: selector: app: seo-api ports: - name: http port: 80 targetPort: 3001 protocol: TCP type: ClusterIP