cloud_upload 20. Deploy e Produção - Colocando sua Aplicação no Ar

Chegou a hora de colocar no ar! Esta é a seção final, onde você aprende a fazer deploy profissional da sua aplicação. Vamos cobrir: servidor (VPS, cloud), HTTPS, variáveis de ambiente, backups automáticos, monitoramento e estratégias de deploy sem downtime.

celebration
Parabéns! Você chegou à seção final! Após concluir este guia, terá uma aplicação PHP + React pronta para produção com pagamentos, segurança e performance otimizada.

dns Escolhendo o Servidor

euro Shared Hosting

R$ 20-50/mês

  • ✅ Barato
  • ✅ Fácil de usar
  • ❌ Recursos limitados
  • ❌ Sem controle total
  • Para: Projetos pequenos

computer VPS (Recomendado)

R$ 40-200/mês

  • ✅ Controle total
  • ✅ Escalável
  • ✅ Bom custo-benefício
  • ❌ Requer conhecimento técnico
  • Para: Aplicações profissionais

Provedores: DigitalOcean, Vultr, Linode, AWS Lightsail

cloud Cloud (AWS/Azure)

R$ 100-1000+/mês

  • ✅ Alta disponibilidade
  • ✅ Auto-scaling
  • ✅ Serviços gerenciados
  • ❌ Complexo
  • ❌ Caro
  • Para: Empresas grandes

settings Configuração do Servidor (Ubuntu 22.04)

# 1. Atualizar sistema
sudo apt update && sudo apt upgrade -y

# 2. Instalar Nginx
sudo apt install nginx -y
sudo systemctl enable nginx
sudo systemctl start nginx

# 3. Instalar PHP 8.2
sudo apt install software-properties-common -y
sudo add-apt-repository ppa:ondrej/php -y
sudo apt update
sudo apt install php8.2-fpm php8.2-mysql php8.2-mbstring php8.2-xml php8.2-curl php8.2-zip php8.2-gd php8.2-redis -y

# 4. Instalar MySQL
sudo apt install mysql-server -y
sudo mysql_secure_installation

# 5. Instalar Redis
sudo apt install redis-server -y
sudo systemctl enable redis-server

# 6. Instalar Node.js 18
curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -
sudo apt install nodejs -y

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

# 8. Criar usuário para deploy
sudo adduser deploy
sudo usermod -aG www-data deploy

# 9. Configurar firewall
sudo ufw allow 22/tcp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable

code Configuração do Nginx

# /etc/nginx/sites-available/seusite.com
server {
    listen 80;
    server_name seusite.com www.seusite.com;
    
    root /var/www/seusite.com/frontend/dist;
    index index.html;
    
    # Logs
    access_log /var/log/nginx/seusite-access.log;
    error_log /var/log/nginx/seusite-error.log;
    
    # Frontend (React)
    location / {
        try_files $uri $uri/ /index.html;
    }
    
    # Backend API (PHP)
    location /api {
        alias /var/www/seusite.com/backend/api;
        
        location ~ \.php$ {
            include snippets/fastcgi-php.conf;
            fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;
            fastcgi_param SCRIPT_FILENAME $request_filename;
        }
    }
    
    # Segurança
    add_header X-Frame-Options "SAMEORIGIN" always;
    add_header X-Content-Type-Options "nosniff" always;
    add_header X-XSS-Protection "1; mode=block" always;
    
    # Cache de assets
    location ~* \.(jpg|jpeg|png|gif|ico|css|js|svg|woff|woff2)$ {
        expires 1y;
        add_header Cache-Control "public, immutable";
    }
    
    # Bloquear acesso a arquivos sensíveis
    location ~ /\. {
        deny all;
    }
    
    location ~ /\.env {
        deny all;
    }
}

# Habilitar site:
sudo ln -s /etc/nginx/sites-available/seusite.com /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx

