Tutoriais

Deploy de aplicações Laravel em VPS

Deploy de aplicações Laravel em VPS

O Laravel é um dos frameworks PHP mais populares do mundo. Neste guia, você vai colocar uma aplicação Laravel em produção com Nginx, PHP-FPM, filas, scheduler e as otimizações recomendadas.

1. Stack necessária

sudo apt update
sudo apt install nginx mariadb-server redis-server unzip git -y
sudo apt install php-fpm php-cli php-mysql php-mbstring php-xml php-curl php-zip php-bcmath php-intl php-redis -y

Verifique se a versão do PHP atende ao requisito da versão do Laravel que você usa (php -v).

Composer

curl -sS https://getcomposer.org/installer | php
sudo mv composer.phar /usr/local/bin/composer

2. Banco de dados

CREATE DATABASE laravel CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'laravel'@'localhost' IDENTIFIED BY 'SENHA_FORTE';
GRANT ALL PRIVILEGES ON laravel.* TO 'laravel'@'localhost';

3. Código

sudo mkdir -p /var/www/app && sudo chown $USER:www-data /var/www/app
git clone https://github.com/sua-empresa/app.git /var/www/app
cd /var/www/app
composer install --no-dev --optimize-autoloader
cp .env.example .env
php artisan key:generate

Edite o .env:

APP_ENV=production
APP_DEBUG=false
APP_URL=https://app.seudominio.com.br

DB_CONNECTION=mysql
DB_DATABASE=laravel
DB_USERNAME=laravel
DB_PASSWORD=SENHA_FORTE

CACHE_STORE=redis
SESSION_DRIVER=redis
QUEUE_CONNECTION=redis

Os nomes de algumas variáveis mudam entre versões do Laravel (ex.: CACHE_DRIVER em versões anteriores). Confira o .env.example do seu projeto.

Permissões

sudo chown -R $USER:www-data storage bootstrap/cache
sudo chmod -R 775 storage bootstrap/cache

Migrações e link de storage

php artisan migrate --force
php artisan storage:link

4. Nginx

/etc/nginx/sites-available/app:

server {
    listen 80;
    server_name app.seudominio.com.br;
    root /var/www/app/public;
    index index.php;

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

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location ~ \.php$ {
        fastcgi_pass unix:/run/php/php8.3-fpm.sock;   # ajuste à sua versão
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        include fastcgi_params;
    }

    location ~ /\.(?!well-known) {
        deny all;
    }
}
sudo ln -s /etc/nginx/sites-available/app /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx
sudo certbot --nginx -d app.seudominio.com.br

5. Otimizações de produção

php artisan config:cache
php artisan route:cache
php artisan view:cache
php artisan event:cache

Ative e ajuste o OPcache no PHP-FPM.

6. Scheduler

No crontab do usuário da aplicação:

* * * * * cd /var/www/app && php artisan schedule:run >> /dev/null 2>&1

7. Filas com Supervisor

sudo apt install supervisor -y

/etc/supervisor/conf.d/laravel-worker.conf:

[program:laravel-worker]
process_name=%(program_name)s_%(process_num)02d
command=php /var/www/app/artisan queue:work redis --sleep=3 --tries=3 --max-time=3600
autostart=true
autorestart=true
user=www-data
numprocs=2
redirect_stderr=true
stdout_logfile=/var/www/app/storage/logs/worker.log
stopwaitsecs=3600
sudo supervisorctl reread
sudo supervisorctl update
sudo supervisorctl status

Se usa Laravel Horizon, configure o Supervisor para rodar php artisan horizon em vez de queue:work.

8. Script de deploy

#!/bin/bash
set -e
cd /var/www/app
php artisan down
git pull origin main
composer install --no-dev --optimize-autoloader
php artisan migrate --force
php artisan config:cache
php artisan route:cache
php artisan view:cache
php artisan queue:restart
php artisan up

Para deploys sem nenhum downtime, ferramentas como Deployer usam releases em pastas separadas com troca por link simbólico.

Conclusão

Com Nginx, PHP-FPM, Redis, filas e cache de configuração, seu Laravel fica pronto para produção. Faça o deploy em um VPS-NVME-BR da VittHost, com NVMe e servidores no Brasil.Use o cupom SP-VITT20 e ganhe 20% de desconto na primeira fatura enquanto a promoção estiver ativa.

Compartilhar:

Pronto para hospedar seu próximo projeto?

VPS com painel pré-instalado em 1 clique. Ativação imediata.

Ver planos VPS