Cómo Gestionar Múltiples Sitios Web en Laravel con una Sola Base de Datos usando Laravel Sail
Crear múltiples sitios Laravel que compartan una misma base de datos puede parecer una tarea compleja. Pero con Laravel Sail y un poco de organización, puedes tener varios proyectos funcionando al mismo tiempo, usando una única base de datos. Esto es ideal si estás creando una aplicación con panel de administración y frontend separados, o si desarrollas soluciones multisitio desde cero.
Únete a nuestra comunidad de DiscordÍndice
Ventajas de Usar Laravel Sail para el Desarrollo Web Local
Laravel Sail es un entorno de desarrollo basado en Docker creado por el equipo oficial de Laravel. Te permite levantar todo lo necesario para trabajar con Laravel en segundos.
Qué es Laravel Sail y cómo se configura
Laravel Sail es una capa sobre Docker Compose que gestiona servicios como MySQL, Redis, Mailhog, etc. Para usarlo:
-
Instala Laravel:
curl -s https://laravel.build/miproyecto | bash -
Entra en el proyecto:
cd miproyecto -
Levanta Sail:
./vendor/bin/sail up(si no tienes Laravel Sail tendrás que instalarlo concomposer require laravel/sail)
Con eso ya tienes un entorno completo y listo para programar.
Beneficios del entorno local con Docker en Laravel
-
- Todo se ejecuta de forma aislada (sin ensuciar tu sistema)
-
- Replicable: todo el equipo trabaja igual
-
- Rápido de levantar y destruir
Laravel local Sail vs entornos tradicionales
| Característica | Sail + Docker | Entorno tradicional |
|---|---|---|
| Aislado | ✅ | ❌ |
| Replicable | ✅ | ❌ |
| Listo en minutos | ✅ | ❌ |
| Requiere configuración | Baja | Alta |
Conclusión: si quieres velocidad y eficiencia, Sail es el camino.
Múltiples Sitios Laravel con una Sola Base de Datos: ¿Es Posible?
Sí, es totalmente posible. Puedes tener varias aplicaciones Laravel accediendo a la misma base de datos sin problemas.
Laravel misma base de datos para diferentes sitios
Tanto si tus sitios son "frontend" y "admin" separados como proyectos independientes que acceden
a los mismos datos, puedes compartir la base de datos configurando el .env de ambos con los mismos
valores:
DB_CONNECTION=mysql
DB_HOST=mysql
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=sail
DB_PASSWORD=password
Laravel multitenancy sin paquetes complicados
Si bien existen paquetes complejos como Tenancy for Laravel, en muchos casos puedes usar una arquitectura simple:
-
- Mismo esquema para todos los sitios
-
- Middleware para identificar desde qué dominio se accede
-
- Reutilización de modelos y migraciones
Ideal para MVPs o paneles separados sin entrar en multitenancy avanzado.
Compartir base de datos Laravel de forma segura
Al compartir la base de datos:
-
- Usa migraciones en un solo proyecto
-
- Evita colisiones de datos sensibles
-
- Limita accesos usando roles o subdominios
Ejemplo: admin.local accede al panel, mientras que clientes.local es solo frontend.
Configurar Múltiples Proyectos Laravel en Docker con Laravel Sail
Aquí está el corazón del artículo. Vamos a ver cómo levantar dos proyectos Laravel que comparten base de datos usando Docker Compose.
Docker Compose para múltiples dominios Laravel
Tendrás dos proyectos, cada uno con su docker-compose.yml, pero solo uno con la base de datos:
App principal (admin):
services:
laravel.test:
ports:
- '80:80'
networks:
- sail
depends_on:
- mysql
mysql:
image: 'mysql/mysql-server:8.0'
volumes:
- 'smartsalon-mysql:/var/lib/mysql'
networks:
sail:
driver: bridge
name: bbdd_mi_bbdd_multiweb
App secundaria (clientes, solo contiene la web):
services:
laravel.test:
ports:
- '81:80'
networks:
- sail
- shared
networks:
sail:
driver: bridge
shared:
external:
name: bbdd_mi_bbdd_multiweb
IMPORTANTE: He obviado el resto de configuración de los docker-compose.yaml puesto que no varían, lo único que varía es la parte de networks, mucho ojo a esto
Red compartida entre contenedores y acceso a la base de datos
Ambas apps deben usar la misma red Docker para que se "vean". Por eso usamos shared con el
nombre bbdd_mi_bbdd_multiweb, definido en la app principal.
Punto clave: la app secundaria no necesita su propio contenedor MySQL. Ya tiene acceso al de la otra app.
Hostear múltiples sitios Laravel en paralelo
-
- Puedes abrir ambos proyectos en puertos diferentes (80 y 81)
-
- En tu
/etc/hosts:
127.0.0.1 admin.local
127.0.0.1 clientes.local
-
- Usar Laravel Valet para proxy es otra opción si trabajas en macOS
Casos de Uso Reales y Buenas Prácticas
Te mostramos ejemplos prácticos para entender mejor cuándo esta arquitectura es útil.
Una base de datos múltiples webs para admin y frontend
Caso típico: tienes una app de reservas y necesitas:
-
-
admin.tuapp.compara la gestión -
-
cliente.tuapp.compara los usuarios
Ambos usan la misma base de datos pero tienen vistas, rutas y controladores separados.
Separación de lógica sin complicar el mantenimiento
En lugar de complicar tu app con muchos roles o rutas condicionales, puedes mantener el código de cada sitio por separado.
Beneficios:
-
- Más limpio para trabajar en equipo
-
- Puedes desplegar partes por separado
-
- Testing aislado
Seguridad, escalabilidad y rendimiento en proyectos multisitio
Recomendaciones:
-
- Protege con CORS y tokens de acceso
-
- Usa Redis para cachear consultas comunes
-
- Considera separar bases de datos si el proyecto escala
Conclusión
Montar múltiples sitios Laravel con una sola base de datos usando Laravel Sail es una solución práctica, escalable y fácil de mantener. Usando Docker y redes compartidas, puedes levantar entornos locales completos y separados sin duplicar recursos.
Esta guía te permite empezar con una arquitectura simple y profesional, ideal para MVPs, SaaS o apps con paneles separados. Y lo mejor: sin necesidad de paquetes externos ni configuraciones complejas.
¡Esperamos que esta guía te ayude a sacar todo el potencial de Laravel en tu flujo de trabajo diario!
Preguntas Frecuentes
No. Laravel Sail abstrae todo por ti. Solo necesitas usar ./vendor/bin/sail up y seguir la documentación.
Sí, aunque se recomienda separar los servicios (por ejemplo, bases de datos por cliente) cuando la app crece.
Si usas buenos controles de acceso y roles bien definidos, puedes mantener todo seguro.