Voy a utilizar el proyecto del artículo anterior sobre Sail, un proyecto recién creado e instalado Laravel sail
Laravel sail, un entorno de desarrollo con docker y laravel, también dejo el código en Github de la estructura del proyecto.
Si miramos dentro del contenedor conectándonos con sail shell y ejecutamos el comando
ps -ef | grep php
Veréis lo que os digo del servidor de Laravel.![Servidor de PHP en Laravel sail Servidor de PHP en Laravel sail](/cw/JLHE1BOEIAMZVK00RN4E5818/php-server.webp)
y si buscamos apache o nginx o http no encontraremos nada.
Para poder utilizar múltiples dominios se necesita Apache2 o Nginx, en este artículo utilizaremos Apache2 con los virtualhost.
Necesitamos copiarnos los ficheros de configuración de Laravel sail a nuestro proyecto.
Estos ficheros de configuración se alojan en el directorio vendor.
![Directorio vendor de Laravel sail Directorio vendor de Laravel sail](/cw/JLHE1BOEIAMZVK00RN4E5818/laravel-sail-ficheros-configuracion.webp)
pero este directorio no se puede modificar por eso haremos una copia dentro de nuestro proyecto con el comando que proporciona Laravel saill para esto
sail artisan sail:publish
Este comando crea una carpeta nueva en la raíz de nuestra aplicación llamada docker donde guarda los ficheros de configuración y construcción de dockery donde nosotros podremos crear los ficheros de configuración que necesitemos como por ejemplo para los virtualhost
![Directorio docker en raiz de Laravel sail Directorio docker en raiz de Laravel sail](/cw/JLHE1BOEIAMZVK00RN4E5818/directorio-docker-raiz.webp)
La versión de php que utiliza es la ultima que sail tenga configurada pero en el fichero docker-composer.yml podemos cambiarla modificando el campo build -> context
Hay que verificar que en esa sección ahora apunta a la nueva carpeta docker y no a vendor que es la original
![Docker context apuntado al directorio docker en raiz del proyecto Docker context apuntado al directorio docker en raiz del proyecto](/cw/JLHE1BOEIAMZVK00RN4E5818/docker-compose-context.webp)
En el ejemplo utilizaremos la 8.3 y dentro de esa carpeta modificaremos los ficheros que necesitemos.
Para cambiar la forma que se ejecuta el servidor con hay que modificar el fichero Dockerfile que se encuentra en el directorio ./docker/8.3 porque utiliza la versión de PHP 8.3, si queréis otra versión hay que modificar el dockerfile de esa versión.
Empezando desde arriba del fichero lo primero que hacemos es comentar las líneas donde se ejecutará el servidor de PHP, líneas 12 y 13
![Comentando opciones del fichero Dockerfile que no necesitamos Comentando opciones del fichero Dockerfile que no necesitamos](/cw/JLHE1BOEIAMZVK00RN4E5818/server-php-comentar.webp)
A continuación añadimos en el proceso de instalación los paquetes para instalar Apache2
apache2 libapache2-mod-php apache2-dev
Yo lo añado justo después del install -y en la línea 20![Añadiendo opciones al fichero Dockerfile que necesitamos Añadiendo opciones al fichero Dockerfile que necesitamos](/cw/JLHE1BOEIAMZVK00RN4E5818/instalar-apache2.webp)
Después de que instale todo esto, a partir de la línea 52 hay que añadir el siguiente comando
RUN ln -s /etc/apache2/mods-available/rewrite.load /etc/apache2/mods-enabled/rewrite.load
Y al final del fichero Dockerfile cambiamos las directivas EXPOSE y ENTRYPOINT por estas
EXPOSE 80
ENTRYPOINT ["apache2ctl", "-D", "FOREGROUND"]
<VirtualHost *:80>
# Basic setup
ServerName lara-base.local
DocumentRoot /var/www/html/public
DirectoryIndex index.php
<Directory /var/www/html/public>
Order Deny,Allow
Allow from all
#Don't show indexes for directories
Options +Indexes +FollowSymLinks +ExecCGI
AllowOverride All
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error_lara_base.log
CustomLog ${APACHE_LOG_DIR}/error_lara_base.log combined
#
</VirtualHost>
Por cada dominio o subdominio que necesites hay que añadir una directiva Virtualhost.
Ahora modificamos el fichero docker-compose.yml para añadir este fichero donde guardamos las configuraciones de los virtualhost de apache
En el apartado de volumes mapeamos el nuevo fichero
./docker/8.3/apache2.conf:/etc/apache2/sites-enabled/apache.conf
![Añadiendo opciones al fichero Dockerfile que necesitamos Añadiendo opciones al fichero Dockerfile que necesitamos](/cw/JLHE1BOEIAMZVK00RN4E5818/volumes-docker-compose.webp)
Por último vamos a configurar la red añadiendo una IP fija para que podamos conectar por el nombre de dominio.
Para modificar la red hay que modificar el apartado network con lo siguiente
networks:
redsail:
ipv4_address: 172.23.0.3
Y en la sección para MySql hacemos lo mismo cambiando la IP
networks:
redsail:
ipv4_address: 172.23.0.2
Y en la sección networks ponemos lo siguiente
networks:
redsail:
driver: bridge
ipam:
config:
- subnet: 172.23.0.0/16
gateway: 172.23.0.1
Ahora vamos a probarlo ejecutando
sail up -d
Nota: si previamente hay realizadas pruebas con Sail tendremos que reconstruir los contenedores con el comandosail build
Una vez construidos los contenedores los arrancamossail up -d
Solo nos queda asociar la IP del contenedor al nombre de dominio que hemos puesto en el fichero de configuración de Apache2, lara-base.local, lo tenemos que poner el fichero /etc/hostsDesde el terminal ejecutar:
echo "172.23.0.3 lara-base.local" >> /etc/hosts
Nota: esto del echo creo que no sirve en windows y tenéis que editar el fichero etc directamenteY con esto ya se puede probar la url que hemos asignado a nuestro proyecto, en el ejemplo: http://lara-base.local/
Añadir nuevos dominios es tan sencillo como crear una nueva entrada, un nuevo virtualhost, en el fichero apache.conf, relacionarlo en el fichero /etc/hosts y configurar el fichero de rutas en la Laravel.
Vamos a ver un ejemplo
Tenemos el dominio original lara-base.local y creamos un nuevo dominio lara-dos.local.Configuramos el segundo dominio en los ficheros de configuración del proyecto, en el fichero apache.conf dentro de la carpeta ./docker/8.3 y añadimos un nuevo virtualhost
<VirtualHost *:80>
# Basic setup
ServerName lara-dos.local
DocumentRoot /var/www/html/public
DirectoryIndex index.php
<Directory /var/www/html/public>
Order Deny,Allow
Allow from all
#Don't show indexes for directories
Options +Indexes +FollowSymLinks +ExecCGI
AllowOverride All
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error_lara-dos.log
CustomLog ${APACHE_LOG_DIR}/error_lara-dos.log combined
#
</VirtualHost>
Lo único que hay que hacer es cambiar la palabra base por dos y copiar todo el contenido igual.
Y añadimos la entrada en el fichero /etc/hosts
echo "172.23.0.3 lara-dos.local" >> /etc/hosts
En el directorio ./resources/views creamos dos nuevos ficheros base.blade.php y dos.blade.php, dentro podéis poner el nombre de fichero para cuando hagamos referencia a las urls desde el navegador ver que se carga el fichero correcto.En el fichero de rutas añadimos las rutas para los dos dominios que vamos a utilizar
Route::domain('lara-base.local')->group(function () {
Route::get('/', function () {
return view('base');
});
});
Route::domain('lara-dos.local')->group(function () {
Route::get('/', function () {
return view('dos');
});
});
Solo queda reiniciar los contenedores y probarlo
sail down
sail up -d
![Probando los dos dominios en el proyecto Laravel sail Probando los dos dominios en el proyecto Laravel sail](/cw/JLHE1BOEIAMZVK00RN4E5818/urls-dos-dominios.webp)
Dejo el código del proyecto en Github para que podáis ver y utilizar los ficheros de configuración
Y esto es todo, feliz programming
Saludos
Alex
/
También puede interesarte:
![]() |
||
![]() |
||
![]() |
Configurar Laravel Sail para utilizar un MySql externo existente |
|
![]() |
||
![]() |
||
![]() |