apiVersion: v1 kind: Pod metadata: name: sharenet-production-pod labels: app: sharenet-production spec: containers: - name: postgres image: postgres:15-alpine env: - name: POSTGRES_DB value: "sharenet" - name: POSTGRES_USER value: "sharenet" - name: POSTGRES_PASSWORD value: "changeme" ports: - containerPort: 5432 protocol: TCP volumeMounts: - name: postgres-data mountPath: /var/lib/postgresql/data livenessProbe: exec: command: - pg_isready - -U - sharenet initialDelaySeconds: 30 periodSeconds: 30 timeoutSeconds: 10 failureThreshold: 3 readinessProbe: exec: command: - pg_isready - -U - sharenet initialDelaySeconds: 5 periodSeconds: 10 timeoutSeconds: 5 - name: backend image: localhost:4443/sharenet/backend:latest env: - name: DATABASE_URL value: "postgresql://sharenet:changeme@localhost:5432/sharenet" - name: RUST_LOG value: "info" - name: RUST_BACKTRACE value: "1" ports: - containerPort: 3001 protocol: TCP livenessProbe: httpGet: path: /health port: 3001 initialDelaySeconds: 30 periodSeconds: 30 timeoutSeconds: 10 failureThreshold: 3 readinessProbe: httpGet: path: /health port: 3001 initialDelaySeconds: 10 periodSeconds: 10 timeoutSeconds: 5 - name: frontend image: localhost:4443/sharenet/frontend:latest env: - name: NEXT_PUBLIC_API_HOST value: "localhost" - name: NEXT_PUBLIC_API_PORT value: "3001" - name: NODE_ENV value: "production" ports: - containerPort: 3000 protocol: TCP dependsOn: - name: backend condition: Ready - name: nginx image: nginx:alpine ports: - containerPort: 80 protocol: TCP - containerPort: 443 protocol: TCP volumeMounts: - name: nginx-config mountPath: /etc/nginx/nginx.conf subPath: nginx.conf readOnly: true - name: nginx-ssl mountPath: /etc/nginx/ssl readOnly: true dependsOn: - name: frontend condition: Ready - name: backend condition: Ready volumes: - name: postgres-data hostPath: path: /var/lib/postgresql/data type: Directory - name: nginx-config hostPath: path: /opt/sharenet/nginx/nginx.conf type: File - name: nginx-ssl hostPath: path: /opt/sharenet/nginx/ssl type: Directory