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

Alternar entre múltiplas versões no PHP

Alternar entre múltiplas versões no PHP

Então problemas do dia-a-dia se por alguma motivo qualquer você prefere utilizar ambientes de desenvolvimento locais ao invés de containers... Leia mais

Entendendo as Diferenças Entre Programação Orientada a Objetos e Funcional: Java vs. Elixir

Entendendo as Diferenças Entre Programação Orientada a Objetos e Funcional: Java vs. Elixir

A escolha entre programação orientada a objetos (OOP) e programação funcional (FP) é mais do que uma preferência de estilo;... Leia mais

Como instalar o RabbitVCS no ubuntu 18.04

Como instalar o RabbitVCS no ubuntu 18.04

Caso você sendo usuário Linux e precise instalar um gerenciador de SVN temos como alternativa o RABBITVCS. São apenas dois... Leia mais

Como atualizar multiplos registros com o método whereIn no Laravel 9 ?

Como atualizar multiplos registros com o método whereIn no Laravel 9 ?

O Laravel 9 é um framework PHP moderno e poderoso que oferece muitas ferramentas úteis para desenvolvedores web. Uma das... Leia mais