DestacadasDEVOPSLaravel

EJECUTA VARIAS VERSIONES DE LARAVEL EN UN SERVIDOR LOCAL CON UBUNTU 20.04

Introducción

A veces necesitamos trabajar con diferentes versiones de Laravel por diversos motivos, como que el servidor web instala algunas versiones de Laravel de forma predeterminada, ya sea por las prestaciones del servidor, actualizaciones, etc… o que tomaste un proyecto de algún cliente con alguna versión específica de Laravel. Así que en esta publicación te explicaré cómo puedes lograr instalar Laravel con las diferentes versiones que ofrece, para que puedas practicar con diferentes entornos de desarrollo.

Requisitos

Paso 1: Crear un ServerName de prueba que apunte a localhost de Ubuntu 20.04

En este paso crearemos y apuntaremos los nombres del servidor en el servidor local de Ubuntu 20.04, los cuales se encargarán de servir Laravel en sus diferentes versiones. Así que manos a la obra… o más bien dedos a la obra.

Primero en nuestra bash abrimos como superausuario con el editor de nuestra preferencia (en mi caso gedit) el archivo hosts

sudo gedit /etc/hosts

Una vez abierto veremos algo similar a esto:

127.0.0.1	localhost

127.0.1.1	nombre-de-tu-equipo

# The following lines are desirable for IPv6 capable hosts
::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

Ahora debajo de la línea que dice localhost podemos incluir los nombres de servidor que deseemos probar, del siguiente modo:

127.0.0.1	localhost


#Versiones Laravel de prueba
127.0.0.1	nombre-de-tu-proyecto-1.tu-dominio.com
127.0.0.1	nombre-de-tu-proyecto-2.tu-dominio.com
127.0.0.1	nombre-de-tu-proyecto-3.tu-dominio.com


127.0.1.1	nombre-de-tu-equipo

# The following lines are desirable for IPv6 capable hosts
::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

Ejemplo:

127.0.0.1	localhost


#Versiones Laravel de prueba
127.0.0.1	laravel58.programadorvagabundo.com
127.0.0.1	laravel6.programadorvagabundo.com
127.0.0.1	laravel8.programadorvagabundo.com


127.0.1.1	nombre-de-tu-equipo

# The following lines are desirable for IPv6 capable hosts
::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

Paso 2: Instalar las diferentes aplicaciones web de Laravel

Empezamos a crear los directorios raíz, para la instalación de nuestras diferentes aplicaciones de Laravel (que para esta publicación serán Laravel 5.8, Laravel 6 y Laravel 8).

Comenzamos ejecutando el siguiente comando:

sudo apt update

Una vez que hemos actualizado nos movemos a la carpeta /var/www/ que es donde se colocan los proyectos web en Apache.

cd /var/www/

Ahora procedemos a instalar las diferentes versiones de Laravel con Composer 2, sin embargo para poder instalar en el directorio /var/www/ con Composer 2 debemos cambiar los permisos de /var/www/ a 775 o la otra opción es que instalemos Laravel con Composer como superusuario y una tercera opción más sería instalarlo dentro de un directorio del sistema que tenga amplios permisos como el /tmp/ y luego moverlo con sudo a /var/www/ yo lo hice con la primera opción de la siguiente manera:

sudo chmod 775 /var/www/

Y ahora sí, ya podemos proceder a crear nuestras instalaciones de Laravel.

Para Laravel 5.8

composer create-project --prefer-dist laravel/laravel nombre-de-tu-proyecto-1 "5.8.*"

Ejemplo:

composer create-project --prefer-dist laravel/laravel laravel58 "5.8.*"

Para Laravel 6

composer create-project --prefer-dist laravel/laravel nombre-de-tu-proyecto-2 "6.*"

Ejemplo:

composer create-project --prefer-dist laravel/laravel laravel6 "6.*"

Para Laravel 8

composer create-project laravel/laravel nombre-de-tu-proyecto-3

Ejemplo:

composer create-project laravel/laravel laravel8

De forma predeterminada, el servidor web Apache se ejecuta como usuario www-data y grupo www-data. Para asegurarnos de contar con la propiedad y los permisos correctos de nuestros directorios raíz tenemos que cambiarlos así:

