feat(roswell): postgres a ClusterIP y secretos Infisical preparados (alta manual pendiente en /roswell)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
2026-07-13 17:20:25 +00:00
co-authored by Claude Fable 5
parent 43e607629f
commit d903fd4631
2 changed files with 60 additions and 6 deletions
+54
View File
@@ -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 }}'
+6 -6
View File
@@ -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=<pass>
# 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