PauloRB.dev

Desenvolvedor de Software

Guia de Deploy de Aplicação Laravel com Nginx em uma VPS com Ubuntu e HTTPS em um VPS | PauloRB.dev Guia de Deploy de Aplicação Laravel com Nginx em uma VPS com Ubuntu e HTTPS em um VPS – PauloRB.dev
Guia de Deploy de Aplicação Laravel com Nginx em uma VPS com Ubuntu e HTTPS em um VPS

Guia de Deploy de Aplicação Laravel com Nginx em uma VPS com Ubuntu e HTTPS em um VPS

Neste post, você aprenderá a fazer o deploy de uma aplicação Laravel em uma VPS rodando Ubuntu com o servidor web Nginx e configurar HTTPS utilizando o Certbot. Além disso, será abordado como configurar um banco de dados MySQL na VPS.

Preparando o Servidor VPS

Atualizando os pacotes do sistema:

sudo apt update && sudo apt upgrade -y

Instalando o Nginx:

sudo apt install nginx -y

Instalando o PHP e extensões necessárias:


sudo apt install php8.3-cli
sudo apt install php8.3-ctype php8.3-curl php8.3-dom php8.3-fileinfo php8.3-mbstring php8.3-opcache php8.3-pdo php8.3-tokenizer php8.3-xml php8.3-fpm php8.3-mysql php8.3-zip unzip
    

Instalando o Composer:


cd ~
curl -sS https://getcomposer.org/installer -o /tmp/composer-setup.php
HASH=`curl -sS https://composer.github.io/installer.sig`
echo $HASH
php -r "if (hash_file('SHA384', '/tmp/composer-setup.php') === '$HASH') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
sudo php /tmp/composer-setup.php --install-dir=/usr/local/bin --filename=composer
composer
    

Instalando o MySQL:


sudo systemctl enable mysql
sudo systemctl enable nginx
sudo systemctl enable php8.3-fpm

sudo systemctl status mysql
sudo systemctl status nginx
sudo systemctl status php8.3-fpm
    

Observação

Se sua aplicação Laravel utiliza o Node.js e npm, você precisará instalá-los também:


sudo apt install nodejs npm -y
node -v
npm -v
    

Configurando o Projeto Laravel

Clonando o repositório da aplicação:


cd /var/www
sudo git clone https://github.com/usuario/exemplo.git
cd exemplo
    

Instalando as dependências do Laravel:

sudo composer install --optimize-autoloader --no-dev

Copiando o arquivo de exemplo de ambiente:

sudo cp .env.example .env

Gerando a chave da aplicação Laravel:

sudo php artisan key:generate

Configurando permissões das pastas:


sudo chmod -R 777 storage
sudo chmod -R 777 bootstrap
sudo chmod -R 777 vendor
    

Configurando o Nginx:

Criando um arquivo de configuração:

sudo nano /etc/nginx/sites-available/exemplo

Conteúdo do arquivo de configuração:


server {
    listen 80;
    listen [::]:80;
    server_name example.com;
    root /var/www/example/public;

    add_header X-Frame-Options "SAMEORIGIN";
    add_header X-Content-Type-Options "nosniff";

    index 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/php8.3-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        include fastcgi_params;
    }

    location ~ /\.(?!well-known).* {
        deny all;
    }
}
    

Ativando a configuração do site:

sudo ln -s /etc/nginx/sites-available/exemplo /etc/nginx/sites-enabled/

Testando e reiniciando o Nginx:


sudo nginx -t
sudo systemctl restart nginx
    

Configurando o Banco de Dados

Acessando o MySQL:

sudo mysql -u root -p

Criando o banco de dados e usuário:


CREATE DATABASE nome_do_banco_de_dados;
CREATE USER 'usuario'@'localhost' IDENTIFIED BY 'senha';
GRANT ALL PRIVILEGES ON nome_do_banco_de_dados.* TO 'usuario'@'localhost';
FLUSH PRIVILEGES;
EXIT;
    

Executando Migrações


cd /var/www/exemplo
sudo php artisan migrate
    

Configurando HTTPS com Certbot

Instalando Certbot:


sudo apt update
sudo apt install snapd
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot
    

Obtenha o certificado SSL:

sudo certbot --nginx

Renovando certificados:

sudo certbot renew --dry-run

Sua aplicação Laravel agora está configurada com HTTPS e pode ser acessada pelo domínio configurado.

Mais Posts

Laravel: Como visualizar a SQL com os valores preenchidos para facilitar o debug

Laravel: Como visualizar a SQL com os valores preenchidos para facilitar o debug

No dia a dia do desenvolvimento com Laravel, é comum precisarmos inspecionar uma query SQL gerada dinamicamente. A primeira ferramenta... Leia mais

Entendendo o Conceito de Estado no React

Entendendo o Conceito de Estado no React

Em React, o estado refere-se a uma estrutura de dados que determina o comportamento do componente e como ele será... Leia mais

Como Atualizar Valores de Chaves em Campos JSON no PostgreSQL

Como Atualizar Valores de Chaves em Campos JSON no PostgreSQL

Atualizar valores em um campo JSON no PostgreSQL é uma operação comum ao trabalhar com dados semi-estruturados. Isso é especialmente... Leia mais

Como instalar o Docker no Linux(Ubuntu)

Como instalar o Docker no Linux(Ubuntu)

Para instalar o docker no ubuntu basta seguir os passos abaixo: Abra o terminal do Linux copie e cole os... Leia mais