lock Configurar HTTPS (Let's Encrypt)

# 1. Instalar Certbot
sudo apt install certbot python3-certbot-nginx -y

# 2. Obter certificado SSL (GRÁTIS!)
sudo certbot --nginx -d seusite.com -d www.seusite.com

# 3. Renovação automática (já vem configurada)
sudo certbot renew --dry-run

# Nginx agora terá configuração HTTPS automática:
server {
    listen 443 ssl http2;
    server_name seusite.com www.seusite.com;
    
    ssl_certificate /etc/letsencrypt/live/seusite.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/seusite.com/privkey.pem;
    
    # SSL configuration moderna
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256...';
    ssl_prefer_server_ciphers off;
    
    # ... resto da configuração
}

# Redirecionar HTTP para HTTPS
server {
    listen 80;
    server_name seusite.com www.seusite.com;
    return 301 https://$host$request_uri;
}

folder Estrutura de Diretórios em Produção

/var/www/seusite.com/
├── backend/
│   ├── api/
│   ├── config/
│   ├── services/
│   ├── middleware/
│   ├── vendor/
│   ├── storage/
│   │   └── uploads/
│   ├── .env (NÃO comitar no Git!)
│   └── composer.json
├── frontend/
│   ├── dist/          ← Build do React (nginx aponta aqui)
│   ├── src/
│   ├── package.json
│   └── vite.config.js
├── scripts/
│   ├── deploy.sh
│   └── backup.sh
└── logs/

# Permissões corretas:
sudo chown -R deploy:www-data /var/www/seusite.com
sudo chmod -R 755 /var/www/seusite.com
sudo chmod -R 775 /var/www/seusite.com/backend/storage

sync Script de Deploy Automatizado

#!/bin/bash
# scripts/deploy.sh

set -e

echo "🚀 Iniciando deploy..."

# Variáveis
APP_DIR="/var/www/seusite.com"
BACKUP_DIR="/var/backups/seusite"
DATE=$(date +%Y%m%d_%H%M%S)

# 1. Backup antes do deploy
echo "📦 Criando backup..."
mkdir -p $BACKUP_DIR
tar -czf $BACKUP_DIR/backup_$DATE.tar.gz $APP_DIR

# 2. Git pull (ou rsync/FTP)
echo "📥 Baixando código..."
cd $APP_DIR
git pull origin main

# 3. Backend - Instalar dependências
echo "🔧 Instalando dependências PHP..."
cd $APP_DIR/backend
composer install --no-dev --optimize-autoloader

# 4. Frontend - Build
echo "🎨 Build do frontend..."
cd $APP_DIR/frontend
npm ci
npm run build

# 5. Migrations (se houver)
echo "🗄️ Rodando migrations..."
cd $APP_DIR/backend
php artisan migrate --force

# 6. Limpar cache
echo "🧹 Limpando cache..."
php artisan cache:clear
php artisan config:cache

# 7. Reiniciar serviços
echo "🔄 Reiniciando serviços..."
sudo systemctl reload php8.2-fpm
sudo systemctl reload nginx

# 8. Verificar se está online
echo "✅ Verificando aplicação..."
HTTP_CODE=$(curl -o /dev/null -s -w "%{http_code}" https://seusite.com)

if [ $HTTP_CODE -eq 200 ]; then
    echo "✨ Deploy concluído com sucesso!"
else
    echo "❌ Erro: Site retornou código $HTTP_CODE"
    exit 1
fi

# 9. Notificar (opcional)
# curl -X POST https://api.telegram.org/bot/sendMessage \
#      -d chat_id= \
#      -d text="Deploy realizado com sucesso em $(date)"

echo "🎉 Tudo pronto!"

backup Backup Automático com Cron

#!/bin/bash
# scripts/backup.sh

BACKUP_DIR="/var/backups/seusite"
APP_DIR="/var/www/seusite.com"
DATE=$(date +%Y%m%d_%H%M%S)
DB_NAME="seusite_db"
DB_USER="root"
DB_PASS="sua_senha"

# Criar diretório de backup
mkdir -p $BACKUP_DIR

# 1. Backup do banco de dados
echo "📊 Backup do banco de dados..."
mysqldump -u$DB_USER -p$DB_PASS $DB_NAME > $BACKUP_DIR/db_$DATE.sql

# 2. Backup dos arquivos
echo "📁 Backup dos arquivos..."
tar -czf $BACKUP_DIR/files_$DATE.tar.gz $APP_DIR/backend/storage/uploads

# 3. Upload para S3 (opcional mas recomendado!)
# aws s3 cp $BACKUP_DIR/db_$DATE.sql s3://seu-bucket/backups/
# aws s3 cp $BACKUP_DIR/files_$DATE.tar.gz s3://seu-bucket/backups/

# 4. Remover backups antigos (manter últimos 7 dias)
echo "🧹 Removendo backups antigos..."
find $BACKUP_DIR -name "*.sql" -mtime +7 -delete
find $BACKUP_DIR -name "*.tar.gz" -mtime +7 -delete

echo "✅ Backup concluído: $DATE"

# Configurar cron (rodar todo dia às 3h):
# sudo crontab -e
# 0 3 * * * /var/www/seusite.com/scripts/backup.sh >> /var/log/backup.log 2>&1

monitor_heart Monitoramento em Produção

visibility Uptime Monitoring

  • UptimeRobot: Grátis, alerta se site cair
  • Pingdom: Monitoramento avançado
  • StatusCake: Alternativa gratuita

bug_report Error Tracking

  • Sentry: Rastreamento de erros (backend + frontend)
  • Rollbar: Alternativa ao Sentry
  • LogRocket: Session replay + logs

speed Performance

  • Google Analytics: Métricas de uso
  • New Relic: APM (Application Performance)
  • DataDog: Monitoramento completo

security Segurança

  • Cloudflare: DDoS protection + CDN
  • Sucuri: WAF (Web Application Firewall)
  • Fail2ban: Bloqueia IPs maliciosos

checklist Checklist Final de Deploy

✅ Antes do Deploy

  • Todos os testes passando
  • .env configurado corretamente
  • Banco de dados criado
  • DNS apontando para servidor
  • Backups configurados
  • Monitoramento ativo
  • HTTPS configurado

✅ Após Deploy

  • Verificar se site carrega
  • Testar login/registro
  • Testar pagamento (sandbox)
  • Verificar logs de erro
  • Testar em mobile
  • Verificar performance (Lighthouse)
  • Configurar alertas de monitoramento
workspace_premium

Da Teoria à Prática: Sua Ideia Merece uma Estrutura de Elite.

Você acabou de ver como unimos PHP + React para criar sistemas de alta performance. Este é o padrão de excelência da A&7 Tecnologia.

Arquitetura

Engenharia de Software. Criamos uma separação rigorosa entre Frontend e Backend para garantir escalabilidade infinita.

Segurança

Blindagem de Dados. Implementamos protocolos JWT, proteção contra ataques maliciosos e auditoria constante de logs.

Operação

Alta Disponibilidade. Deploy automatizado e monitoramento em tempo real para que sua aplicação nunca pare.

check_circle
Sistemas de Permissão (RBAC) Avançados
check_circle
Integração Nativa com Pix e Stripe
check_circle
Uploads Seguros e Otimização de Imagens
check_circle
Performance com Cache de Última Geração

Vamos construir o seu próximo grande projeto juntos?

Este é um artigo produzido pela A&7 Tecnologia — Soluções Digitais. Transformamos complexidade técnica em resultados de negócio.