Separación por responsabilidad

El frontend sirve la aplicación Vue, el backend ejecuta PHP y expone la API, y MySQL conserva los datos. Esta separación permite actualizar una parte sin reconstruir todo el entorno.

Estructura de carpetas

proyecto/
  frontend/
    Dockerfile
    index.html
  backend/
    Dockerfile
    index.php
  docker-compose.yml

Comunicación interna

Dentro de Docker Compose los servicios pueden comunicarse usando el nombre del servicio. El backend no necesita conocer una IP fija de MySQL; puede conectarse a un host llamado, por ejemplo, db.

Subida de archivos

Si el sistema permite subir documentos, hay que revisar dos límites: el del servidor web del frontend o proxy y el de PHP. Un error típico es aumentar upload_max_filesize en PHP pero olvidar client_max_body_size en Nginx.

Persistencia

La base de datos debe usar un volumen para que eliminar el contenedor no elimine los datos. Los documentos subidos también necesitan un volumen si deben sobrevivir a una reconstrucción.

Cuándo usar esta estructura

Funciona muy bien en proyectos pequeños o de laboratorio porque mantiene claras las responsabilidades sin introducir Kubernetes ni infraestructura innecesaria.