Cómo instalar y configurar Laravel 8 con Nginx (LEMP) en Ubuntu 18.04

Introducción
Laravel es un framework PHP de código abierto que proporciona un conjunto de herramientas y recursos para crear aplicaciones PHP modernas. Con un ecosistema completo que aprovecha sus características integradas, la popularidad de Laravel ha crecido rápidamente en los últimos años y muchos desarrolladores lo han adoptado como su framework de elección para un proceso de desarrollo optimizado.
En esta guía, instalarás y configurarás una nueva aplicación Laravel 8 en un servidor Ubuntu 18.04 con PHP 7.4, utilizando Composer para descargar y administrar las dependencias del framework. Cuando hayas terminado, tendrás una aplicación de demostración de Laravel funcional que extrae contenido de una base de datos MySQL.
Prerrequisitos
Para completar esta guía, primero deberá realizar las siguientes tareas en su servidor Ubuntu 18.04:
- Crea un
sudo
usuario y habilitaufw
. Para configurarlo, puedes seguir nuestra guía de configuración inicial del servidor con Ubuntu 18.04 . - Instalar Nginx . Si aún no lo has configurado, puedes seguir los pasos 1 y 2 de Cómo instalar Nginx en Ubuntu 18.04 .
- Instalar MySQL . Siga los pasos 1 y 2 de nuestra guía sobre cómo instalar MySQL en Ubuntu 18.04 para realizar esta configuración.
- Instale PHP 7.4 o una versión superior . Para ello, puede seguir el paso 1 de nuestra guía sobre Cómo instalar PHP 7.4 y configurar un entorno de desarrollo local en Ubuntu 18.04 .
- Instalar Composer . Utilizarás Composer para instalar Laravel y sus dependencias. Puedes instalar Composer siguiendo nuestra guía sobre Cómo instalar Composer en Ubuntu 18.04 .
Para verificar qué versión de PHP está utilizando actualmente su servidor, ejecute:
- php -v
outputPHP 7.4.22 (cli) (built: Jul 30 2021 13:07:59) ( NTS )Copyright (c) The PHP GroupZend Engine v3.4.0, Copyright (c) Zend Technologies with Zend OPcache v7.4.22, Copyright (c), by Zend Technologies
Verifique la salida para asegurarse de que su servidor tenga instalado PHP 7.4 o superior, ya que es la última versión estable de PHP.
Paso 1: Instalación de PHP-FPM y los módulos PHP necesarios
Antes de poder instalar Laravel, debes instalar algunos módulos PHP que requiere el framework. También deberás instalar PHP-FPM en caso de que aún no lo hayas configurado.
Laravel requiere los php-mbstring
módulos PHP php-xml
y php-bcmath
. Estas extensiones PHP brindan soporte adicional para trabajar con codificación de caracteres, XML y matemáticas de precisión. Además, deberá php-mysql
poder conectarse a la base de datos a través del código PHP.
Si es la primera vez que lo usa apt
en esta sesión, primero debe ejecutar el update
comando para actualizar el caché del administrador de paquetes:
- sudo apt update
Es posible que se le solicite que proporcione su contraseña de usuario para validar sus sudo
permisos. Una vez finalizada la actualización, puede instalar los paquetes necesarios con:
- sudo apt install php7.4-fpm php7.4-mysql php7.4-mbstring php7.4-xml php7.4-bcmath
Su sistema ahora está listo para ejecutar la instalación de Laravel a través de Composer, pero antes de hacerlo, deberá configurar una base de datos para su aplicación.
Paso 2: Creación de una base de datos para la aplicación
Para practicar la instalación y el uso básicos de Laravel, creará una aplicación de lista de viajes de muestra para mostrar una lista de lugares a los que un usuario quisiera viajar y una lista de lugares que ya visitó. Esto se puede almacenar en una tabla de lugares con un campo para ubicaciones que llamará name y otro campo para marcarlas como visits o not visits , que llamará visits . Además, incluirá un campo id para identificar de forma única cada entrada.
Para conectarse a la base de datos desde la aplicación Laravel, deberá crear un usuario MySQL dedicado y otorgarle privilegios completos sobre la travel_list
base de datos.
Para comenzar, inicie sesión en la consola MySQL como usuario de la base de datos raíz con:
- sudo mysql
Para crear una nueva base de datos, ejecute el siguiente comando desde su consola MySQL:
- CREATE DATABASE travel_list;
Ahora puedes crear un nuevo usuario y otorgarle privilegios completos en la base de datos personalizada que acabas de crear. En este ejemplo, estamos creando un usuario llamado travel_user con la contraseña password
, aunque debes cambiarla por una contraseña segura de tu elección:
- GRANT ALL ON travel_list.* TO 'travel_user'@'localhost' IDENTIFIED BY 'password' WITH GRANT OPTION;
Esto le dará al usuario travel_user privilegios completos sobre la travel_list
base de datos, al tiempo que evitará que este usuario cree o modifique otras bases de datos en su servidor.
A continuación, salga del shell MySQL:
- exit
Ahora puede probar si el nuevo usuario tiene los permisos adecuados iniciando sesión nuevamente en la consola MySQL, esta vez utilizando las credenciales de usuario personalizadas:
- mysql -u travel_user -p
Tenga en cuenta la -p
bandera en este comando, que le solicitará la contraseña utilizada al crear el usuario travel_user . Después de iniciar sesión en la consola MySQL, confirme que tiene acceso a la travel_list
base de datos:
- SHOW DATABASES;
Esto le dará el siguiente resultado:
Output+--------------------+| Database |+--------------------+| information_schema || travel_list |+--------------------+2 rows in set (0.01 sec)
A continuación, cree una tabla con el nombre places
en la travel_list
base de datos. Desde la consola MySQL, ejecute la siguiente instrucción:
- CREATE TABLE travel_list.places (
- id INT AUTO_INCREMENT,
- name VARCHAR(255),
- visited BOOLEAN,
- PRIMARY KEY(id)
- );
Ahora, complete la places
tabla con algunos datos de muestra:
- INSERT INTO travel_list.places (name, visited)
- VALUES ("Tokyo", false),
- ("Budapest", true),
- ("Nairobi", false),
- ("Berlin", true),
- ("Lisbon", true),
- ("Denver", false),
- ("Moscow", false),
- ("Olso", false),
- ("Rio", true),
- ("Cincinnati", false),
- ("Helsinki", false);
Para confirmar que los datos se guardaron correctamente en su tabla, ejecute:
- SELECT * FROM travel_list.places;
Verá un resultado similar a este:
Output+----+-----------+---------+| id | name | visited |+----+-----------+---------+| 1 | Tokyo | 0 || 2 | Budapest | 1 || 3 | Nairobi | 0 || 4 | Berlin | 1 || 5 | Lisbon | 1 || 6 | Denver | 0 || 7 | Moscow | 0 || 8 | Oslo | 0 || 9 | Rio | 1 || 10 | Cincinnati| 0 || 11 | Helsinki | 0 |+----+-----------+---------+11 rows in set (0.00 sec)
Después de confirmar que tiene datos válidos en su tabla de prueba, puede salir de la consola MySQL:
- exit
Ahora está listo para crear la aplicación y configurarla para conectarse a la nueva base de datos.
Paso 3: creación de una nueva aplicación Laravel
Ahora creará una nueva aplicación Laravel con el composer create-project
comando. Este comando de Composer se utiliza normalmente para iniciar nuevas aplicaciones basadas en marcos y sistemas de gestión de contenido existentes.
En esta guía, utilizaremos travel_list
como ejemplo una aplicación, pero usted es libre de cambiarla por otra. La travel_list
aplicación mostrará una lista de ubicaciones extraídas de un servidor MySQL local, con el objetivo de demostrar la configuración básica de Laravel y confirmar que puede conectarse a la base de datos.
Primero, vaya al directorio de inicio de su usuario:
- cd ~
El siguiente comando creará un nuevo travel_list
directorio que contiene una aplicación Laravel básica basada en la configuración predeterminada:
- composer create-project --prefer-dist laravel/laravel travel_list
Verá un resultado similar a este:
OutputCreating a "laravel/laravel" project at "./travel_list"Installing laravel/laravel (v8.5.22) - Installing laravel/laravel (v8.5.22): Extracting archiveCreated project in /home/sammy/travel_list @php -r "file_exists('.env') || copy('.env.example', '.env');"Loading composer repositories with package informationUpdating dependenciesLock file operations: 109 installs, 0 updates, 0 removals - Locking asm89/stack-cors (v2.0.3) - Locking brick/math (0.9.2) - Locking dflydev/dot-access-data (v3.0.0) - Locking doctrine/inflector (2.0.3) - Locking doctrine/instantiator (1.4.0) - Locking doctrine/lexer (1.2.1) …Package manifest generated successfully.75 packages you are using are looking for funding.Use the `composer fund` command to find out more! @php artisan key:generate --ansiApplication key set successfully.
Una vez finalizada la instalación, acceda al directorio de la aplicación y ejecute artisan
el comando de Laravel para verificar que todos los componentes se instalaron correctamente:
- cd travel_list
- php artisan
Verás un resultado similar a este:
OutputLaravel Framework 8.52.0Usage: command [options] [arguments]Options: -h, --help Display help for the given command. When no command is given display help for the list command -q, --quiet Do not output any message -V, --version Display this application version --ansi|--no-ansi Force (or disable --no-ansi) ANSI output -n, --no-interaction Do not ask any interactive question --env[=ENV] The environment the command should run under -v|vv|vvv, --verbose Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug...
Este resultado confirma que los archivos de la aplicación están en su lugar y que las herramientas de línea de comandos de Laravel funcionan como se espera. Sin embargo, aún debe configurar la aplicación para configurar la base de datos y algunos otros detalles.
Paso 4: Configuración de Laravel
Los archivos de configuración de Laravel se encuentran en un directorio llamado config
, dentro del directorio raíz de la aplicación. Además, cuando instalas Laravel con Composer, se crea un archivo de entorno . Este archivo contiene configuraciones específicas del entorno actual en el que se ejecuta la aplicación y tendrá prioridad sobre los valores establecidos en los archivos de configuración regulares ubicados en el config
directorio. Cada instalación en un nuevo entorno requiere un archivo de entorno personalizado para definir cosas como configuraciones de conexión a la base de datos, opciones de depuración, URL de la aplicación, entre otros elementos que pueden variar según el entorno en el que se esté ejecutando la aplicación.
Advertencia : El archivo de configuración del entorno contiene información confidencial sobre su servidor, incluidas las credenciales de la base de datos y las claves de seguridad. Por ese motivo, nunca debe compartir este archivo públicamente.
Ahora editaremos el .env
archivo para personalizar las opciones de configuración para el entorno de la aplicación actual.
Abra el .env
archivo con el editor de línea de comandos que prefiera. Aquí utilizaremos nano
:
- nano .env
Aunque este archivo contiene muchas variables de configuración, no es necesario configurarlas todas ahora. La siguiente lista contiene una descripción general de las variables que requieren atención inmediata:
APP_NAME
:Nombre de la aplicación, utilizada para notificaciones y mensajes.APP_ENV
:Entorno de aplicación actual.APP_KEY
:Se utiliza para generar sales y hashes, esta clave única se crea automáticamente al instalar Laravel a través de Composer, por lo que no es necesario cambiarla.APP_DEBUG
:Si mostrar o no información de depuración en el lado del cliente.APP_URL
:URL base de la aplicación, utilizada para generar enlaces de la aplicación.DB_DATABASE
:Nombre de la base de datos.DB_USERNAME
:Nombre de usuario para conectarse a la base de datos.DB_PASSWORD
: Contraseña para conectarse a la base de datos.
De forma predeterminada, estos valores están configurados para un entorno de desarrollo local que utiliza Homestead , un paquete Vagrant preempaquetado proporcionado por Laravel. Cambiaremos estos valores para reflejar la configuración actual del entorno de nuestra aplicación de ejemplo.
En caso de que estés instalando Laravel en un entorno de desarrollo o de pruebas , puedes dejar la APP_DEBUG
opción habilitada, ya que esto te brindará información de depuración importante mientras pruebas la aplicación desde un navegador. La APP_ENV
variable debe estar configurada en development
o testing
en este caso.
En caso de que estés instalando Laravel en un entorno de producción , debes desactivar la APP_DEBUG
opción, ya que muestra al usuario final información confidencial sobre tu aplicación. APP_ENV
En este caso, debe estar configurada en production
.
El siguiente .env
archivo configura nuestra aplicación de ejemplo para el desarrollo :
Nota : La APP_KEY
variable contiene una clave única que se generó automáticamente cuando instalaste Laravel a través de Composer. No necesitas cambiar este valor. Si quieres generar una nueva clave segura, puedes usar el php artisan key:generate
comando.
/var/www/lista_de_viajes/.env
APP_NAME=TravelListAPP_ENV=developmentAPP_KEY=APPLICATION_UNIQUE_KEY_DONT_COPYAPP_DEBUG=trueAPP_URL=http://domain_or_IPLOG_CHANNEL=stackDB_CONNECTION=mysqlDB_HOST=127.0.0.1DB_PORT=3306DB_DATABASE=travel_listDB_USERNAME=travel_userDB_PASSWORD=password...
Ajuste las variables según corresponda. Cuando haya terminado de editar, guarde y cierre el archivo para conservar los cambios. Si está utilizando nano
, puede hacerlo con CTRL+X
, luego Y
y Enter
para confirmar.
Tu aplicación Laravel ya está configurada, pero aún necesitamos configurar el servidor web para poder acceder a ella desde un navegador. En el siguiente paso, configuraremos Nginx para que sirva a tu aplicación Laravel.
Paso 5: Configuración de Nginx
Hemos instalado Laravel en una carpeta local del directorio de inicio de su usuario remoto y, si bien esto funciona bien para entornos de desarrollo locales, no es una práctica recomendada para servidores web que están abiertos a Internet público. Moveremos la carpeta de la aplicación a /var/www
, que es la ubicación habitual para las aplicaciones web que se ejecutan en Nginx.
Primero, use el mv
comando para mover la carpeta de la aplicación con todo su contenido a /var/www/travel_list
:
- sudo mv ~/travel_list /var/www/travel_list
Ahora necesitamos darle al usuario del servidor web acceso de escritura a las carpetas storage
y cache
, donde Laravel almacena los archivos generados por la aplicación:
- sudo chown -R www-data.www-data /var/www/travel_list/storage
- sudo chown -R www-data.www-data /var/www/travel_list/bootstrap/cache
Los archivos de la aplicación ya están en orden, pero aún necesitamos configurar Nginx para que muestre el contenido. Para ello, crearemos un nuevo archivo de configuración de host virtual en /etc/nginx/sites-available
:
- sudo nano /etc/nginx/sites-available/travel_list
El siguiente archivo de configuración contiene las configuraciones recomendadas para aplicaciones Laravel en Nginx:
/etc/nginx/sitios-disponibles/lista_de_viajes
server { listen 80; server_name server_domain_or_IP; root /var/www/travel_list/public; add_header X-Frame-Options "SAMEORIGIN"; add_header X-XSS-Protection "1; mode=block"; add_header X-Content-Type-Options "nosniff"; index index.html index.htm index.php; charset utf-8; location / { try_files $uri $uri/ /index.php?$query_string; } location = /favicon.ico { access_log off; log_not_found off; } location = /robots.txt { access_log off; log_not_found off; } error_page 404 /index.php; location ~ .php$ { fastcgi_pass unix:/var/run/php/php7.4-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name; include fastcgi_params; } location ~ /.(?!well-known).* { deny all; }}
Copia este contenido en tu archivo y, si es necesario, ajusta los valores resaltados para que coincidan con tu propia configuración. Guarda y cierra el archivo cuando hayas terminado de editarlo./etc/nginx/sites-available/travel_list
Para activar el nuevo archivo de configuración del host virtual, cree un enlace simbólico travel_list
a sites-enabled
:
- sudo ln -s /etc/nginx/sites-available/travel_list /etc/nginx/sites-enabled/
Nota : Si tiene otro archivo de host virtual que se configuró previamente para el mismo server_name
que se utilizó en el travel_list
host virtual, es posible que deba desactivar la configuración anterior eliminando el enlace simbólico correspondiente dentro de /etc/nginx/sites-enabled/
. Por ejemplo, es posible que desee eliminar el /etc/nginx/sites-enabled/default
archivo para deshabilitar la página de bienvenida predeterminada de Nginx con:
- sudo rm -f /etc/nginx/sites-enabled/default
Para confirmar que la configuración no contiene ningún error de sintaxis, puede utilizar:
- sudo nginx -t
Deberías ver un resultado como este:
- Outputnginx: the configuration file /etc/nginx/nginx.conf syntax is ok
- nginx: configuration file /etc/nginx/nginx.conf test is successful
Para aplicar los cambios, vuelva a cargar Nginx con:
- sudo systemctl reload nginx
Ahora vaya a su navegador y acceda a la aplicación utilizando el nombre de dominio o la dirección IP del servidor, según lo definido por la server_name
directiva en su archivo de configuración:
http://server_domain_or_IP
Verás una página como ésta:
Esto confirma que su servidor Nginx está configurado correctamente para servir a Laravel. A partir de este punto, puede comenzar a crear su aplicación sobre el esqueleto provisto por la instalación predeterminada.
En el siguiente paso, modificaremos la ruta principal de la aplicación para consultar datos en la base de datos utilizando DB
la fachada de Laravel.
Paso 6: Personalización de la página principal
Suponiendo que ha seguido todos los pasos de esta guía hasta ahora, debería tener una aplicación Laravel en funcionamiento y una tabla de base de datos llamada places
que contiene algunos datos de muestra.
Ahora editaremos la ruta principal de la aplicación para consultar la base de datos y devolver el contenido a la vista de la aplicación .
Abra el archivo de ruta principal routes/web.php
:
- nano routes/web.php
Este archivo viene por defecto con el siguiente contenido:
rutas/web.php
?php/*|--------------------------------------------------------------------------| Web Routes|--------------------------------------------------------------------------|| Here is where you can register web routes for your application. These| routes are loaded by the RouteServiceProvider within a group which| contains the "web" middleware group. Now create something great!|*/Route::get('/', function () { return view('welcome');});
Las rutas se definen dentro de este archivo utilizando el método estático Route::get
, que recibe una ruta y una función de devolución de llamada como argumentos.
El código siguiente reemplaza la función de devolución de llamada de la ruta principal. Realiza dos consultas a la base de datos utilizando el visited
indicador para filtrar los resultados. Devuelve los resultados a una vista denominada travel_list
, que vamos a crear a continuación. Copie este contenido en su routes/web.php
archivo y reemplace el código que ya está allí:
rutas/web.php
?phpuse IlluminateSupportFacadesDB;Route::get('/', function () { $visited = DB::select('select * from places where visited = ?', [1]); $togo = DB::select('select * from places where visited = ?', [0]); return view('travel_list', ['visited' = $visited, 'togo' = $togo ] );});
Guarde y cierre el archivo cuando haya terminado de editarlo. Ahora crearemos la vista que mostrará los resultados de la base de datos al usuario. Cree un nuevo archivo de vista dentro de resources/views
:
- nano resources/views/travel_list.blade.php
La siguiente plantilla crea dos listas de lugares en función de las variables visited
y togo
. Copie este contenido en su nuevo archivo de vista:
recursos/vistas/lista_de_viajes/blade.php
htmlheadtitleTravel List/title/headbodyh1My Travel Bucket List/h1h2Places I'd Like to Visit/h2ul @foreach ($togo as $newplace)li{{ $newplace-name }}/li @endforeach/ulh2Places I've Already Been To/h2ul @foreach ($visited as $place) li{{ $place-name }}/li @endforeach/ul/body/html
Guarda y cierra el archivo cuando hayas terminado. Ahora ve a tu navegador y vuelve a cargar la aplicación. Verás una página como esta:
Ahora tienes una aplicación Laravel funcional que extrae contenidos de una base de datos MySQL.
Conclusión
En este tutorial, configuraste una nueva aplicación Laravel sobre una pila LEMP (Linux, Nginx, MySQL y PHP) que se ejecuta en un servidor Ubuntu 18.04. También personalizaste tu ruta predeterminada para consultar el contenido de la base de datos y mostrar los resultados en una vista personalizada.
Desde aquí, puedes crear nuevas rutas y vistas para cualquier página adicional que necesite tu aplicación. Consulta la documentación oficial de Laravel para obtener más información sobre rutas , vistas y compatibilidad con bases de datos . Si estás implementando en producción, también deberías consultar la sección de optimización para conocer algunas formas diferentes en las que puedes mejorar el rendimiento de tu aplicación.
Para mejorar la seguridad, debería considerar instalar un certificado TLS/SSL para su servidor, lo que le permitirá ofrecer contenido a través de HTTPS. Para ello, puede seguir nuestra guía sobre [cómo proteger su instalación de Nginx con Let’s Encrypt en Ubuntu 18.04] ( https://www.digitalocean.com/community/tutorials/how-to-secure-nginx-with-let-s-encrypt-on-ubuntu-18-04 ).
Consulte también nuestra página de etiquetas de Laravel para obtener más materiales de aprendizaje sobre este marco, incluidas charlas técnicas y series de tutoriales.
Deja una respuesta