Dónde vive la configuración
Toda la configuración que el operador controla se define en el archivodocker-compose.yml, bajo la clave environment de cada servicio. Los valores allí declarados sobreescriben los valores por defecto del código.
Nunca guardes contraseñas en texto plano en un repositorio público. En producción, usa secretos de Docker o un archivo
.env fuera del control de versiones.Conexión a la base de datos
Estas cuatro variables deben ser coherentes entre sí: el nombre de la base de datos, el usuario y la contraseña que crea el serviciodb deben coincidir exactamente con los que usa el backend para conectarse.
| Variable | Servicio | Valor por defecto | Descripción |
|---|---|---|---|
POSTGRES_DB | db | caducidadesdb | Nombre de la base de datos que PostgreSQL crea al arrancar por primera vez. |
POSTGRES_USER | db | postgres | Usuario administrador de PostgreSQL. |
POSTGRES_PASSWORD | db | postgres | Contraseña del usuario administrador. |
SPRING_DATASOURCE_URL | backend | jdbc:postgresql://host.docker.internal:5432/caducidadesdb | URL JDBC completa. Incluye host, puerto y nombre de base de datos. |
SPRING_DATASOURCE_USERNAME | backend | postgres | Usuario con el que el backend se autentica en PostgreSQL. |
SPRING_DATASOURCE_PASSWORD | backend | postgres | Contraseña del usuario de la base de datos. |
Por qué el backend usa host.docker.internal
El docker-compose.yml configura el backend para llegar a la base de datos a través de host.docker.internal (el gateway hacia el host). Esto permite que el servicio db sea accesible desde el contenedor del backend como si estuviera en la máquina anfitriona. La línea extra_hosts del servicio backend crea esta ruta:
SPRING_DATASOURCE_URL:
Esquema de la base de datos (DDL_AUTO)
La variable SPRING_JPA_HIBERNATE_DDL_AUTO controla qué hace la aplicación con el esquema de la base de datos al arrancar.
| Valor | Comportamiento | Cuándo usarlo |
|---|---|---|
none | No modifica el esquema. La aplicación asume que las tablas ya existen. | Producción. Protege los datos ante reinicios accidentales. |
update | Agrega columnas o tablas nuevas si el modelo ha cambiado, pero nunca elimina columnas existentes. | Desarrollo activo cuando se añaden entidades nuevas. |
create | Elimina y recrea todas las tablas en cada arranque. Borra todos los datos existentes. | Tests o demostraciones con datos de prueba desechables. |
docker-compose.yml usa none por defecto para proteger los datos en entornos con datos reales:
Configuración de puertos
Los puertos se mapean endocker-compose.yml con el formato "HOST:CONTENEDOR". Cambia el puerto del host (la parte izquierda) si necesitas evitar conflictos.
Backend (por defecto: 8080)
9090 en el host:
Frontend (por defecto: 3000)
8000 en el host:
El puerto interno del contenedor (
CONTENEDOR) no debe modificarse. Nginx siempre escucha en el 80 y el backend en el 8080. Solo cambia el puerto del host.Proxy de API del frontend
El frontend enruta todas las peticiones que empiezan por/api/ directamente al backend. Esta lógica vive en frontend-vite/nginx.conf y no requiere ninguna variable de entorno:
backend usando la red interna de Docker Compose. Gracias a esto, el navegador siempre habla con el frontend (localhost:3000) y el frontend reenvía las llamadas a la API al backend de forma transparente, sin exponer el puerto 8080 directamente al usuario final.
Si cambias el puerto interno del backend (no recomendado), deberás actualizar también la directiva proxy_pass en nginx.conf y reconstruir la imagen del frontend: