- O que você vai precisar antes de começar
- Passo 1: Atualizar o servidor e criar um usuário de deploy
- Passo 2: Instalar o Nginx
- Passo 3: Instalar o PHP 8.3 com as extensões necessárias para o Laravel
- Passo 4: Instalar o Composer
- Passo 5: Instalar o MySQL (ou MariaDB)
- Passo 6: Fazer o deploy do projeto Laravel
- Passo 7: Configurar o Nginx para o Laravel
- Passo 8: Instalar SSL gratuito com Certbot
- Passo 9: Otimizar o Laravel para produção
- Passo 10: Configurar o scheduler do Laravel
- Checklist final antes de ir ao ar
- Por que VPS faz sentido para Laravel
- FAQs
Fazer o deploy de uma aplicação Laravel em hospedagem compartilhada é pedir problema. Limite de memória, PHP desatualizado, sem acesso root, sem controle nenhum sobre o php.ini. Quando o projeto começa a crescer, o ambiente trava antes dele.
Um VPS muda isso completamente. Você controla o servidor, escolhe a versão do PHP, configura o Nginx do jeito que precisa e ainda sobe SSL gratuito com Certbot. Este guia cobre o processo inteiro — do servidor zerado até a aplicação Laravel rodando em produção com HTTPS.
O que você vai precisar antes de começar
- Um VPS com Ubuntu 22.04 LTS (recomendado)
- Acesso SSH root ou usuário com
sudo - Um domínio apontando para o IP do servidor
- Composer instalado localmente (para enviar o projeto) ou acesso ao Git no servidor
Se você ainda está escolhendo onde hospedar, a Napoleon oferece VPS com NVMe SSD em datacenters no Brasil e nos EUA — o que faz diferença real na latência para usuários brasileiros e nos tempos de resposta do banco de dados.
Passo 1: Atualizar o servidor e criar um usuário de deploy
Nunca rode sua aplicação como root. Crie um usuário dedicado logo de cara.
apt update && apt upgrade -y
adduser deploy
usermod -aG sudo deploy
Copie sua chave SSH para o novo usuário:
rsync --archive --chown=deploy:deploy ~/.ssh /home/deploy
A partir daqui, trabalhe como deploy.
Passo 2: Instalar o Nginx
sudo apt install nginx -y
sudo systemctl enable nginx
sudo systemctl start nginx
Confirme que está rodando:
sudo systemctl status nginx
Passo 3: Instalar o PHP 8.3 com as extensões necessárias para o Laravel
O repositório padrão do Ubuntu pode não ter a versão mais recente do PHP. Use o PPA do Ondřej:
sudo apt install software-properties-common -y
sudo add-apt-repository ppa:ondrej/php -y
sudo apt update
sudo apt install php8.3 php8.3-fpm php8.3-mbstring php8.3-xml php8.3-bcmath \
php8.3-curl php8.3-zip php8.3-mysql php8.3-redis php8.3-intl -y
Confirme a versão:
php -v
Passo 4: Instalar o Composer
curl -sS https://getcomposer.org/installer | php
sudo mv composer.phar /usr/local/bin/composer
composer --version
Passo 5: Instalar o MySQL (ou MariaDB)
sudo apt install mysql-server -y
sudo mysql_secure_installation
Crie o banco e o usuário da aplicação:
sudo mysql -u root -p
CREATE DATABASE laravel_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'laravel_user'@'localhost' IDENTIFIED BY 'senha_forte_aqui';
GRANT ALL PRIVILEGES ON laravel_db.* TO 'laravel_user'@'localhost';
FLUSH PRIVILEGES;
EXIT;
Passo 6: Fazer o deploy do projeto Laravel
Opção A: via Git (recomendado para produção)
cd /var/www
sudo git clone https://github.com/seu-usuario/seu-projeto.git laravel
sudo chown -R deploy:www-data /var/www/laravel
Opção B: via SCP ou rsync
rsync -avz ./meu-projeto/ deploy@seu-ip:/var/www/laravel/
Com os arquivos no lugar:
cd /var/www/laravel
composer install --no-dev --optimize-autoloader
cp .env.example .env
php artisan key:generate
Edite o .env com as credenciais do banco:
DB_DATABASE=laravel_db
DB_USERNAME=laravel_user
DB_PASSWORD=senha_forte_aqui
Execute as migrations:
php artisan migrate --force
Ajuste as permissões de storage e bootstrap/cache:
sudo chown -R www-data:www-data /var/www/laravel/storage
sudo chown -R www-data:www-data /var/www/laravel/bootstrap/cache
sudo chmod -R 775 /var/www/laravel/storage
sudo chmod -R 775 /var/www/laravel/bootstrap/cache
Passo 7: Configurar o Nginx para o Laravel
Crie o arquivo de configuração do site:
sudo nano /etc/nginx/sites-available/laravel
Cole o bloco abaixo, substituindo seudominio.com.br pelo seu domínio:
server {
listen 80;
server_name seudominio.com.br www.seudominio.com.br;
root /var/www/laravel/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;
}
}
Ative o site e teste a configuração:
sudo ln -s /etc/nginx/sites-available/laravel /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
Passo 8: Instalar SSL gratuito com Certbot
sudo apt install certbot python3-certbot-nginx -y
sudo certbot --nginx -d seudominio.com.br -d www.seudominio.com.br
O Certbot detecta o bloco server do Nginx automaticamente, emite o certificado Let's Encrypt e configura o redirect de HTTP para HTTPS. Ao final, o arquivo de configuração já sai atualizado com as diretivas SSL.
Teste a renovação automática:
sudo certbot renew --dry-run
O cron é configurado pelo próprio Certbot na instalação. Não há nada para fazer manualmente.
Passo 9: Otimizar o Laravel para produção
Com o ambiente pronto, rode os comandos de otimização:
php artisan config:cache
php artisan route:cache
php artisan view:cache
php artisan event:cache
Se o projeto usa filas, configure o Supervisor para manter o worker ativo:
sudo apt install supervisor -y
sudo nano /etc/supervisor/conf.d/laravel-worker.conf
[program:laravel-worker]
process_name=%(program_name)s_%(process_num)02d
command=php /var/www/laravel/artisan queue:work --sleep=3 --tries=3 --max-time=3600
autostart=true
autorestart=true
stopasgroup=true
killasgroup=true
user=www-data
numprocs=2
redirect_stderr=true
stdout_logfile=/var/www/laravel/storage/logs/worker.log
stopwaitsecs=3600
sudo supervisorctl reread
sudo supervisorctl update
sudo supervisorctl start laravel-worker:*
Passo 10: Configurar o scheduler do Laravel
Adicione uma entrada no crontab do usuário www-data:
sudo crontab -u www-data -e
* * * * * cd /var/www/laravel && php artisan schedule:run >> /dev/null 2>&1
Checklist final antes de ir ao ar
Antes de apontar o domínio definitivo ou avisar o cliente, confirme cada item:
-
APP_ENV=productioneAPP_DEBUG=falseno.env -
APP_URLcom o domínio correto e HTTPS - Permissões de
storage/ebootstrap/cache/corretas - SSL ativo e redirect HTTP → HTTPS funcionando
- Migrations executadas sem erros
- Cache de configuração, rotas e views gerado
- Worker de filas rodando (se aplicável)
- Scheduler configurado no crontab
- Logs gravando em
storage/logs/laravel.log
Por que VPS faz sentido para Laravel
Hospedagem compartilhada impõe limites que o Laravel sente rápido: memória por processo, tempo máximo de execução, restrições no php.ini, sem acesso ao Supervisor para filas. Em um VPS, esses limites somem e você passa a controlar a stack inteira.
Para agências e freelancers brasileiros gerenciando vários projetos ao mesmo tempo, um VPS bem configurado também é muito mais previsível do que dividir recursos com centenas de outros sites no mesmo servidor físico.
FAQs
Qual versão do PHP devo usar com Laravel em 2026?
O Laravel 11 e o Laravel 12 exigem PHP 8.2 no mínimo. PHP 8.3 é a versão estável mais recente e a recomendada para novos deploys em produção.
Posso usar Apache em vez de Nginx?
Sim. O Laravel funciona com Apache usando o módulo mod_rewrite e um .htaccess na pasta public/. O Nginx costuma ser preferido em VPS porque consome menos memória e lida melhor com conexões simultâneas.
O SSL do Let's Encrypt expira. Como garantir a renovação automática?
O Certbot instala um timer do systemd (ou cron) automaticamente durante a configuração. Teste com sudo certbot renew --dry-run — se o comando retornar sem erros, está tudo certo.
Como atualizo o projeto sem derrubar o site?
Via Git: git pull, composer install --no-dev, php artisan migrate --force, e depois reconstrua os caches com php artisan config:cache, route:cache e view:cache. O site permanece disponível durante todo o processo.
O que é o php-fpm e por que preciso dele com Nginx?
O Nginx não processa PHP nativamente. O php-fpm (FastCGI Process Manager) é o serviço responsável por executar os scripts PHP e devolver a resposta ao Nginx via socket Unix. A linha fastcgi_pass unix:/var/run/php/php8.3-fpm.sock no bloco do Nginx é exatamente essa ponte.
Preciso de root para fazer esse deploy?
Você precisa de sudo para instalar pacotes, configurar o Nginx e o Certbot. Para o deploy do código em si, um usuário sem privilégios elevados — como o deploy criado no Passo 1 — é suficiente e mais seguro.
Qual o tamanho de VPS recomendado para uma aplicação Laravel em produção?
Para um projeto de porte médio com banco de dados local, 2 vCPUs e 2 GB de RAM são um ponto de partida razoável. Projetos com filas pesadas, cache Redis e múltiplos workers vão precisar de mais memória. O ideal é monitorar o uso real e escalar conforme a demanda cresce.
Com o ambiente configurado, sua aplicação Laravel roda em infraestrutura que você controla — PHP na versão certa, HTTPS ativo, filas funcionando sem depender de gambiarras de hospedagem compartilhada. Se você ainda está avaliando onde hospedar seu próximo projeto, conheça as soluções de VPS da Napoleon com NVMe SSD e datacenters no Brasil.



