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

Onde aprender React ?

Onde aprender React ?

Vamos lá! Em um dia qualquer estava eu a rolar o feed do Linked-In e um determinado post me chamou... Leia mais

Usando a Função ROW_NUMBER e Outras Funções para Gerar Resultados Sequenciais no PostgreSQL

Usando a Função ROW_NUMBER e Outras Funções para Gerar Resultados Sequenciais no PostgreSQL

Quando trabalhamos com bancos de dados, muitas vezes precisamos gerar números sequenciais para nossos resultados. Isso pode ser útil para... Leia mais

Converter Date Time String para data no formato YYYY-MM-DD

Converter Date Time String para data no formato YYYY-MM-DD

No post de hoje, vamos abordar uma necessidade comum em programação: como obter uma data no formato ANO-MÊS-DIA (YYYY-MM-DD) a... Leia mais

Usando o git cherry-pick no Git: Quando e Como Usar

Usando o git cherry-pick no Git: Quando e Como Usar

O git cherry-pick é um dos comandos mais poderosos e versáteis no Git, mas muitas vezes é mal compreendido ou... Leia mais