Operação
Guia de Deploy - AgrSis MVP
Guia de Deploy - AgrSis MVP
Visão Geral
Este documento descreve o processo de deploy do sistema AgrSis para a VPS de desenvolvimento/produção usando Docker, Portainer e Nginx Proxy Manager.
Arquitetura de Deploy
VPS (dev.agrsis.com)
├── Portainer (Gerenciador de Containers)
│ └── Interface: https://dev.agrsis.com:9443
├── Nginx Proxy Manager (Gerenciador de Domínios)
│ └── Interface: http://dev.agrsis.com:81
├── AgrSis Application Stack
│ ├── PostgreSQL (Database)
│ ├── Redis (Cache)
│ ├── API Laravel
│ ├── Frontend Produtor
│ ├── Frontend Fornecedor
│ ├── Queue Worker
│ └── Scheduler
└── Nginx Sistema (porta 8080/8443 - aplicação existente)
Pré-requisitos
Na VPS:
- Ubuntu 22.04 LTS
- Docker e Docker Compose instalados
- Portas disponíveis: 80, 81, 443, 9000, 9443
- Mínimo 4GB RAM e 20GB disco
Local:
- SSH configurado para
root@dev.agrsis.com - Make instalado
- Projeto clonado em
/Users/gustavocarneiro/EMPRESA/web/agrsis/agrsis-v1
Configuração Inicial da VPS
1. Instalação Automática
Execute o comando para configurar toda a infraestrutura:
make deploy-setup
Isso irá:
- Instalar Docker e Docker Compose (se necessário)
- Instalar Portainer para gerenciamento de containers
- Instalar Nginx Proxy Manager para gerenciamento de domínios
- Criar rede Docker para comunicação entre serviços
2. Configuração Manual (se necessário)
Se preferir fazer manualmente:
# SSH na VPS
ssh root@dev.agrsis.com
# Executar scripts de instalação
bash /tmp/install-docker.sh
bash /tmp/install-portainer-npm.sh
Acessos e Credenciais
Portainer
- URL: https://dev.agrsis.com:9443
- Primeiro acesso: Criar usuário admin
- Função: Gerenciar containers Docker via interface web
Nginx Proxy Manager
- URL: http://dev.agrsis.com:81
- Email padrão: admin@example.com
- Senha padrão: changeme
- ⚠️ IMPORTANTE: Altere a senha no primeiro acesso!
Deploy da Aplicação
1. Configurar Variáveis de Ambiente
Edite o arquivo .env.production:
# Editar localmente
vim agrsis-v1/.env.production
# Configurar:
# - DB_PASSWORD (senha forte)
# - APP_KEY (gerar com: php artisan key:generate)
# - JWT_SECRET
# - APIs externas (ORS, HubDev, WhatsApp, Banco Inter)
2. Deploy Automático
Execute o comando de deploy:
make deploy
Isso irá:
- Fazer build das imagens Docker localmente
- Sincronizar código com a VPS
- Criar containers na VPS
- Executar migrations
- Configurar cache
3. Verificar Status
# Ver status dos containers
make deploy-status
# Ver logs em tempo real
make deploy-logs
# Reiniciar serviços
make deploy-restart
Configuração de Domínios no NPM
1. Acessar NPM
- Acesse: http://dev.agrsis.com:81
- Faça login com as credenciais
2. Adicionar Proxy Hosts
Configure os seguintes proxy hosts:
API Backend
- Domain: api.agrsis.com
- Forward Host: agrsis_api
- Forward Port: 8000
- Block Common Exploits: ✓
- Websockets Support: ✓ (se usar websockets)
- SSL: Solicitar Let's Encrypt
- Force SSL: ✓
- HTTP/2 Support: ✓
- HSTS Enabled: ✓
Frontend Producer (Produtor)
- Domain: producer.agrsis.com
- Forward Host: agrsis_producer
- Forward Port: 3000
- Block Common Exploits: ✓
- SSL: Solicitar Let's Encrypt
- Force SSL: ✓
- HTTP/2 Support: ✓
- HSTS Enabled: ✓
Frontend Supplier (Fornecedor)
- Domain: supplier.agrsis.com
- Forward Host: agrsis_supplier
- Forward Port: 3000
- Block Common Exploits: ✓
- SSL: Solicitar Let's Encrypt
- Force SSL: ✓
- HTTP/2 Support: ✓
- HSTS Enabled: ✓
3. Configurações Importantes
- Todos os domínios usam HTTPS (porta 443)
- Redirecionamento automático de HTTP (80) para HTTPS (443)
- Certificados SSL gratuitos via Let's Encrypt
- Renovação automática dos certificados
- Containers internos (postgres, redis, queue) não são expostos publicamente
Comandos Úteis
Deploy Individual de Serviços
# Deploy completo
make deploy # Deploy de todos os serviços
# Deploy individual
make deploy-api # Deploy apenas da API
make deploy-producer # Deploy apenas do Frontend Producer
make deploy-supplier # Deploy apenas do Frontend Supplier
make deploy-database # Reiniciar banco de dados
make deploy-redis # Reiniciar Redis
make deploy-workers # Deploy dos workers (queue + scheduler)
# Menu interativo
make deploy-menu # Menu interativo para escolher o que fazer deploy
Logs e Monitoramento
# Logs
make deploy-logs # Ver logs de todos os serviços
make deploy-logs-api # Ver logs apenas da API
make deploy-logs-producer # Ver logs do Frontend Producer
make deploy-logs-supplier # Ver logs do Frontend Supplier
# Status
make deploy-status # Ver status de todos os containers
Restart de Serviços
# Restart
make deploy-restart # Reiniciar todos os serviços
make deploy-restart-api # Reiniciar apenas API
make deploy-restart-producer # Reiniciar apenas Producer
make deploy-restart-supplier # Reiniciar apenas Supplier
Shell e Comandos
# Shell
make deploy-shell # SSH na VPS
make deploy-shell-api # Shell no container da API
make deploy-shell-producer # Shell no container Producer
make deploy-shell-supplier # Shell no container Supplier
# Executar comandos
make deploy-exec CMD="php artisan migrate"
make deploy-exec CMD="php artisan cache:clear"
make deploy-exec CMD="php artisan queue:restart"
Comandos Docker na VPS
# SSH na VPS
ssh root@dev.agrsis.com
# Navegar para o projeto
cd /opt/agrsis
# Ver containers rodando
docker compose ps
# Ver logs
docker compose logs -f api
docker compose logs -f frontend-produtor
# Executar comandos no container
docker compose exec api php artisan migrate
docker compose exec api php artisan tinker
# Reiniciar serviços
docker compose restart
docker compose down && docker compose up -d
Troubleshooting
Problema: Porta já em uso
# Verificar qual processo está usando a porta
lsof -i :80
# Se for o nginx do sistema, já está configurado para 8080/8443
systemctl status nginx
Problema: Container não inicia
# Ver logs detalhados
docker compose logs container_name
# Reconstruir container
docker compose build --no-cache container_name
docker compose up -d container_name
Problema: Erro de permissão
# Ajustar permissões do storage
docker compose exec api chown -R www-data:www-data storage
docker compose exec api chmod -R 775 storage
Problema: Migration falha
# Verificar conexão com banco
docker compose exec api php artisan db:show
# Executar migration manualmente
docker compose exec api php artisan migrate --force
Backup e Restauração
Backup do Banco de Dados
# Na VPS
docker compose exec postgres pg_dump -U agrsis_user agrsis_db > backup_$(date +%Y%m%d).sql
Restaurar Banco de Dados
# Na VPS
docker compose exec -T postgres psql -U agrsis_user agrsis_db < backup.sql
Monitoramento
Via Portainer
- Acesse https://dev.agrsis.com:9443
- Selecione o endpoint local
- Visualize:
- Containers em execução
- Uso de recursos (CPU, RAM)
- Logs em tempo real
- Volumes e redes
Via Comandos
# Uso de recursos
docker stats
# Espaço em disco
docker system df
# Logs do sistema
journalctl -u docker -f
Atualização da Aplicação
Deploy de Atualizações
# 1. Fazer alterações locais
# 2. Testar localmente
# 3. Deploy para produção
make deploy
# 4. Se houver migrations
make deploy-exec CMD="php artisan migrate"
# 5. Limpar cache
make deploy-exec CMD="php artisan cache:clear"
Rollback (se necessário)
# Na VPS
cd /opt/agrsis
# Reverter para versão anterior
git checkout HEAD~1
# Reconstruir containers
docker compose build
docker compose up -d
# Reverter migrations se necessário
docker compose exec api php artisan migrate:rollback
Segurança
Checklist de Segurança
- Senhas fortes configuradas em
.env.production - Senha do NPM alterada do padrão
- Usuário admin do Portainer configurado
- SSL/TLS habilitado para todos os domínios
- Firewall configurado (apenas portas necessárias)
- Backups automáticos configurados
- Monitoramento de logs ativo
Portas Expostas
| Porta | Serviço | Observação |
|---|---|---|
| 80 | NPM | Redireciona para HTTPS |
| 443 | NPM | HTTPS |
| 81 | NPM Admin | Interface administrativa |
| 9443 | Portainer | Interface administrativa |
| 8080 | Nginx Sistema | Aplicação existente |
| 8443 | Nginx Sistema | Aplicação existente (SSL) |
Próximos Passos (Pós-MVP)
- CI/CD com GitHub Actions
- Automatizar testes
- Deploy automático em push para main
- Ambientes de staging e produção
- Monitoramento Avançado
- Prometheus + Grafana
- Alertas automáticos
- APM (Application Performance Monitoring)
- Alta Disponibilidade
- Load Balancer
- Múltiplas instâncias
- Banco de dados replicado
- Backup Automatizado
- Backup diário do banco
- Backup de arquivos
- Retenção de 30 dias
Suporte
Em caso de problemas:
- Verificar logs:
make deploy-logs - Verificar status:
make deploy-status - Acessar Portainer para diagnóstico visual
- Consultar este documento de troubleshooting
Última atualização: 2026-01-11 Versão: 1.0 (MVP)