Documentation Index
Fetch the complete documentation index at: https://mintlify.com/camiloivcode/biblioteca-la-palabra/llms.txt
Use this file to discover all available pages before exploring further.
Biblioteca La Palabra centraliza toda su configuración en un único archivo .env ubicado en la raíz del repositorio. Tanto el backend Node.js (cargado con dotenv) como docker-compose.yml leen de este mismo archivo, por lo que cualquier cambio se propaga automáticamente a todos los servicios en el siguiente arranque. El repositorio incluye un archivo .env.example con valores seguros para desarrollo local que sirven como punto de partida.
Las variables JWT_SECRET, JWT_REFRESH_SECRET, MYSQL_ROOT_PASSWORD y MYSQL_PASSWORD en .env.example son contraseñas de ejemplo públicamente conocidas. Debes cambiarlas antes de cualquier despliegue accesible desde internet. Los valores por defecto están pensados exclusivamente para entornos de desarrollo local.
Archivo .env.example
# ─── BASE DE DATOS ───────────────────────────────
DATABASE_URL="mysql://biblioteca_user:biblioteca_pass@db:3306/biblioteca_db"
# ─── JWT ─────────────────────────────────────────
JWT_SECRET=super_secreto_cambiame_en_produccion_2024
JWT_EXPIRES_IN=8h
JWT_REFRESH_SECRET=refresh_super_secreto_2024
JWT_REFRESH_EXPIRES_IN=7d
# ─── BACKEND ─────────────────────────────────────
NODE_ENV=development
PORT=4000
FRONTEND_URL=http://localhost:3000
APP_URL=http://localhost:3000
# ─── MYSQL ───────────────────────────────────────
MYSQL_ROOT_PASSWORD=root_pass_2024
MYSQL_DATABASE=biblioteca_db
MYSQL_USER=biblioteca_user
MYSQL_PASSWORD=biblioteca_pass
# ─── SMTP (para recuperación de contraseña) ──────
SMTP_HOST=smtp.ethereal.email
SMTP_PORT=587
SMTP_SECURE=false
SMTP_USER=
SMTP_PASS=
SMTP_FROM=noreply@biblioteca-la-palabra.com
ADMIN_EMAIL=admin@biblioteca.com
Variables de base de datos
Estas variables controlan tanto el motor MySQL (leídas por el contenedor db de Docker Compose) como la cadena de conexión de Prisma (leída por el backend).
| Variable | Descripción | Valor de ejemplo |
|---|
DATABASE_URL | Cadena de conexión completa que Prisma usa para conectarse a MySQL. Formato: mysql://user:pass@host:port/db. Dentro de Docker, el host es db (nombre del servicio). | mysql://biblioteca_user:biblioteca_pass@db:3306/biblioteca_db |
MYSQL_ROOT_PASSWORD | Contraseña del usuario root de MySQL. También la utiliza phpMyAdmin para autenticarse. | root_pass_2024 |
MYSQL_DATABASE | Nombre de la base de datos que MySQL creará automáticamente al inicializarse por primera vez. | biblioteca_db |
MYSQL_USER | Usuario de aplicación con permisos sobre MYSQL_DATABASE. Este es el usuario que aparece en DATABASE_URL. | biblioteca_user |
MYSQL_PASSWORD | Contraseña del usuario de aplicación (MYSQL_USER). Debe coincidir con la contraseña en DATABASE_URL. | biblioteca_pass |
Variables JWT
El backend emite dos tipos de tokens JWT: un access token de corta duración para autenticar peticiones y un refresh token de larga duración para renovarlo sin requerir un nuevo login.
| Variable | Descripción | Valor por defecto |
|---|
JWT_SECRET | Clave secreta utilizada para firmar y verificar los access tokens. Debe ser una cadena larga, aleatoria y única en producción. | super_secreto_cambiame_en_produccion_2024 |
JWT_EXPIRES_IN | Tiempo de vida del access token. Acepta el formato de la librería jsonwebtoken (e.g., 8h, 1d, 30m). | 8h |
JWT_REFRESH_SECRET | Clave secreta independiente para firmar y verificar los refresh tokens. Debe ser diferente de JWT_SECRET. Cambiar en producción. | refresh_super_secreto_2024 |
JWT_REFRESH_EXPIRES_IN | Tiempo de vida del refresh token. Tras su vencimiento, el usuario debe autenticarse nuevamente. | 7d |
Variables de aplicación
Controlan el comportamiento general del servidor Express.
| Variable | Descripción | Valor por defecto |
|---|
NODE_ENV | Modo de ejecución de Node.js. En development se habilita el logging de queries de Prisma y mensajes de error detallados. En production se minimizan los detalles expuestos en errores. | development |
PORT | Puerto en el que escucha el servidor Express. Debe coincidir con el mapeo de puertos en docker-compose.yml (4000:4000). | 4000 |
FRONTEND_URL | URL base del frontend. El backend la utiliza para configurar CORS y para construir enlaces en los correos de recuperación de contraseña y notificaciones. | http://localhost:3000 |
APP_URL | URL pública de la aplicación. Se usa en los correos de registro de nuevos socios como enlace de referencia hacia la aplicación. | http://localhost:3000 |
Variables SMTP (email)
El backend envía correos electrónicos en dos escenarios: cuando un usuario solicita recuperar su contraseña y cuando se registra un nuevo socio (notificación al administrador). Estas variables configuran el transporte Nodemailer.
| Variable | Descripción | Valor de ejemplo |
|---|
SMTP_HOST | Hostname del servidor SMTP. | smtp.ethereal.email |
SMTP_PORT | Puerto del servidor SMTP. El puerto 587 corresponde a STARTTLS (recomendado). El puerto 465 se usa para SSL directo. | 587 |
SMTP_SECURE | false para usar STARTTLS en el puerto 587. true para SSL/TLS directo en el puerto 465. | false |
SMTP_USER | Nombre de usuario (generalmente una dirección de email) para autenticarse en el servidor SMTP. | (vacío en .env.example) |
SMTP_PASS | Contraseña SMTP. En servicios como Gmail, se recomienda usar una contraseña de aplicación en lugar de la contraseña principal de la cuenta. | (vacío en .env.example) |
SMTP_FROM | Dirección que aparecerá como remitente en los correos enviados por la aplicación. | noreply@biblioteca-la-palabra.com |
ADMIN_EMAIL | Dirección del administrador que recibirá notificaciones cuando un nuevo socio se registre en el sistema. | admin@biblioteca.com |
Para desarrollo local, puedes probar el envío de correos sin necesitar un servidor SMTP real usando Ethereal Email. Crea una cuenta gratuita en su sitio web y obtendrás credenciales SMTP temporales (SMTP_USER y SMTP_PASS). Ethereal captura todos los mensajes enviados y los muestra en su bandeja de entrada web, sin enviarlos a destinatarios reales. El .env.example ya apunta a smtp.ethereal.email como host de ejemplo.
Variable de frontend
El frontend Astro obtiene la URL de la API a través de la variable de entorno PUBLIC_API_URL. Esta variable no se define en .env sino directamente en el bloque environment del servicio frontend dentro de docker-compose.yml:
frontend:
environment:
PUBLIC_API_URL: http://localhost:4000/api
En tiempo de ejecución, BaseLayout.astro expone este valor al código cliente mediante window.API_URL. Si la variable no está definida, el fallback configurado en el layout es http://localhost:4000/api, por lo que en desarrollo local funciona sin configuración adicional.
Para despliegues en producción o en servidores remotos, actualiza el valor de PUBLIC_API_URL en docker-compose.yml con la URL pública de tu API (por ejemplo, https://api.mibiblioteca.com/api) para que el frontend apunte correctamente al backend.