Biblioteca La Palabra incluye un archivoDocumentation 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.
docker-compose.yml que orquesta los cuatro servicios necesarios para ejecutar la aplicación completa: base de datos MySQL 8, backend Express/Prisma, frontend Astro y una interfaz phpMyAdmin. Con un único comando se construyen las imágenes, se inicializa la base de datos, se aplica el esquema Prisma y se siembra con datos iniciales, dejando todo el stack operativo y listo para usar.
Requisitos previos
Antes de iniciar, asegúrate de tener instalado y disponible en tu sistema:- Docker Engine 20+ — Instalar Docker
- Docker Compose v2 — incluido con Docker Desktop; en Linux instala el plugin
docker-compose-plugin - Puertos libres en tu máquina host:
| Puerto host | Uso |
|---|---|
3000 | Frontend Astro |
4000 | Backend API (Express) |
3307 | MySQL (expuesto externamente) |
8080 | phpMyAdmin |
Servicios
El stack está compuesto por cuatro contenedores definidos endocker-compose.yml:
| Servicio | Imagen / Dockerfile | Puerto interno → externo | Propósito |
|---|---|---|---|
db | mysql:8.0 | 3306 → 3307 | Base de datos MySQL 8 |
backend | backend/Dockerfile (Node 20 Alpine) | 4000 → 4000 | API Express + Prisma ORM |
frontend | frontend/Dockerfile (Node 20 Alpine) | 3000 → 3000 | Servidor de desarrollo Astro |
phpmyadmin | phpmyadmin/phpmyadmin | 80 → 8080 | Interfaz de administración MySQL |
biblioteca_net (bridge), por lo que el backend se conecta a MySQL mediante el hostname db y el puerto 3306 —nunca por 3307, que es solo el mapeo hacia el host.
Inicio rápido
Copiar el archivo de configuración
Crea tu archivo Revisa los valores antes de continuar. Para un entorno local de desarrollo, los valores por defecto funcionan sin modificaciones.
.env local a partir de la plantilla incluida en el repositorio:Construir e iniciar todos los servicios
Ejecuta el siguiente comando desde la raíz del repositorio:El flag
--build reconstruye las imágenes del backend y el frontend. El flag -d ejecuta los contenedores en segundo plano (modo detached).Verificar que el backend está listo
El backend realiza varias tareas de inicialización antes de empezar a servir peticiones. Sigue sus logs para confirmar que el proceso terminó correctamente:Espera hasta ver mensajes similares a los siguientes en orden:Esto indica que Prisma aplicó el esquema, el seed terminó y el servidor Express está activo.
- Frontend: http://localhost:3000
- API Backend: http://localhost:4000/api
- phpMyAdmin: http://localhost:8080
Secuencia de inicio del backend
El serviciobackend no ejecuta npm run dev directamente. En su lugar, Docker Compose le asigna el siguiente comando compuesto:
-
node wait-for-mysql.js— Utiliza el cliente Prisma para intentar conectarse a MySQL cada 2 segundos, hasta un máximo de 30 intentos (60 segundos). Esto garantiza que el backend no proceda hasta que la base de datos acepte conexiones, incluso si el healthcheck del contenedordbya se marcó como sano. -
npx prisma db push --accept-data-loss— Aplica el esquema definido enbackend/prisma/schema.prismadirectamente sobre la base de datos. Este proyecto usadb pushen lugar de migraciones (el directoriomigrations/está en.gitignore). -
node prisma/seed.js— Pobla la base de datos con datos iniciales (usuarios administrador y bibliotecario, categorías, etc.). El seed es idempotente: utiliza operacionesupsertinternamente, por lo que puede ejecutarse múltiples veces sin duplicar registros. -
npm run dev— Inicia el servidor Express con Nodemon para hot-reload.
El servicio
db tiene configurado un healthcheck con mysqladmin ping que se ejecuta cada 10 segundos con hasta 10 reintentos. Gracias a depends_on: condition: service_healthy, Docker Compose no arranca el contenedor backend hasta que MySQL haya superado este check. El script wait-for-mysql.js añade una segunda capa de verificación a nivel de aplicación para mayor robustez.Comandos útiles
| Comando | Descripción |
|---|---|
docker-compose up -d | Inicia todos los servicios en segundo plano (sin reconstruir imágenes) |
docker-compose down | Detiene y elimina los contenedores (los datos persisten en el volumen db_data) |
docker-compose down -v | Detiene los contenedores y elimina todos los volúmenes |
docker-compose logs -f backend | Muestra y sigue los logs del backend en tiempo real |
docker-compose exec backend sh | Abre una shell interactiva dentro del contenedor del backend |