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

Como Unir Múltiplos Arquivos PDF em um Único Documento Usando Python

Como Unir Múltiplos Arquivos PDF em um Único Documento Usando Python

No dia a dia, muitas vezes nos deparamos com a necessidade de unir vários arquivos PDF em um único documento.... Leia mais

Olá! Mundo…(mais um blog de um programador no ar)

Olá! Mundo…(mais um blog de um programador no ar)

Como todo mundo na programação já passou por este clichê, aqui não poderia ser diferente então o primeiro post desse... Leia mais

Um resumo sobre o WSL2

Um resumo sobre o WSL2

O WSL 2 (Windows Subsystem for Linux) representa um grande avanço na integração entre o Windows e o Linux, permitindo... Leia mais

Jogo da Velha com HTML, CSS e JavaScript

Jogo da Velha com HTML, CSS e JavaScript

Vamos hoje desenvolver uma atividade que é comum em alguns testes de programação onde iremos desenvolver um simples jogo da... Leia mais