# Infraestrutura e Operações

## Plataforma

- Ubuntu Server 24.04 LTS atualizado;
- Apache 2.4;
- PHP 8.3 via PHP-FPM;
- MySQL 8;
- Redis;
- Composer;
- Node apenas no build, se possível;
- TLS automatizado;
- NTP/chrony obrigatório.

## PHP

Módulos previstos: curl, dom/xml, gd, intl, mbstring, mysqli/PDO MySQL, openssl, soap, zip, bcmath, fileinfo e opcache. Limites de upload, memória e execução separados para web, worker e relatórios.

OPcache habilitado em produção. Exibir erros desabilitado; erros vão para log estruturado com correlation ID.

## Apache

- document root em `public/`;
- negar dotfiles e arquivos sensíveis;
- headers de segurança;
- limite de request body;
- compressão para assets;
- cache longo para assets versionados;
- proxy para PHP-FPM;
- logs com request/correlation ID;
- virtual host separado por ambiente.

## Processos

Serviços `systemd`:

- workers por fila e concorrência;
- scheduler a cada minuto;
- monitor de filas;
- tarefas de manutenção.

Workers encerram graciosamente no deploy e possuem limite de memória/jobs para reciclagem controlada.

## Topologia inicial

Produção pequena pode iniciar em uma VM dimensionada, mas banco, uploads e backups devem possuir caminhos de migração. Recomendação inicial mínima a validar por carga: 4 vCPU, 8–16 GB RAM, SSD e volume de backup separado.

Não fixar capacidade sem teste. Imagens, XMLs e anexos influenciam storage mais que o banco.

## Deploy

1. criar release em diretório versionado;
2. instalar dependências com lock;
3. build de assets;
4. colocar código novo sem trocar symlink;
5. executar migrations compatíveis;
6. trocar symlink de release;
7. recarregar PHP-FPM/OPcache;
8. reiniciar workers graciosamente;
9. smoke test;
10. monitorar erros e filas.

Uploads e `.env` ficam em diretórios compartilhados fora da release.

## Backup e recuperação

- backup completo diário;
- binlog contínuo para point-in-time recovery;
- arquivos/objetos incrementais;
- cópia externa criptografada;
- retenção diária/semanal/mensal;
- teste de restauração trimestral;
- documentação de chaves e responsáveis.

Meta inicial: RPO 15 minutos, RTO 4 horas. Certificados e segredos exigem backup criptografado e restauração testada.

## Observabilidade

### Logs

JSON com timestamp, nível, ambiente, request ID, correlation ID, grupo/empresa quando seguro, usuário, módulo, evento e exceção. Mascarar documentos, tokens e payloads pessoais.

### Métricas

- tráfego, latência e erros;
- conexões e queries lentas;
- jobs pendentes/falhos/idade;
- webhooks recebidos;
- sincronizações e divergências;
- emissões fiscais por resultado;
- espaço em disco;
- validade de certificado;
- backup e último restore testado.

### Alertas

- indisponibilidade;
- taxa de erro elevada;
- fila antiga;
- dead-letter crescente;
- disco/banco críticos;
- certificado próximo do vencimento;
- backup falhou;
- divergência de estoque externa acima do limite.

## Manutenção

- aplicar patches em janela controlada;
- acompanhar versões do Mercado Livre, schemas fiscais e NFePHP;
- rotacionar logs;
- particionar/arquivar auditoria e eventos conforme crescimento;
- revisar índices por métricas;
- testar recuperação antes de mudanças maiores.

## Ambientes

- desenvolvimento local;
- teste automatizado descartável;
- staging com integrações sandbox/homologação;
- produção.

Credenciais nunca são compartilhadas entre ambientes. Homologação deve possuir banner persistente e dados claramente fictícios.

