En una instalación por defecto de VestaCP no es posible alojar proyectos webs desarrollados con el framework de Laravel. Sin embargo, realizando unos cambios en la configuración de VestaCP es posible alojar una web Laravel.
A continuación os mostramos detalladamente los pasos a seguir para poder alojar una web Laravel y la comprobación de que está funcionando correctamente.
Crear nuevo template para el uso de Laravel en VestaCP
Para poder trabajar con Laravel tenemos que crear templates para Apache y Nginx. Para ello tenemos que desplazarnos a la siguiente ruta donde se almacenan los templates con las configuraciones de Apache2 que se utilizan al crear o editar un dominio alojado en nuestro VestaCP:
# cd /usr/local/vesta/data/templates/web/apache2
Y creamos los siguientes archivos:
# touch laravel.{tpl,stpl}
Editamos laravel.tpl:
# vi laravel.tpl
Y añadimos el siguiente contenido:
<VirtualHost %ip%:%web_port%>
ServerName %domain_idn%
%alias_string%
ServerAdmin %email%
DocumentRoot %docroot%/public/
ScriptAlias /cgi-bin/ %home%/%user%/web/%domain%/cgi-bin/
Alias /vstats/ %home%/%user%/web/%domain%/stats/
Alias /error/ %home%/%user%/web/%domain%/document_errors/
#SuexecUserGroup %user% %group%
CustomLog /var/log/%web_system%/domains/%domain%.bytes bytes
CustomLog /var/log/%web_system%/domains/%domain%.log combined
ErrorLog /var/log/%web_system%/domains/%domain%.error.log
<Directory %docroot%/public/>
AllowOverride All
Options +Includes -Indexes +ExecCGI
</Directory>
<Directory %home%/%user%/web/%domain%/stats>
AllowOverride All
</Directory>
<IfModule mod_ruid2.c>
RMode config
RUidGid %user% %group%
RGroups www-data
</IfModule>
<IfModule itk.c>
AssignUserID %user% %group%
</IfModule>
IncludeOptional %home%/%user%/conf/web/%web_system%.%domain%.conf*
</VirtualHost>
Editamos laravel.stpl:
# vi laravel.stpl
Y añadimos el siguiente contenido:
<VirtualHost %ip%:%web_ssl_port%>
ServerName %domain_idn%
%alias_string%
ServerAdmin %email%
DocumentRoot %sdocroot%/public/
ScriptAlias /cgi-bin/ %home%/%user%/web/%domain%/cgi-bin/
Alias /vstats/ %home%/%user%/web/%domain%/stats/
Alias /error/ %home%/%user%/web/%domain%/document_errors/
#SuexecUserGroup %user% %group%
CustomLog /var/log/%web_system%/domains/%domain%.bytes bytes
CustomLog /var/log/%web_system%/domains/%domain%.log combined
ErrorLog /var/log/%web_system%/domains/%domain%.error.log
<Directory %sdocroot%/public/>
AllowOverride All
SSLRequireSSL
Options +Includes -Indexes +ExecCGI
</Directory>
<Directory %home%/%user%/web/%domain%/stats>
AllowOverride All
</Directory>
SSLEngine on
SSLVerifyClient none
SSLCertificateFile %ssl_crt%
SSLCertificateKeyFile %ssl_key%
%ssl_ca_str%SSLCertificateChainFile %ssl_ca%
<IfModule mod_ruid2.c>
RMode config
RUidGid %user% %group%
RGroups www-data
</IfModule>
<IfModule itk.c>
AssignUserID %user% %group%
</IfModule>
IncludeOptional %home%/%user%/conf/web/s%web_system%.%domain%.conf*
</VirtualHost>
Ahora tenemos que crear los templates para Nginx y para ello nos desplazamos a:
# cd /usr/local/vesta/data/templates/web/nginx
Y cremos los siguientes archivos:
# touch laravel.tpl
# touch laravel.stpl
Editamos laravel.tpl:
# vi laravel.tpl
Y añadimos el siguiente contenido:
server {
listen %ip%:%proxy_port%;
server_name %domain_idn% %alias_idn%;
error_log /var/log/%web_system%/domains/%domain%.error.log error;
location / {
proxy_pass http://%ip%:%web_port%;
location ~* ^.+\.(%proxy_extentions%)$ {
root %docroot%/public/;
access_log /var/log/%web_system%/domains/%domain%.log combined;
access_log /var/log/%web_system%/domains/%domain%.bytes bytes;
expires max;
try_files $uri @fallback;
}
}
location /error/ {
alias %home%/%user%/web/%domain%/document_errors/;
}
location @fallback {
proxy_pass http://%ip%:%web_port%;
}
location ~ /\.ht {return 404;}
location ~ /\.svn/ {return 404;}
location ~ /\.git/ {return 404;}
location ~ /\.hg/ {return 404;}
location ~ /\.bzr/ {return 404;}
include %home%/%user%/conf/web/nginx.%domain%.conf*;
}
Editamos laravel.stpl:
# vi laravel.stpl
Y añadimos el siguiente contenido:
server {
listen %ip%:%proxy_ssl_port%;
server_name %domain_idn% %alias_idn%;
ssl on;
ssl_certificate %ssl_pem%;
ssl_certificate_key %ssl_key%;
error_log /var/log/%web_system%/domains/%domain%.error.log error;
location / {
proxy_pass https://%ip%:%web_ssl_port%;
location ~* ^.+\.(%proxy_extentions%)$ {
root %sdocroot%/public/;
access_log /var/log/%web_system%/domains/%domain%.log combined;
access_log /var/log/%web_system%/domains/%domain%.bytes bytes;
expires max;
try_files $uri @fallback;
}
}
location /error/ {
alias %home%/%user%/web/%domain%/document_errors/;
}
location @fallback {
proxy_pass https://%ip%:%web_ssl_port%;
}
location ~ /\.ht {return 404;}
location ~ /\.svn/ {return 404;}
location ~ /\.git/ {return 404;}
location ~ /\.hg/ {return 404;}
location ~ /\.bzr/ {return 404;}
include %home%/%user%/conf/web/snginx.%domain%.conf*;
}
En este punto ya tenemos los templates creados para trabajar con Laravel. Para comprobar que los templates creados se encuentran disponibles, abrimos el panel de administración de VestaCP y editamos el dominio que queremos que utilice Laravel.
En plantilla web(Apache2) y plantilla proxy(Nginx) tenemos que seleccionar la plantilla creada "Laravel" y hacemos clic en guardar para aplicar los cambios.
Con estos pasos hemos visto como crear los templates necesarios para Laravel en VestaCP.
Probar correcto funcionamiento de Laravel con el CMS MaguttiCMS
Una vez tenemos VestaCP preparado para poder funcionar con Laravel es importante comprobar que el funcionamiento es correcto. A continuación, a modo de ejemplo, alojaremos el CMS MaguttiCMS que está desarrollado con Laravel 7 y Bootstrap 4.5 .
El primer paso que tenemos que realizar para trabajar con Laravel es instalar Composer que nos ayudará con la instalación de Laravel:
# apt-get install composer
Acto seguido descargamos el instalador de Laravel con Composer:
# composer global require laravel/installer
Using version ^3.2 for laravel/installer
./composer.json has been created
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 19 installs, 0 updates, 0 removals
- Installing symfony/polyfill-php80 (v1.17.1): Downloading (100%)
- Installing symfony/process (v5.1.2): Downloading (100%)
- Installing symfony/polyfill-ctype (v1.17.1): Downloading (100%)
- Installing symfony/filesystem (v5.1.2): Downloading (100%)
- Installing symfony/polyfill-mbstring (v1.17.1): Downloading (100%)
- Installing symfony/polyfill-intl-normalizer (v1.17.1): Downloading (100%)
- Installing symfony/polyfill-intl-grapheme (v1.17.1): Downloading (100%)
- Installing symfony/string (v5.1.2): Downloading (100%)
- Installing psr/container (1.0.0): Downloading (100%)
- Installing symfony/service-contracts (v2.1.3): Downloading (100%)
- Installing symfony/polyfill-php73 (v1.17.1): Downloading (100%)
- Installing symfony/console (v5.1.2): Downloading (100%)
- Installing psr/http-message (1.0.1): Downloading (100%)
- Installing psr/http-client (1.0.1): Downloading (100%)
- Installing ralouphie/getallheaders (3.0.3): Downloading (100%)
- Installing guzzlehttp/psr7 (1.6.1): Downloading (100%)
- Installing guzzlehttp/promises (v1.3.1): Downloading (100%)
- Installing guzzlehttp/guzzle (7.0.1): Downloading (100%)
- Installing laravel/installer (v3.2.0): Downloading (100%)
symfony/service-contracts suggests installing symfony/service-implementation ()
symfony/console suggests installing symfony/event-dispatcher ()
symfony/console suggests installing symfony/lock ()
symfony/console suggests installing psr/log (For using the console logger)
guzzlehttp/psr7 suggests installing zendframework/zend-httphandlerrunner (Emit PSR-7 responses)
guzzlehttp/guzzle suggests installing psr/log (Required for using the Log middleware)
Writing lock file
Generating autoload files
Nos dirigimos al directorio public_html de nuestra web. El document root de nuestra web es la carpeta public del proyecto Laravel como podemos visualizar en los templates creados anteriormente:
# cd /home/admin/web/prueba.com/public_html/
Descargamos el CMS de Magutti desde su repositorio de Github:
# git clone https://github.com/marcoax/maguttiCms.git
Accedemos al directorio "maguttiCms":
# cd maguttiCms
Para que funcione con los templates creados para Laravel tenemos que mover el contenido de la carpeta "maguttiCms" a la carpeta "public_html"
# mv * .* ../
# cd ..
Asignamos los permisos y propietario correctos a los ficheros y directorios:
# find ./ -type f -exec chmod 644 {} ";"
# find ./ -type d -exec chmod 755 {} ";"
# chown -R admin:admin ./
Ahora tenemos que copiar el fichero .env.example a .env para editar las variables de entorno. En este caso para configurar la conexión a la base de datos:
# cp .env.example .env
Antes de empezar a editar el fichero .env será necesario crear una base de datos. Para ello, accedemos al panel de administración de VestaCP https://ip_publica:8083 y nos dirigimos a bases de datos > añadir.
Ahora asignamos un nombre a la base de datos, un usuario y contraseña y hacemos clic en añadir. En el ejemplo utilizamos "maguttiCMS".
Ten en cuenta que VestaCP añade el prefijo "admin_" al nombre de la base de datos y usuario.
Volvemos ahora a la linea de comandos y ejecutamos el siguiente comando para editar las variables de entorno:
# vi .env
En este fichero tenemos que editar la configuración de la conexión a Mysql que va a utilizar MaguttiCMS:
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=admin_maguttiCms
DB_USERNAME=admin_maguttiCms
DB_PASSWORD=maguttiCms
Acto seguido procedemos a la instalación del CMS con el siguiente comando:
# composer install
Una vez instalado tenemos que generar las claves:
# php artisan key:generate
El último paso que nos queda es importar la base de datos de MaguttiCMS que se encuentra dentro de la carpeta "db":
# cd db
# mysql -u root -p admin_maguttiCms < framework_base.sql
Ahora accedemos a nuestro CMS "http://nombre_dominio" y veremos que el CMS ya está disponible.
Información
En algunas ocasiones es posible ver un error indicando que la Key no ha sido generada. Por lo que volveremos a ejecutar:
# php artisan key:generate
Para acceder al panel de administración accedemos por la url "http://nombre_dominio/admin" con usuario "cmsadmin@magutti.com" y contraseña "password".
Con estos últimos pasos hemos podido comprobar que nuestro VestaCP está preparado para trabajar con Laravel.