sudo chown -R www-data:www-data /var/www/nombre-de-tu-proyecto-1
sudo chown -R www-data:www-data /var/www/nombre-de-tu-proyecto-2
sudo chown -R www-data:www-data /var/www/nombre-de-tu-proyecto-3
sudo chmod -R 775 /var/www/nombre-de-tu-proyecto-1/storage
sudo chmod -R 775 /var/www/nombre-de-tu-proyecto-2/storage
sudo chmod -R 775 /var/www/nombre-de-tu-proyecto-3/storage
sudo chmod -R 775 /var/www/nombre-de-tu-proyecto-1/bootstrap/cache
sudo chmod -R 775 /var/www/nombre-de-tu-proyecto-2/bootstrap/cache
sudo chmod -R 775 /var/www/nombre-de-tu-proyecto-3/bootstrap/cache

Ejemplo:

sudo chown -R www-data:www-data /var/www/laravel58
sudo chown -R www-data:www-data /var/www/laravel6
sudo chown -R www-data:www-data /var/www/laravel8
sudo chmod -R 777 /var/www/laravel58
sudo chmod -R 777 /var/www/laravel6
sudo chmod -R 777 /var/www/laravel8
sudo chmod -R 775 /var/www/laravel58/storage
sudo chmod -R 775 /var/www/laravel6/storage
sudo chmod -R 775 /var/www/laravel8/storage
sudo chmod -R 775 /var/www/laravel58/bootstrap/cache
sudo chmod -R 775 /var/www/laravel6/bootstrap/cache
sudo chmod -R 775 /var/www/laravel8/bootstrap/cache

El propósito de tener un “Servidor en Local” es lograr un “Entorno de Desarrollo” y es por eso que el directorio /var/www/ lo podremos dejar con los permisos 775 al igual que los directorios nombre-de-tu-proyecto-1, nombre-de-tu-proyecto-2 y nombre-de-tu-proyecto-3. Esto con el fin de poder desarrollar nuestros proyectos en conjunto con otros programas como algún IDE o algún cliente FTP, etc. sin tener problemas de acceso por parte de algunos de estos programas a los directorios correspondientes de nuestros proyectos. Sin embargo en modo “Producción” debemos ser más cuidadosos y aumentar la seguridad disminuyendo los permisos en dichas carpetas a los permisos originales de /var/www/ de tu “Servidor de Producción” y los de tus proyectos.

Paso 3: Configurar Apache para las aplicaciones web de Laravel

En este paso nos toca crear los archivos de configuración del host virtual. Esto permitirá que los sitios web funcionen en simultáneo con dos versiones de PHP distintas para cada versión de Laravel (en caso de ser necesario).

Para que Apache sirva este contenido, es necesario crear un archivo de host virtual con las directivas correctas para Laravel. En vez de modificar el archivo de configuración predeterminado ubicado en /etc/apache2/sites-available/000-default.conf, crearemos los archivos nuevos para cada uno de los proyectos correspondientes en el directorio /etc/apache2/sites-available/.

Primero, crearemos un nuevo archivo de configuración de host virtual para el sitio web nombre-de-tu-proyecto1.tu-dominio.com. Aquí, le indicaremos a Apache que ejecute el contenido usando php7.2:

sudo gedit /etc/apache2/sites-available/nombre-de-tu-proyecto-1.tu-dominio.com.conf

Agregamos el siguiente contenido: Ponemos especial atención de que la ruta del directorio del sitio web, el nombre del servidor, la versión de PHP concuerden con la configuración que deseamos o necesitamos para nuestro proyecto, también es muy importante que el modo RewriteEngine este en On y que el parámetro RewriteBase apunte a la carpeta pública de su aplicación Laravel (/var/www/nombre-de-tu-proyecto-1/public/):

<VirtualHost *:80>
     ServerAdmin tu-correo-para-administracion@nombre-de-tu-proyecto-1.tu-dominio.com
     ServerName nombre-de-tu-proyecto-1.tu-dominio.com
     DocumentRoot /var/www/nombre-de-tu-proyecto-1/public/

     <Directory /var/www/nombre-de-tu-proyecto-1/public/>
     	RewriteEngine On
	    RewriteBase /var/www/nombre-de-tu-proyecto-1/public/
        Options Indexes FollowSymLinks MultiViews
        AllowOverride All
        Order allow,deny
        allow from all
        Require all granted
     </Directory>

    <FilesMatch \.php$>
      # For Apache version 2.4.10 and above, use SetHandler to run PHP as a fastCGI process server
      SetHandler "proxy:unix:/run/php/php7.2-fpm.sock|fcgi://localhost"
    </FilesMatch>

     ErrorLog ${APACHE_LOG_DIR}/nombre-de-tu-proyecto-1_error.log
     CustomLog ${APACHE_LOG_DIR}/nombre-de-tu-proyecto-1_access.log combined
