## Summary
ArgoCD Applications + Keycloak clients + sealed secret for forte-drop **web + mcp** (PROD).
## What changed
- **forte-drop** + **forte-drop-mcp** ArgoCD Applications (two-source: forte-helm chart + helm-prod-values).
- **namespace.yaml** — explicit `forte-drop` Namespace at sync-wave -1, `Prune=false` (avoids first-sync race for namespaced resources; doesn't cascade-delete on base removal).
- **keycloak-client-forte-drop** + **keycloak-client-forte-drop-mcp** — labeled config Secrets; the registrar creates the OIDC clients in the `forte` realm within ~2 min.
- **forte-drop-secrets** SealedSecret — UpCloud S3 creds (existing drops bucket) + PG creds + PASSWORD_GATE_SECRET. Consumed by both deployments + the pg-backup CronJob.
- **forte-drop-web PDB** — minAvailable 1 (selector verified against the live forteapp chart's pod labels).
- Wired into `apps/overlays/upc-dev` (NOT base → stays out of upc-prod).
## Post-merge manual step (one-time)
`auth-oidc` SealedSecret for the web sidecar is still commented out — it needs the `client-secret` the Keycloak registrar writes to `forte-drop-oidc-credentials` after first sync:
```bash
CLIENT_SECRET=$(kubectl -n forte-drop get secret forte-drop-oidc-credentials -o jsonpath='{.data.client-secret}' | base64 -d)
kubectl create secret generic auth-oidc -n forte-drop \
--from-literal=client-secret="$CLIENT_SECRET" \
--from-literal=cookie-secret="$(openssl rand -hex 32)" \
--dry-run=client -o yaml > private/auth-oidc.yaml
kubeseal --format=yaml --controller-name=sealed-secrets-controller --controller-namespace=kube-system \
< private/auth-oidc.yaml > apps/base/forte-drop/auth-oidc-sealed.yaml
# uncomment in kustomization, commit, push
```
## Depends on
- launchpad PR #17 (postgres + namespace via CreateNamespace).
- helm-prod-values forte-drop PR (values).
## Review
- [x] codex: namespace first-sync race → fixed (explicit namespace, sync-wave -1).
- [x] Keycloak registrar unblocked (stale chibisafe/minio config secrets removed; registrar green).
🤖 Generated with Claude Code
Co-authored-by: Sten <sten@Sten-sin-MacBook-Pro.local>
Co-authored-by: Sten <sten@Mac.domain_not_set.invalid>
Co-authored-by: Danijel Simeunovic <danijel.simeunovic@fortedigital.com>
Reviewed-on: #18
Reviewed-by: Danijel Simeunovic <danijel.simeunovic@fortedigital.com>
70 lines
1.5 KiB
YAML
70 lines
1.5 KiB
YAML
ingress:
|
|
main:
|
|
enabled: true
|
|
ingressClassName: traefik
|
|
annotations:
|
|
cert-manager.io/cluster-issuer: letsencrypt-prod
|
|
hosts:
|
|
- host: start.forteapps.net
|
|
paths:
|
|
- path: /
|
|
pathType: Prefix
|
|
tls:
|
|
- secretName: homepage-tls
|
|
hosts:
|
|
- start.forteapps.net
|
|
|
|
config:
|
|
settings:
|
|
title: "Forte Platform"
|
|
headerStyle: clean
|
|
layout:
|
|
Apps:
|
|
style: row
|
|
columns: 2
|
|
Security:
|
|
style: row
|
|
columns: 3
|
|
Tools:
|
|
style: row
|
|
header: false
|
|
columns: 2
|
|
DevOps:
|
|
style: column
|
|
rows: 2
|
|
Monitoring:
|
|
style: column
|
|
rows: 1
|
|
|
|
# Top-of-page cluster overview widget
|
|
widgets:
|
|
- kubernetes:
|
|
cluster:
|
|
show: true
|
|
cpu: true
|
|
memory: true
|
|
showLabel: true
|
|
label: "Cluster"
|
|
nodes:
|
|
show: true
|
|
cpu: true
|
|
memory: true
|
|
showLabel: true
|
|
# In-cluster entries come from K8s service annotations.
|
|
# External (out-of-cluster) services are listed here statically.
|
|
bookmarks: []
|
|
services:
|
|
- Apps:
|
|
- Forte Benken:
|
|
href: https://benken.hackathon.forteapps.net
|
|
description: Teknisk kompetanse fra offentlige anbud
|
|
icon: forte
|
|
- Forte Drop:
|
|
href: https://drop.forteapps.net
|
|
description: Self-hosted HTML-drops + MCP for Claude
|
|
icon: forte
|
|
- Forte Feedback:
|
|
href: https://feedback.forteapps.net
|
|
description: Fortes internal feedback app
|
|
icon: forte
|