Developer Advocate
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.
Para completar este guia, você precisará primeiro realizar as seguintes tarefas em seu servidor Ubuntu 20.04.
sudo
e habilitar o ufw
. Para configurar isso, você pode seguir nosso guia Initial Server Setup with Ubuntu 20.04.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.
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.
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:
OutputInstalling 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:
OutputLaravel 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.
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
.
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.
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:
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:
- Outputnginx: 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:
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.
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:
<?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á:
<?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:
<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:
Você tem agora uma aplicação Laravel funcional extraindo conteúdo de um banco de dados MySQL.
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.
Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.
This textbox defaults to using Markdown to format your answer.
You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!
502 Bad Gateway