</VirtualHost>

Guardamos y cerramos el archivo.

En este proceso, DocumentRoot será el directorio de nuestro proyecto y ServerAdmin es un correo electrónico con el que administraremos el sitio nombre-de-tu-proyecto-1.tu-dominio.com y ServerName establece el dominio base para esta configuración de host virtual y el cual será buscado en el archivo /etc/hosts. También creamos algunas directivas como RewriteEngine, RewriteBase y AllowOverride con el fin de que funcione correctamente los parámetros de configuración de Laravel incluidos en el archivo nombre-de-tu-proyecto-1/public/.htaccess es por ello que deben tener habilitado el modulo rewrite de Apache y finalmente una directiva SetHandler para ejecutar PHP como servidor de procesos fastCGI.

Ejemplo:

sudo gedit /etc/apache2/sites-available/laravel58.programadorvagabundo.com.conf
<VirtualHost *:80>
     ServerAdmin tu-correo-para-administracion@laravel58.programadorvagabundo.com
     ServerName laravel58.programadorvagabundo.com
     DocumentRoot /var/www/laravel58/public/

     <Directory /var/www/laravel58/public/>
     	RewriteEngine On
	    RewriteBase /var/www/laravel58/public/
        Options Indexes FollowSymLinks MultiViews
        AllowOverride All
        Order allow,deny
        allow from all
        Require all granted
     </Directory>

    <FilesMatch \.php$>
      # For Apache version 2.4.10 and above, use SetHandler to run PHP as a fastCGI process server
      SetHandler "proxy:unix:/run/php/php7.2-fpm.sock|fcgi://localhost"
    </FilesMatch>

     ErrorLog ${APACHE_LOG_DIR}/laravel58_error.log
     CustomLog ${APACHE_LOG_DIR}/laravel58_access.log combined
</VirtualHost>

Ahora tenemos que repetir este paso para cada una de las diferentes versiones de Laravel.

El archivo de la configuración del host virtual para el sitio web nombre-de-tu-proyecto-2.tu-dominio.com con php7.4 quedaría así:

sudo gedit /etc/apache2/sites-available/nombre-de-tu-proyecto-2.tu-dominio.com.conf
<VirtualHost *:80>
     ServerAdmin tu-correo-para-administracion@nombre-de-tu-proyecto-2.tu-dominio.com
     ServerName nombre-de-tu-proyecto-2.tu-dominio.com
     DocumentRoot /var/www/nombre-de-tu-proyecto-2/public/

     <Directory /var/www/nombre-de-tu-proyecto-2/public/>
     	RewriteEngine On
	    RewriteBase /var/www/nombre-de-tu-proyecto-2/public/
        Options Indexes FollowSymLinks MultiViews
        AllowOverride All
        Order allow,deny
        allow from all
        Require all granted
     </Directory>

    <FilesMatch \.php$>
      # For Apache version 2.4.10 and above, use SetHandler to run PHP as a fastCGI process server
      SetHandler "proxy:unix:/run/php/php7.4-fpm.sock|fcgi://localhost"
    </FilesMatch>

     ErrorLog ${APACHE_LOG_DIR}/nombre-de-tu-proyecto-2_error.log
     CustomLog ${APACHE_LOG_DIR}/nombre-de-tu-proyecto-2_access.log combined
</VirtualHost>

Ejemplo:

sudo gedit /etc/apache2/sites-available/laravel6.programadorvagabundo.com.conf
<VirtualHost *:80>
     ServerAdmin tu-correo-para-administracion@laravel6.programadorvagabundo.com
     ServerName laravel6.programadorvagabundo.com
     DocumentRoot /var/www/laravel6/public/

     <Directory /var/www/laravel6/public/>
     	RewriteEngine On
	    RewriteBase /var/www/laravel6/public/
        Options Indexes FollowSymLinks MultiViews
        AllowOverride All
        Order allow,deny
        allow from all
        Require all granted
     </Directory>

    <FilesMatch \.php$>
      # For Apache version 2.4.10 and above, use SetHandler to run PHP as a fastCGI process server
      SetHandler "proxy:unix:/run/php/php7.4-fpm.sock|fcgi://localhost"
    </FilesMatch>

     ErrorLog ${APACHE_LOG_DIR}/laravel6_error.log
     CustomLog ${APACHE_LOG_DIR}/laravel6_access.log combined
