diff --git a/roswell/infisical-roswell-secrets.yaml b/roswell/infisical-roswell-secrets.yaml new file mode 100644 index 0000000..bdaa4ef --- /dev/null +++ b/roswell/infisical-roswell-secrets.yaml @@ -0,0 +1,54 @@ +# Secretos de la app respaldados por Infisical (patrón researchowl). +# +# ALTA PENDIENTE (manual, una vez): la identidad de máquina compartida es de +# solo lectura, así que hay que crear en https://infisical.chemavx.xyz +# (proyecto "homelab", entorno prod) la carpeta /roswell con estas claves: +# TELEGRAM_BOT_TOKEN, TELEGRAM_ALLOWED_USERS, ANTHROPIC_API_KEY, +# PODCASTINDEX_KEY, PODCASTINDEX_SECRET, POSTGRES_PASSWORD +# (los valores están en el .env local y en los Secrets planos actuales). +# +# CORTE: cuando /roswell exista y los Secrets *-infisical aparezcan Synced, +# cambiar las referencias de deployment.yaml, postgres.yaml y +# backup-cronjob.yaml a los nombres *-infisical y borrar los planos: +# kubectl delete secret roswell-secrets roswell-pg-secret -n roswell +apiVersion: secrets.infisical.com/v1beta1 +kind: InfisicalStaticSecret +metadata: + name: roswell-secrets + namespace: roswell +spec: + # Identidad compartida de solo lectura (sin write, sin PushSecret). + infisicalAuthRef: + name: infisical-auth + namespace: infisical-operator + sources: + - projectId: 17e98e9d-70f5-43d1-8382-7da818dfcdd0 # project "homelab" + environmentSlug: prod + secretPath: /roswell + syncOptions: + refreshInterval: 60s + targets: + # Nombres *-infisical en paralelo a los Secrets planos hasta el corte, + # como se hizo en researchowl. + - kind: Secret + name: roswell-secrets-infisical + namespace: roswell + creationPolicy: Owner + template: + engineVersion: v1 + data: + telegram-bot-token: '{{ .TELEGRAM_BOT_TOKEN.Value }}' + telegram-allowed-users: '{{ .TELEGRAM_ALLOWED_USERS.Value }}' + anthropic-api-key: '{{ .ANTHROPIC_API_KEY.Value }}' + podcastindex-key: '{{ .PODCASTINDEX_KEY.Value }}' + podcastindex-secret: '{{ .PODCASTINDEX_SECRET.Value }}' + # La URL completa se reconstruye: un solo sitio para la password. + database-url: 'postgresql://roswell:{{ .POSTGRES_PASSWORD.Value }}@postgres.roswell.svc.cluster.local:5432/roswell' + - kind: Secret + name: roswell-pg-secret-infisical + namespace: roswell + creationPolicy: Owner + template: + engineVersion: v1 + data: + password: '{{ .POSTGRES_PASSWORD.Value }}' diff --git a/roswell/postgres.yaml b/roswell/postgres.yaml index cf33ada..eb8d031 100644 --- a/roswell/postgres.yaml +++ b/roswell/postgres.yaml @@ -1,8 +1,9 @@ # Postgres 16 + pgvector para el corpus (namespace roswell). -# El Secret roswell-pg-secret se crea imperativamente (PLAN Fase 6): -# kubectl create secret generic roswell-pg-secret -n roswell \ -# --from-literal=password= -# NodePort 30432 para acceso desde la LAN/nodos durante el desarrollo local. +# El Secret roswell-pg-secret se crea imperativamente (PLAN Fase 6); +# migración a Infisical preparada en infisical-roswell-secrets.yaml. +# ClusterIP (cierre Fase 6): con el bot ya en el clúster el NodePort 30432 +# sobraba. Acceso local puntual: desde un nodo del clúster la ClusterIP +# responde directa; desde fuera, kubectl port-forward -n roswell svc/postgres 15432:5432. apiVersion: v1 kind: Namespace metadata: @@ -81,10 +82,9 @@ metadata: name: postgres namespace: roswell spec: - type: NodePort + type: ClusterIP selector: app: roswell-postgres ports: - port: 5432 targetPort: 5432 - nodePort: 30432