--- apiVersion: v1 kind: Namespace metadata: name: vt labels: name: vt --- apiVersion: apps/v1 kind: Deployment metadata: name: vt-fe namespace: vt spec: selector: matchLabels: app: vt-fe template: metadata: labels: app: vt-fe spec: containers: - name: vt-fe image: git.kocoder.xyz/kocoded/vt-fe:2025120501 resources: limits: memory: "128Mi" cpu: "500m" requests: memory: "64Mi" cpu: "500m" env: - name: BACKEND_URI value: "https://vt-api.kocoder.xyz" - name: RPC_URI value: "https://vt-rpc.kocoder.xyz" - name: OIDC_USE_MOCK value: "false" - name: OIDC_ISSUER_URI value: https://keycloak.kocoder.xyz/realms/che - name: OIDC_CLIENT_ID value: eventory - name: VITE_ENVIRONMENT value: "development" ports: - containerPort: 3000 --- apiVersion: apps/v1 kind: Deployment metadata: name: vt-be namespace: vt spec: selector: matchLabels: app: vt-be template: metadata: labels: app: vt-be spec: containers: - name: vt-be image: git.kocoder.xyz/kocoded/vt-be:2025120302 resources: limits: memory: "128Mi" cpu: "500m" requests: memory: "64Mi" cpu: "500m" env: - name: CLIENT_ID value: "golang-vt-backend" - name: CLIENT_SECRET value: "awumIoacqNmwKTxRilQSM9cDmA7xA0j0" - name: BACKEND_URI value: "https://vt-api.kocoder.xyz" - name: FRONTEND_URI value: "https://vt.kocoder.xyz" - name: OTEL_EXPORTER_OTLP_TRACES_ENDPOINT value: "https://otel.kocoder.xyz/v1/traces" - name: OTEL_EXPORTER_OTLP_METRICS_ENDPOINT value: "https://otel.kocoder.xyz/v1/metrics" - name: OTEL_EXPORTER_OTLP_LOGS_ENDPOINT value: "https://otel.kocoder.xyz/v1/logs" - name: DB_DSN value: "host=10.1.0.2 user=vt password=20a1c7809cd065bc5afe7c36fde26abf625316c8a83cc841b435c9acf3619b1f dbname=vt port=5432 sslmode=prefer TimeZone=Europe/Vienna" - name: VALKEY_HOST value: "10.1.0.2" - name: VALKEY_PORT value: "6379" - name: VALKEY_USER value: "default" - name: VALKEY_PASS value: "Konsti2007!" ports: - containerPort: 3000 name: "api" - containerPort: 3002 name: "rpc" --- apiVersion: v1 kind: Service metadata: name: vt-fe namespace: vt spec: selector: app: vt-fe ports: - port: 3000 targetPort: 3000 --- apiVersion: v1 kind: Service metadata: name: vt-be namespace: vt spec: selector: app: vt-be ports: - port: 3000 targetPort: 3000 - port: 3002 targetPort: 3002 --- apiVersion: cert-manager.io/v1 kind: Certificate metadata: name: vt-kocoder-xyz-prod namespace: vt spec: secretName: vt-tls issuerRef: name: letsencrypt-prod kind: ClusterIssuer commonName: "vt.kocoder.xyz" dnsNames: - "vt.kocoder.xyz" - "vt-api.kocoder.xyz" - "vt-rpc.kocoder.xyz" --- apiVersion: traefik.io/v1alpha1 kind: IngressRoute metadata: name: vt-fe namespace: vt spec: entryPoints: - web - websecure routes: - kind: Rule match: Host(`vt.kocoder.xyz`) observability: accessLogs: true metrics: true tracing: true priority: 10 services: - kind: Service name: vt-fe namespace: vt passHostHeader: true port: 3000 responseForwarding: flushInterval: 1ms scheme: http sticky: cookie: httpOnly: true name: cookie secure: true strategy: wrr weight: 10 - kind: Rule match: Host(`vt-api.kocoder.xyz`) observability: accessLogs: true metrics: true tracing: true priority: 10 services: - kind: Service name: vt-be namespace: vt passHostHeader: true port: 3000 responseForwarding: flushInterval: 1ms scheme: http sticky: cookie: httpOnly: true name: cookie secure: true strategy: wrr weight: 10 - kind: Rule match: Host(`vt-rpc.kocoder.xyz`) observability: accessLogs: true metrics: true tracing: true priority: 10 services: - kind: Service name: vt-be namespace: vt passHostHeader: true port: 3002 responseForwarding: flushInterval: 1ms scheme: http sticky: cookie: httpOnly: true name: cookie secure: true strategy: wrr weight: 10 tls: secretName: vt-tls