Tutorial

Como instalar e configurar o Laravel com o Nginx no Ubuntu 20.04

NginxUbuntuPHPPHP FrameworksLEMPUbuntu 20.04

Introdução

O Laravel é um framework PHP de código aberto que fornece um conjunto de ferramentas e recursos para construir aplicativos PHP modernos. Com um ecossistema completo que aproveita suas funcionalidades nativas, a popularidade do Laravel cresceu rapidamente nos últimos anos, com muitos desenvolvedores o adotando como seu framework preferido para um processo de desenvolvimento simplificado.

Neste guia, você irá instalar e configurar uma nova aplicação Laravel em um servidor Ubuntu 20.04, usando o Composer para baixar e gerenciar as dependências do framework e o Nginx para exibir a aplicação. Quando terminar, você terá uma aplicação de demonstração funcional do Laravel, extraindo conteúdo de um banco de dados MySQL 8.

Pré-requisitos

Para completar este guia, você precisará primeiro realizar as seguintes tarefas em seu servidor Ubuntu 20.04.

Passo 1 — Instalando os módulos PHP necessários

Antes de instalar o Laravel, você precisa instalar alguns módulos PHP que são requeridos pelo framework. Vamos usar o apt para instalar os módulos PHP php-mbstring, php-xml e php-bcmath. Essas extensões PHP fornecem um suporte extra para lidar com a codificação de caracteres, XML e matemática de precisão.

Se esta é a primeira vez que você está usando o apt nesta sessão, você deve primeiro executar o comando update para atualizar o cache do gerenciador de pacotes:

  • sudo apt update

Agora, você pode instalar os pacotes necessários com:

  • sudo apt install php-mbstring php-xml php-bcmath

Seu sistema agora está pronto para executar a instalação do Laravel através do Composer, mas antes de fazer isso, você precisará de um banco de dados para sua aplicação.

Passo 2 — Criando um banco de dados para a aplicação

Para demonstrar a instalação e o uso básicos do Laravel, vamos criar uma aplicação de lista de viagens (travel list) para mostrar uma lista de lugares para os quais um usuário gostaria de viajar e uma lista de lugares que já foram visitados. Isso pode ser armazenado em uma tabela places com um campo para locais que chamaremos de name e outro campo para marcá-los como visitados ou não visitados, que vamos chamar de visited. Além disso, vamos incluir um campo id para identificar unicamente cada entrada.

Para conectar ao banco de dados a partir da aplicação Laravel, vamos criar um usuário dedicado do MySQL e conceder a este usuário privilégios totais sobre o banco de dados travellist.

No momento em que este artigo foi escrito, a biblioteca mysqlnd nativa do PHP para o MySQL não suporta o caching_sha2_authentication, o método de autenticação padrão para o MySQL 8. Precisaremos criar nosso usuário de banco de dados com o método de autenticação mysql_native_password para conseguirmos conectar ao banco de dados MySQL a partir do PHP.

Para começar, faça login no console do MySQL com o usuário root do banco de dados com:

  • sudo mysql

Para criar um novo banco de dados, execute o seguinte comando a partir do seu console do MySQL:

  • CREATE DATABASE travellist;

Agora, crie um usuário e lhe conceda privilégios completos sobre o banco de dados personalizado que acabou de criar. Neste exemplo, estamos criando um usuário chamado travellist_user com a senha password, embora você deva alterá-la para uma senha segura à sua escolha:

  • CREATE USER 'travellist_user'@'%' IDENTIFIED WITH mysql_native_password BY 'password';

Agora, precisamos dar a este usuário permissão para o banco de dados travellist:

  • GRANT ALL ON travellist.* TO 'travellist_user'@'%';

Isso dará ao usuário travellist_user privilégios totais sobre o banco de dados travellist, ao mesmo tempo em que evitará que este usuário crie ou modifique outros bancos de dados no seu servidor.

Em seguida, saia do shell do MySQL:

  • exit

Agora você pode testar se o novo usuário tem as permissões adequadas fazendo login no console MySQL novamente, desta vez usando as credenciais de usuário personalizadas:

  • mysql -u travellist_user -p

Observe a flag -p neste comando, a qual irá solicitar a senha utilizada ao criar o usuário travellist_user. Após fazer login no console do MySQL, confirme que você tem acesso ao banco de dados travellist:

  • SHOW DATABASES;

Isso gerará o seguinte resultado:

Output
+--------------------+ | Database | +--------------------+ | information_schema | | travellist | +--------------------+ 2 rows in set (0.01 sec)

Em seguida, crie uma tabela chamada places no banco de dados travellist. A partir do console do MySQL, execute a seguinte instrução:

  • CREATE TABLE travellist.places (
  • id INT AUTO_INCREMENT,
  • name VARCHAR(255),
  • visited BOOLEAN,
  • PRIMARY KEY(id)
  • );

Agora, popule a tabela places com alguns dados de amostra:

  • INSERT INTO travellist.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 se os dados foram salvos com sucesso em sua tabela, execute:

  • SELECT * FROM travellist.places;

Você verá um resultado parecido com 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)

Após confirmar que você tem dados válidos em sua tabela de teste, saia do console do MySQL:

  • exit

Agora você está pronto para criar a aplicação e configurá-la para conectar ao novo banco de dados.

Passo 3 — Criando uma nova aplicação Laravel

Você irá criar agora uma nova aplicação Laravel usando o comando composer create-project. Este comando do Composer é geralmente usado para inicializar novas aplicações baseadas em frameworks existentes e sistemas de gerenciamento de conteúdo.

Ao longo deste guia, usaremos o travellist como uma aplicação de exemplo, mas você pode alterar isso para outra coisa. A aplicação travellist exibirá uma lista de locais extraída de um servidor MySQL local, destinada a demonstrar a configuração básica do Laravel e confirmar que você é capaz de se conectar ao banco de dados.

Primeiro, vá para o diretório home do seu usuário:

  • cd ~

O seguinte comando criará um novo diretório travellist contendo o esqueleto de uma aplicação Laravel baseada em configurações padrão:

  • composer create-project --prefer-dist laravel/laravel travellist

Você verá um resultado parecido com este:

Output
Installing laravel/laravel (v5.8.17) - Installing laravel/laravel (v5.8.17): Downloading (100%) Created project in travellist > @php -r "file_exists('.env') || copy('.env.example', '.env');" Loading composer repositories with package information Updating dependencies (including require-dev) Package operations: 80 installs, 0 updates, 0 removals - Installing symfony/polyfill-ctype (v1.11.0): Downloading (100%) - Installing phpoption/phpoption (1.5.0): Downloading (100%) - Installing vlucas/phpdotenv (v3.4.0): Downloading (100%) - Installing symfony/css-selector (v4.3.2): Downloading (100%) ...

Quando a instalação terminar, acesse o diretório da aplicação e execute o comando artisan do Laravel para verificar se todos os componentes foram instalados com sucesso:

  • cd travellist
  • php artisan

Você verá um resultado parecido com este:

Output
Laravel Framework 7.11.0 Usage: command [options] [arguments] Options: -h, --help Display this help message -q, --quiet Do not output any message -V, --version Display this application version --ansi Force ANSI output --no-ansi Disable 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 ...

Essa saída confirma que os arquivos da aplicação estão prontos e as ferramentas de linha de comando do Laravel estão funcionando como esperado. No entanto, ainda precisamos configurar a aplicação para definir o banco de dados e alguns outros detalhes.

Passo 4 — Configurando o Laravel

Os arquivos de configuração do Laravel estão localizados em um diretório chamado config, dentro do diretório raiz do aplicativo. Além disso, quando você instala o Laravel com o Composer, ele cria um arquivo de ambiente. Este arquivo contém configurações que são específicas para o ambiente atual onde a aplicação está em execução, e terá precedência sobre os valores definidos em arquivos de configuração regular, localizados no diretório config. Cada instalação em novo ambiente exige um arquivo de ambiente personalizado para definir coisas como as configurações da conexão com o banco de dados, as opções de depuração, o URL do aplicativo, entre outros itens que possam variar, dependendo do ambiente em que o aplicativo esteja funcionando.

Aviso: o arquivo de configuração de ambiente contém informações confidenciais sobre o seu servidor, incluindo credenciais para o banco de dados e chaves de segurança. Por esse motivo, nunca compartilhe este arquivo publicamente.

Agora, vamos editar o arquivo .env para personalizar as opções de configuração para o ambiente da aplicação atual.

Abra o arquivo .env usando seu editor de linha de comando favorito. Aqui, usaremos o nano:

  • nano .env

