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.
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
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.
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.