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.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.
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
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
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
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 20Despué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
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
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 |
||