Embora existam muitas variáveis de configuração neste arquivo, você não precisa configurar todas elas agora. A seguinte lista contém uma visão geral das variáveis que requerem atenção imediata:

  • APP_NAME: nome da aplicação, usada para notificações e mensagens.
  • APP_ENV: ambiente da aplicação atual.
  • APP_KEY: usada para gerar salts e hashes, esta chave única é criada automaticamente ao instalar o Laravel através do Composer, portanto você não precisa modificá-la.
  • APP_DEBUG: se deve ou não mostrar informações de depuração no lado do cliente.
  • APP_URL: o URL base para a aplicação, usado para gerar links da aplicação.
  • DB_DATABASE: nome do banco de dados.
  • DB_USERNAME: usuário para se conectar ao banco de dados.
  • DB_PASSWORD: senha para se conectar ao banco de dados.

Por padrão, esses valores são configurados para um ambiente de desenvolvimento local que utiliza o Homestead, um box Vagrant pré-empacotado fornecido pelo Laravel. Vamos alterar esses valores para refletir as configurações atuais do ambiente da nossa aplicação de exemplo.

Caso esteja instalando o Laravel em um ambiente de desenvolvimento ou de teste, você pode deixar a opção APP_DEBUG habilitada, pois isso dará a você informações de depuração importantes ao testar a aplicação a partir de um navegador. A variável APP_ENV deve ser definida para development ou testing neste caso.

Caso você esteja instalando o Laravel em um ambiente de produção, você deve desativar a opção APP_DEBUG, pois ela mostra informações sensíveis para o usuário final sobre sua aplicação. O APP_ENV neste caso deve ser definido para production.

O arquivo .env a seguir define nossa aplicação de exemplo como development:

Nota: a variável APP_KEY contém uma chave única que foi gerada automaticamente quando você instalou o Laravel através do Composer. Você não precisa alterar este valor. Se você quiser gerar uma nova chave segura, você pode usar o comando php artisan key:generate.

/var/www/travellist/.env
APP_NAME=TravelList
APP_ENV=development
APP_KEY=APPLICATION_UNIQUE_KEY_DONT_COPY
APP_DEBUG=true
APP_URL=http://domain_or_IP

LOG_CHANNEL=stack

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=travellist
DB_USERNAME=travellist_user
DB_PASSWORD=password

...

Ajuste suas variáveis adequadamente. Quando você terminar a edição, salve e feche o arquivo para manter as alterações. Se você estiver usando o nano, você pode fazer isto digitando CTRL+X, depois Y e ENTER para confirmar.

Sua aplicação Laravel agora está pronta, mas ainda precisamos configurar o servidor Web para poder acessá-lo a partir de um navegador. No próximo passo, vamos configurar o Nginx para apresentar sua aplicação Laravel.

Passo 5 — Configurando o Nginx

Instalamos o Laravel em uma pasta local do diretório home do seu usuário remoto, e, embora isso funcione bem para ambientes de desenvolvimento local, não é uma prática recomendada para servidores Web que estejam abertos à Internet pública. Vamos mover a pasta da aplicação para /var/www, que é a localização usual para aplicações Web em execução no Nginx.

Primeiro, utilize o comando mv para mover a pasta da aplicação com todo o seu conteúdo para /var/www/travellist:

  • sudo mv ~/travellist /var/www/travellist

Agora, precisamos dar ao usuário do servidor Web acesso de gravação nas pastas storage e cache, onde o Laravel armazena arquivos gerados pela aplicação:

  • sudo chown -R www-data.www-data /var/www/travellist/storage
  • sudo chown -R www-data.www-data /var/www/travellist/bootstrap/cache

Os arquivos da aplicação agora estão em ordem, mas ainda precisamos configurar o Nginx para exibir o conteúdo. Para fazer isso, vamos criar um novo arquivo de configuração de host virtual em /etc/nginx/sites-available:

  • sudo nano /etc/nginx/sites-available/travellist

O arquivo de configuração a seguir contém as configurações recomendadas para aplicações Laravel no Nginx:

/etc/nginx/sites-available/travellist
server {
    listen 80;
    server_name server_domain_or_IP;
    root /var/www/travellist/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;
    }
}

Copie este conteúdo para seu arquivo /etc/nginx/sites-available/travellist e, se necessário, ajuste os valores destacados para alinhar com sua própria configuração. Salve e feche o arquivo quando terminar de editar.

Para ativar o novo arquivo de configuração de host virtual, crie um link simbólico para o travellist em sites-enabled:

  • sudo ln -s /etc/nginx/sites-available/travellist /etc/nginx/sites-enabled/

