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

Introducción

Índice
  1. Introducción
  • Prerrequisitos
  • Paso 1: Instalación de PHP-FPM y los módulos PHP necesarios
  • Paso 2: Creación de una base de datos para la aplicación
  • Paso 3: creación de una nueva aplicación Laravel
  • Paso 4: Configuración de Laravel
  • Paso 5: Configuración de Nginx
  • Paso 6: Personalización de la página principal
  • Conclusió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 sudousuario 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:

    1. 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-mbstringmódulos PHP php-xmly 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-mysqlpoder conectarse a la base de datos a través del código PHP.

    Si es la primera vez que lo usa apten esta sesión, primero debe ejecutar el updatecomando para actualizar el caché del administrador de paquetes:

    1. sudo apt update

    Es posible que se le solicite que proporcione su contraseña de usuario para validar sus sudopermisos. Una vez finalizada la actualización, puede instalar los paquetes necesarios con:

    1. 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_listbase de datos.

    Para comenzar, inicie sesión en la consola MySQL como usuario de la base de datos raíz con:

    1. sudo mysql

    Para crear una nueva base de datos, ejecute el siguiente comando desde su consola MySQL:

    1. 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:

    1. 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_listbase 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:

    1. 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:

    1. mysql -u travel_user -p

    Tenga en cuenta la -pbandera 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_listbase de datos:

    1. 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 placesen la travel_listbase de datos. Desde la consola MySQL, ejecute la siguiente instrucción:

    1. CREATE TABLE travel_list.places (
    2. id INT AUTO_INCREMENT,
    3. name VARCHAR(255),
    4. visited BOOLEAN,
    5. PRIMARY KEY(id)
    6. );

    Ahora, complete la placestabla con algunos datos de muestra:

    1. INSERT INTO travel_list.places (name, visited)
    2. VALUES ("Tokyo", false),
    3. ("Budapest", true),
    4. ("Nairobi", false),
    5. ("Berlin", true),
    6. ("Lisbon", true),
    7. ("Denver", false),
    8. ("Moscow", false),
    9. ("Olso", false),
    10. ("Rio", true),
    11. ("Cincinnati", false),
    12. ("Helsinki", false);

    Para confirmar que los datos se guardaron correctamente en su tabla, ejecute:

    1. 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:

    1. 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-projectcomando. 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_listcomo ejemplo una aplicación, pero usted es libre de cambiarla por otra. La travel_listaplicació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:

    1. cd ~

    El siguiente comando creará un nuevo travel_listdirectorio que contiene una aplicación Laravel básica basada en la configuración predeterminada:

    1. 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 artisanel comando de Laravel para verificar que todos los componentes se instalaron correctamente:

    1. cd travel_list
    2. 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 configdirectorio. 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 .envarchivo para personalizar las opciones de configuración para el entorno de la aplicación actual.

    Abra el .envarchivo con el editor de línea de comandos que prefiera. Aquí utilizaremos nano:

    1. 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_DEBUGopción habilitada, ya que esto te brindará información de depuración importante mientras pruebas la aplicación desde un navegador. La APP_ENVvariable debe estar configurada en developmento testingen este caso.

    En caso de que estés instalando Laravel en un entorno de producción , debes desactivar la APP_DEBUGopción, ya que muestra al usuario final información confidencial sobre tu aplicación. APP_ENVEn este caso, debe estar configurada en production.

    El siguiente .envarchivo configura nuestra aplicación de ejemplo para el desarrollo :

    Nota : La APP_KEYvariable 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:generatecomando.

    /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 Yy Enterpara 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 mvcomando para mover la carpeta de la aplicación con todo su contenido a /var/www/travel_list:

    1. sudo mv ~/travel_list /var/www/travel_list

    Ahora necesitamos darle al usuario del servidor web acceso de escritura a las carpetas storagey cache, donde Laravel almacena los archivos generados por la aplicación:

    1. sudo chown -R www-data.www-data /var/www/travel_list/storage
    2. 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:

    1. 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_lista sites-enabled:

    1. 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_nameque se utilizó en el travel_listhost 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/defaultarchivo para deshabilitar la página de bienvenida predeterminada de Nginx con:

    1. sudo rm -f /etc/nginx/sites-enabled/default

    Para confirmar que la configuración no contiene ningún error de sintaxis, puede utilizar:

    1. sudo nginx -t

    Deberías ver un resultado como este:

    1. Outputnginx: the configuration file /etc/nginx/nginx.conf syntax is ok
    2. nginx: configuration file /etc/nginx/nginx.conf test is successful

    Para aplicar los cambios, vuelva a cargar Nginx con:

    1. 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_namedirectiva 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 DBla 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 placesque 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:

    1. 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 visitedindicador 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.phparchivo 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:

    1. nano resources/views/travel_list.blade.php

    La siguiente plantilla crea dos listas de lugares en función de las variables visitedy 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.

    SUSCRÍBETE A NUESTRO BOLETÍN 
    No te pierdas de nuestro contenido ni de ninguna de nuestras guías para que puedas avanzar en los juegos que más te gustan.

    Deja una respuesta

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

    Subir

    Este sitio web utiliza cookies para mejorar tu experiencia mientras navegas por él. Este sitio web utiliza cookies para mejorar tu experiencia de usuario. Al continuar navegando, aceptas su uso. Mas informacion