apiVersion: v1 kind: Namespace metadata: name: poimen --- apiVersion: v1 kind: Secret metadata: name: poimen-registry namespace: poimen type: kubernetes.io/dockercfg data: .dockercfg: eyJmb3JnZWpvLnJpb3RwaWFvLmNvbSI6eyJhdXRoIjoiYmFzZTY0LWVuY29kZWQtY3JlZGVudGlhbHMifX0= --- # Poimen Memory Service apiVersion: apps/v1 kind: Deployment metadata: name: poimen-memory namespace: poimen spec: replicas: 1 selector: matchLabels: app: poimen-memory template: metadata: labels: app: poimen-memory spec: imagePullSecrets: - name: poimen-registry containers: - name: memory image: forgejo.riotpiao.com/rock/poimen-memory:latest imagePullPolicy: Always ports: - containerPort: 8000 env: - name: DATABASE_URL valueFrom: secretKeyRef: name: poimen-db-credentials key: memory-url - name: REDIS_URL valueFrom: configMapKeyRef: name: poimen-config key: redis-url - name: JWT_SECRET valueFrom: secretKeyRef: name: poimen-secrets key: jwt-secret livenessProbe: httpGet: path: /health port: 8000 initialDelaySeconds: 10 periodSeconds: 10 readinessProbe: httpGet: path: /ready port: 8000 initialDelaySeconds: 5 periodSeconds: 5 --- apiVersion: v1 kind: Service metadata: name: poimen-memory namespace: poimen spec: selector: app: poimen-memory ports: - port: 8000 targetPort: 8000 type: ClusterIP --- # Poimen Workflows Service apiVersion: apps/v1 kind: Deployment metadata: name: poimen-workflows namespace: poimen spec: replicas: 2 selector: matchLabels: app: poimen-workflows template: metadata: labels: app: poimen-workflows spec: imagePullSecrets: - name: poimen-registry containers: - name: workflows-server image: forgejo.riotpiao.com/rock/poimen-workflows:latest imagePullPolicy: Always command: ["/app/workflows", "server"] ports: - containerPort: 8080 env: - name: DATABASE_URL valueFrom: secretKeyRef: name: poimen-db-credentials key: workflows-url - name: TEMPORAL_HOST valueFrom: configMapKeyRef: name: poimen-config key: temporal-host - name: MEMORY_SERVICE_URL valueFrom: configMapKeyRef: name: poimen-config key: memory-service-url - name: JWT_SECRET valueFrom: secretKeyRef: name: poimen-secrets key: jwt-secret livenessProbe: httpGet: path: /health port: 8080 initialDelaySeconds: 10 periodSeconds: 10 readinessProbe: httpGet: path: /ready port: 8080 initialDelaySeconds: 5 periodSeconds: 5 - name: workflows-worker image: forgejo.riotpiao.com/rock/poimen-workflows:latest imagePullPolicy: Always command: ["/app/workflows", "worker"] env: - name: DATABASE_URL valueFrom: secretKeyRef: name: poimen-db-credentials key: workflows-url - name: TEMPORAL_HOST valueFrom: configMapKeyRef: name: poimen-config key: temporal-host - name: MEMORY_SERVICE_URL valueFrom: configMapKeyRef: name: poimen-config key: memory-service-url --- apiVersion: v1 kind: Service metadata: name: poimen-workflows namespace: poimen spec: selector: app: poimen-workflows ports: - port: 8080 targetPort: 8080 type: ClusterIP --- # Poimen Frontend Service apiVersion: apps/v1 kind: Deployment metadata: name: poimen-frontend namespace: poimen spec: replicas: 2 selector: matchLabels: app: poimen-frontend template: metadata: labels: app: poimen-frontend spec: imagePullSecrets: - name: poimen-registry containers: - name: frontend image: forgejo.riotpiao.com/rock/poimen-frontend:latest imagePullPolicy: Always ports: - containerPort: 3000 env: - name: NEXT_PUBLIC_WORKFLOWS_API valueFrom: configMapKeyRef: name: poimen-config key: workflows-api-url - name: NEXT_PUBLIC_MEMORY_API valueFrom: configMapKeyRef: name: poimen-config key: memory-api-url - name: NEXT_PUBLIC_AUTH_URL valueFrom: configMapKeyRef: name: poimen-config key: auth-url - name: OAUTH_CLIENT_ID valueFrom: secretKeyRef: name: poimen-secrets key: oauth-client-id - name: OAUTH_CLIENT_SECRET valueFrom: secretKeyRef: name: poimen-secrets key: oauth-client-secret livenessProbe: httpGet: path: / port: 3000 initialDelaySeconds: 10 periodSeconds: 10 readinessProbe: httpGet: path: / port: 3000 initialDelaySeconds: 5 periodSeconds: 5 --- apiVersion: v1 kind: Service metadata: name: poimen-frontend namespace: poimen spec: selector: app: poimen-frontend ports: - port: 80 targetPort: 3000 type: LoadBalancer --- # ConfigMap for shared configuration apiVersion: v1 kind: ConfigMap metadata: name: poimen-config namespace: poimen data: temporal-host: "temporal:7233" redis-url: "redis://redis:6379" workflows-api-url: "http://poimen-workflows:8080" memory-api-url: "http://poimen-memory:8000" auth-url: "https://auth.riotpiao.com" memory-service-url: "http://poimen-memory:8000" --- # Secrets placeholder - should be created separately apiVersion: v1 kind: Secret metadata: name: poimen-db-credentials namespace: poimen type: Opaque stringData: memory-url: "postgresql://user:pass@postgres:5432/poimen_memory" workflows-url: "postgresql://user:pass@postgres:5432/poimen_workflows" --- apiVersion: v1 kind: Secret metadata: name: poimen-secrets namespace: poimen type: Opaque stringData: jwt-secret: "your-jwt-secret-here" oauth-client-id: "your-oauth-client-id" oauth-client-secret: "your-oauth-client-secret"