Nota: se você tiver outro arquivo de host virtual que foi previamente configurado para o mesmo server_name usado no host virtual travellist, você pode precisar desativar a configuração antiga removendo o link simbólico correspondente dentro de /etc/nginx/sites-enabled/.

Para confirmar que a configuração não contém erros de sintaxe, você pode usar:

  • sudo nginx -t

Você deve ver um resultado como este:

Output
  • nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
  • nginx: configuration file /etc/nginx/nginx.conf test is successful

Para aplicar as alterações, recarregue o Nginx com:

  • sudo systemctl reload nginx

Agora, vá para seu navegador e acesse a aplicação usando o nome de domínio ou o endereço IP do servidor, como definido pela diretiva server_name em seu arquivo de configuração:

http://server_domain_or_IP

Você verá uma página como esta:

Laravel splash page

Isso confirma que seu servidor Nginx está devidamente configurado para apresentar o Laravel. A partir deste ponto, você pode começar a construir sua aplicação baseada no esqueleto fornecido pela instalação padrão.

No próximo passo, vamos modificar a rota principal da aplicação para consultar dados no banco de dados usando a camada DB do Laravel.

Passo 6 — Personalizando a página principal

Supondo que você tenha seguido todos os passos neste guia até agora, você deve ter uma aplicação Laravel funcional e uma tabela de banco de dados chamada places, contendo alguns dados de amostra.

Agora, vamos editar a rota principal da aplicação para consultar o banco de dados e retornar o conteúdo à visualização da aplicação (view).

Abra o arquivo principal de rota, routes/web.php:

  • nano routes/web.php

Este arquivo vem por padrão com o seguinte conteúdo:

routes/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');
});

As rotas são definidas dentro deste arquivo usando o método estático Route::get, que recebe um caminho e uma função de retorno como argumentos.

O código a seguir substitui a função de retorno da rota principal. Ela faz 2 consultas no banco de dados usando a flag visited para filtrar os resultados. Ela retorna os resultados para uma visualização chamada travellist, que vamos criar a seguir. Copie este conteúdo para seu arquivo routes/web.php substituindo o código que já está lá:

routes/web.php
<?php

use Illuminate\Support\Facades\DB;

Route::get('/', function () {
  $visited = DB::select('select * from places where visited = ?', [1]); 
  $togo = DB::select('select * from places where visited = ?', [0]);

  return view('travellist', ['visited' => $visited, 'togo' => $togo ] );
});

Salve e feche o arquivo quando terminar de editar. Agora, vamos criar a visualização que irá renderizar os resultados do banco de dados para o usuário. Crie um novo arquivo de visualização dentro de resources/views:

  • nano resources/views/travellist.blade.php

O modelo a seguir cria duas listas de lugares baseadas nas variáveis visited e togo Copie este conteúdo para seu novo arquivo de visualização:

resources/views/travellist/blade.php
<html>
<head>
    <title>Travel List</title>
</head>

<body>
    <h1>My Travel Bucket List</h1>
    <h2>Places I'd Like to Visit</h2>
    <ul>
      @foreach ($togo as $newplace)
        <li>{{ $newplace->name }}</li>
      @endforeach
    </ul>

    <h2>Places I've Already Been To</h2>
    <ul>
          @foreach ($visited as $place)
                <li>{{ $place->name }}</li>
          @endforeach
    </ul>
</body>
</html>

Salve e feche o arquivo quando terminar. Agora, vá para seu navegador e recarregue a aplicação. Você verá uma página como esta:

Demo do aplicativo Laravel

Você tem agora uma aplicação Laravel funcional extraindo conteúdo de um banco de dados MySQL.

Conclusão

Neste tutorial, você configurou uma nova aplicação Laravel sobre uma pilha LEMP (Linux, Nginx, MySQL e PHP), em execução em um servidor Ubuntu 20.04. Você também personalizou sua rota padrão para consultar o conteúdo no banco de dados e exibir os resultados em uma visualização personalizada.

A partir daqui, você pode criar novas rotas e visualizações para qualquer página adicional que sua aplicação precisar. Verifique a documentação oficial do Laravel para obter mais informações sobre rotas, visualizações e suporte a banco de dados. Se você estiver fazendo o deploy em produção, você também deve verificar a seção sobre otimização para algumas maneiras diferentes de melhorar o desempenho da sua aplicação.

0 Comments

Creative Commons License