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

Nginx Proxy Manager

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á:

  1. Fazer build das imagens Docker localmente
  2. Sincronizar código com a VPS
  3. Criar containers na VPS
  4. Executar migrations
  5. 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

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

  1. Acesse https://dev.agrsis.com:9443
  2. Selecione o endpoint local
  3. 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

PortaServiçoObservação
80NPMRedireciona para HTTPS
443NPMHTTPS
81NPM AdminInterface administrativa
9443PortainerInterface administrativa
8080Nginx SistemaAplicação existente
8443Nginx SistemaAplicação existente (SSL)

Próximos Passos (Pós-MVP)

  1. CI/CD com GitHub Actions
    • Automatizar testes
    • Deploy automático em push para main
    • Ambientes de staging e produção
  2. Monitoramento Avançado
    • Prometheus + Grafana
    • Alertas automáticos
    • APM (Application Performance Monitoring)
  3. Alta Disponibilidade
    • Load Balancer
    • Múltiplas instâncias
    • Banco de dados replicado
  4. Backup Automatizado
    • Backup diário do banco
    • Backup de arquivos
    • Retenção de 30 dias

Suporte

Em caso de problemas:

  1. Verificar logs: make deploy-logs
  2. Verificar status: make deploy-status
  3. Acessar Portainer para diagnóstico visual
  4. Consultar este documento de troubleshooting

Última atualização: 2026-01-11 Versão: 1.0 (MVP)

Copyright © 2026