GitHub Secrets y generación de .env

Primera instalación en tu máquina: empieza por Instalación. Este documento es para producción y GitHub Actions.

Los secretos nunca se guardan en el repositorio. Se configuran en GitHub y se inyectan como variables de entorno en runners o servidores de deploy.

Flujo de deploy (futuro)

flowchart LR
  GH[GitHub Secrets]
  Render[scripts/render-env.sh]
  Env[uni-chat-backend/.env]
  Compose[docker compose up]

  GH -->|vars en el job| Render
  Render --> Env
  Env --> Compose

Dónde crear los secrets

  1. Repositorio → Settings → Secrets and variables → Actions
  2. New repository secret por cada fila (mismo nombre que la variable)
  3. Para staging/producción distintos, usar Environments con secrets por entorno

Tabla: Secret de GitHub → variable .env

Validada contra scripts/render-env.sh:

Secret (GitHub) Variable en .env Obligatorio Uso
MONGO_ROOT_USERNAME MONGO_ROOT_USERNAME Sí MongoDB en Docker
MONGO_ROOT_PASSWORD MONGO_ROOT_PASSWORD Sí MongoDB en Docker
MONGO_CONNECTION_STRING MONGO_CONNECTION_STRING Sí Cadena para la API en contenedor
MONGO_DATABASE MONGO_DATABASE Sí Nombre de base de datos
REDIS_CONNECTION_STRING REDIS_CONNECTION_STRING Sí Redis
RABBITMQ_USER RABBITMQ_USER Sí RabbitMQ
RABBITMQ_PASS RABBITMQ_PASS Sí RabbitMQ
RABBITMQ_CONNECTION_STRING RABBITMQ_CONNECTION_STRING Sí AMQP para la API
JWT_KEY JWT_KEY Sí Clave JWT (mín. 32 caracteres en producción)
JWT_ISSUER JWT_ISSUER Sí Emisor del token
JWT_AUDIENCE JWT_AUDIENCE Sí Audiencia del token
JWT_EXPIRE_MINUTES JWT_EXPIRE_MINUTES Sí Expiración access token
REFRESH_EXPIRE_DAYS REFRESH_EXPIRE_DAYS Sí Expiración refresh token
CLOUDINARY_CLOUD_NAME CLOUDINARY_CLOUD_NAME Sí Cloudinary
CLOUDINARY_API_KEY CLOUDINARY_API_KEY Sí Cloudinary
CLOUDINARY_API_SECRET CLOUDINARY_API_SECRET Sí Cloudinary
ENABLE_DOCS ENABLE_DOCS No OpenAPI/Scalar en contenedor
MONGO_EXPRESS_USER MONGO_EXPRESS_USER No Panel mongo-express
MONGO_EXPRESS_PASS MONGO_EXPRESS_PASS No Panel mongo-express
SEQ_ADMIN SEQ_ADMIN No Seq (logs)
SEQ_ADMIN_PASSWORD SEQ_ADMIN_PASSWORD No Seq (logs)

Los nombres del secret y de la variable .env coinciden a propósito.

Generar .env en un runner o servidor

Script: scripts/render-env.sh

Con variables exportadas (p. ej. inyectadas por GitHub Actions):

# Ejemplo futuro — job deploy
env:
  JWT_KEY: $
  MONGO_CONNECTION_STRING: $
  # ... resto con el mismo nombre
steps:
  - run: ./scripts/render-env.sh
  - run: cd uni-chat-backend && docker compose up -d

Solo validar obligatorias (sin escribir archivo):

./scripts/render-env.sh --check

Desde uni-chat-backend/uni-chat-backend/:

make env-from-ci

Desarrollo local sin GitHub

CI actual (backend)

El workflow ci-cd-backend.yml no requiere estos secrets: compila y ejecuta tests sin levantar Mongo/Redis/Rabbit. Ver CI/CD.

Pre-commit

Tras make install-hooks, un git commit rechaza .env en staging y ejecuta make pre-commit (lint + build + test).