Saltar al contenido principal

Variables de entorno

El backend lee su configuración del archivo backend/.env. Este archivo nunca debe subirse al repositorio (está en .gitignore).

Variables requeridas

VariableEjemploDescripción
DB_USERNAMErootUsuario de MySQL. Debe coincidir con MYSQL_ROOT_USER si lo cambias en el compose
DB_PASSWORDS3cur3P@ss!Contraseña de MySQL. La misma que MYSQL_ROOT_PASSWORD en el compose
JWT_SECRETm1-s3cr3t0-de-al-menos-32-car4cteresClave para firmar tokens JWT. Mínimo 32 caracteres. Cambia este valor en producción

Variables opcionales (con defaults en application.properties)

VariableDefaultDescripción
MAIL_HOSTsmtp.gmail.comServidor SMTP para envío de correos
spring.jpa.show-sqlfalseMostrar SQL generado en los logs (solo para desarrollo)
spring.datasource.hikari.maximum-pool-size10Máximo de conexiones simultáneas a MySQL

Variables del docker-compose.yml

Estas se configuran directamente en el docker-compose.yml o en un .env en la raíz del proyecto:

VariableDefaultDescripción
DB_PASSWORDrootContraseña de MySQL para el contenedor db y el servicio backup. Debe coincidir con backend/.env

Plantilla completa

# backend/.env

# ── Base de Datos ─────────────────────────────────────────────
DB_USERNAME=root
DB_PASSWORD=cambia_este_password

# ── JWT ───────────────────────────────────────────────────────
# Genera un secreto seguro: openssl rand -base64 48
JWT_SECRET=cambia-esto-por-un-secreto-de-al-menos-32-caracteres

# ── Mail (opcional) ───────────────────────────────────────────
# MAIL_HOST=smtp.gmail.com

Buenas prácticas

  • Genera el JWT_SECRET con un comando como openssl rand -base64 48 o un gestor de contraseñas.
  • Usa contraseñas distintas para cada entorno (desarrollo, producción).
  • En producción, considera usar Docker Secrets o un servicio de vault en lugar de archivos .env.
  • Rota el JWT_SECRET si sospechas que fue comprometido; todos los usuarios activos tendrán que volver a iniciar sesión.
aviso

Si cambias el JWT_SECRET con el sistema en producción, todos los tokens emitidos hasta ese momento se invalidarán inmediatamente.