</VirtualHost>

Y finalmente creamos el archivo de configuración host virtual para el sitio web nombre-de-tu-proyecto-3.tu-dominio.com con php8, como sigue:

sudo gedit /etc/apache2/sites-available/nombre-de-tu-proyecto-3.tu-dominio.com.conf
<VirtualHost *:80>
     ServerAdmin tu-correo-para-administracion@nombre-de-tu-proyecto-3.tu-dominio.com
     ServerName nombre-de-tu-proyecto-3.tu-dominio.com
     DocumentRoot /var/www/nombre-de-tu-proyecto-3/public/

     <Directory /var/www/nombre-de-tu-proyecto-3/public/>
     	RewriteEngine On
	    RewriteBase /var/www/nombre-de-tu-proyecto-3/public/
        Options Indexes FollowSymLinks MultiViews
        AllowOverride All
        Order allow,deny
        allow from all
        Require all granted
     </Directory>

    <FilesMatch \.php$>
      # For Apache version 2.4.10 and above, use SetHandler to run PHP as a fastCGI process server
      SetHandler "proxy:unix:/run/php/php8.0-fpm.sock|fcgi://localhost"
    </FilesMatch>

     ErrorLog ${APACHE_LOG_DIR}/nombre-de-tu-proyecto-3_error.log
     CustomLog ${APACHE_LOG_DIR}/nombre-de-tu-proyecto-3_access.log combined
</VirtualHost>

Ejemplo:

sudo gedit /etc/apache2/sites-available/laravel8.programadorvagabundo.com.conf
<VirtualHost *:80>
     ServerAdmin tu-correo-para-administracion@laravel8.programadorvagabundo.com
     ServerName laravel8.programadorvagabundo.com
     DocumentRoot /var/www/laravel8/public/

     <Directory /var/www/laravel8/public/>
     	RewriteEngine On
	    RewriteBase /var/www/laravel8/public/
        Options Indexes FollowSymLinks MultiViews
        AllowOverride All
        Order allow,deny
        allow from all
        Require all granted
     </Directory>

    <FilesMatch \.php$>
      # For Apache version 2.4.10 and above, use SetHandler to run PHP as a fastCGI process server
      SetHandler "proxy:unix:/run/php/php8.0-fpm.sock|fcgi://localhost"
    </FilesMatch>

     ErrorLog ${APACHE_LOG_DIR}/laravel8_error.log
     CustomLog ${APACHE_LOG_DIR}/laravel8_access.log combined
</VirtualHost>

Prácticamente ya quedo, solo nos falta hacer lo más fácil, aunque no menos importante.

Ahora tenemos que activar los archivos de configuración para los hosts virtuales que acabamos de crear con:

sudo a2ensite nombre-de-tu-proyecto-1.tu-dominio.com
sudo a2ensite nombre-de-tu-proyecto-2.tu-dominio.com
sudo a2ensite nombre-de-tu-proyecto-3.tu-dominio.com

Ejemplo:

sudo a2ensite laravel58.programadorvagabundo.com
sudo a2ensite laravel6.programadorvagabundo.com
sudo a2ensite laravel8.programadorvagabundo.com

Posteriormente tenemos que deshabilitar el archivo de configuración predeterminada para apache (si es que no lo hemos hecho antes).

sudo a2dissite 000-default.conf

Por último tenemos que reiniciar el servicio de Apache para que se implementen los cambios:

sudo systemctl restart apache2

Paso 4: Probar las diferentes versiones de Laravel

Vamos a escribir en nuestro navegador web los sitios que creamos para visitarlos, por ejemplo:

http://nombre-de-tu-proyecto-1.tu-dominio.com
http://nombre-de-tu-proyecto-2.tu-dominio.com
http://nombre-de-tu-proyecto-3.tu-dominio.com

o si seguiste los ejemplos sería:

http://laravel58.programadorvagabundo.com
http://laravel6.programadorvagabundo.com
http://laravel8.programadorvagabundo.com

y deberías ver algo como esto:

Laravel 5.8

Laravel 6

Laravel 8

Y pues esto a sido todo, espero les sirva, bye.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *