Plano de Ação#
Visão Geral das Fases#
flowchart LR
A["Fase 1\nConfiguracoes Azure\n1 dia"] --> B["Fase 2\nLimpeza da BD\n2-3 semanas"]
B --> C["Fase 3\nOtimizacoes\n2 semanas"]
style A fill:#00cc44,color:#fff
style B fill:#ff8800,color:#fff
style C fill:#0088ff,color:#fff
Abordagem
Todas as alterações seguem o princípio de staging primeiro, produção depois. Nenhuma alteração é aplicada diretamente em produção sem validação prévia no ambiente de qualidade (www.qual.unicef.pt). Os tempos indicados incluem margens de segurança para testes e validação.
Fase 1 — Configurações Azure (Risco Baixo, 1 dia)#
Estas alterações são de configuração no Azure Portal. Não requerem alterações de código. Devem ser aplicadas primeiro no ambiente de qualidade para validação e depois em produção.
| # | Ação | Local | Risco | Tempo |
|---|---|---|---|---|
| 1 | Ativar Always On no App Service | Azure Portal → App Service → Configuration → General Settings | Nenhum | 5 min |
| 2 | Ativar Application Insights ingestion | Azure Portal → Application Insights → Properties | Nenhum | 15 min |
| 3 | Ativar HTTP/2 | Azure Portal → App Service → Configuration → General Settings | Nenhum | 5 min |
| 4 | Configurar Health Check path | Azure Portal → App Service → Health check | Nenhum | 15 min |
Processo de Aplicação#
flowchart TD
A["1. Aplicar configuracoes em QUALIDADE\n(uncwebqual)"] --> B["2. Monitorizar durante 24-48 horas"]
B --> C{"Tudo estavel?"}
C -->|Sim| D["3. Aplicar em PRODUCAO\n(uncwebprd)"]
C -->|Nao| E["Reverter e investigar"]
D --> F["4. Monitorizar producao\ndurante 48 horas"]
F --> G["5. Confirmar com UNICEF\nque tudo funciona"]
Impacto Esperado
Com Always On ativo, os cold starts deixam de acontecer. Esta alteração, por si só, deverá eliminar os crashes mais frequentes.
Fase 2 — Limpeza da Base de Dados (Risco Médio, 2-3 semanas)#
Esta é a fase mais crítica e que requer mais cuidado. Envolve a execução de scripts SQL para remover dados acumulados desnecessários. O processo deve ser rigoroso e faseado.
Semana 1 — Preparação e Testes em Staging#
| # | Ação | Risco | Tempo Estimado |
|---|---|---|---|
| 1 | Exportar backup recente da BD de produção (uncdb-prd) |
Nenhum | 30 min |
| 2 | Restaurar backup no ambiente de qualidade (uncdb-qual) |
Nenhum | 1 hora |
| 3 | Executar scripts de limpeza em qualidade, um de cada vez | Baixo | 1 dia |
| 4 | Validação funcional completa em qualidade — testar todas as páginas, navegação, pesquisa, backoffice Umbraco | Nenhum | 2-3 dias |
| 5 | Documentar resultados: tamanhos antes/depois, tempos de resposta | Nenhum | 1 dia |
Semana 2 — Validação Alargada e Preparação para Produção#
| # | Ação | Risco | Tempo Estimado |
|---|---|---|---|
| 6 | Manter qualidade em observação com dados limpos durante vários dias | Nenhum | 3-5 dias |
| 7 | Testar cenários de carga: cold start, navegação intensiva, backoffice | Nenhum | 1 dia |
| 8 | Preparar plano de rollback detalhado | Nenhum | 2 horas |
| 9 | Alinhar janela de manutenção com a equipa UNICEF | Nenhum | - |
Semana 3 — Execução em Produção#
| # | Ação | Risco | Tempo Estimado |
|---|---|---|---|
| 10 | Fazer backup completo da BD de produção (PITR + export manual) | Nenhum | 30 min |
| 11 | Executar scripts de limpeza em produção, durante janela de manutenção | Médio | 2-4 horas |
| 12 | Reconstruir índices SQL | Baixo | 30 min |
| 13 | Reiniciar App Service para limpar caches em memória | Nenhum | 5 min |
| 14 | Validação funcional — testar site, backoffice, API | Nenhum | 1-2 horas |
| 15 | Monitorizar durante 48-72 horas | Nenhum | 3 dias |
Ordem de Execução dos Scripts#
flowchart TD
A["1. BACKUP da BD\n(obrigatorio)"] --> B["2. Limpar icUrlTracker\n(~8M registos)"]
B --> C["3. Limpar cmsPropertyData\n(~1.15M registos antigos)"]
C --> D["4. Limpar cmsPreviewXml\n(versoes antigas)"]
D --> E["5. Limpar cmsContentVersion\n(~70K versoes antigas)"]
E --> F["6. Limpar LogApp\n(396K registos)"]
F --> G["7. Esvaziar reciclagem Umbraco"]
G --> H["8. Reconstruir indices SQL"]
H --> I["9. Reiniciar App Service"]
I --> J["10. Validacao funcional completa"]
J --> K{"Tudo OK?"}
K -->|Sim| L["Concluido - monitorizar 72h"]
K -->|Nao| M["Restaurar backup PITR"]
Plano de Rollback
Em caso de problemas após a limpeza em produção, é possível restaurar a base de dados para qualquer ponto nos últimos 14 dias usando o Azure SQL Point-In-Time Restore. Este processo demora aproximadamente 30-60 minutos. O comando está documentado na secção Disaster Recovery.
Janela de Manutenção
A execução em produção deve ser realizada durante um período de baixo tráfego, acordado previamente com a equipa UNICEF. Recomenda-se um sábado de manhã ou um período noturno.
Impacto Esperado
Redução significativa do tamanho da base de dados. Cold starts substancialmente mais rápidos. Gestão de redirecionamentos funcional novamente (icUrlTracker utilizável). Queries mais rápidas em toda a aplicação.
Fase 3 — Otimizações (Risco Baixo, 2 semanas)#
Após as correções imediatas e a limpeza da BD, estas otimizações melhoram a resiliência e a monitorização. Devem ser implementadas com base nos dados recolhidos pelo Application Insights nas semanas anteriores.
| # | Ação | Prioridade | Notas |
|---|---|---|---|
| 1 | Configurar Auto Heal rules | Alta | Reinício automático em caso de memória elevada ou erros |
| 2 | Configurar alertas no Application Insights | Alta | Alertas de tempo de resposta, erros, disponibilidade |
| 3 | Configurar testes de disponibilidade | Alta | Ping tests a cada 5 minutos de múltiplas localizações |
| 4 | Avaliar escalamento do SQL (S1 → S2 ou vCore) | Média | Decidir com base nos dados reais do App Insights |
| 5 | Desligar recursos não utilizados | Média | Após confirmação da equipa (~475-585 EUR/mês de poupança) |
| 6 | Rever e limpar DNS records não utilizados | Média | Remover registos A a apontar para servidores externos |
| 7 | Corrigir certificados SSL em falta | Alta | Domínios sem SSL: guerras, crises, presentesunicef |
| 8 | Configurar monitorização externa | Média | UptimeRobot ou similar como backup independente |
Cronograma Resumo#
gantt
title Plano de Acao - UNICEF Portugal
dateFormat YYYY-MM-DD
section Fase 1 - Configuracoes
Aplicar em qualidade :a1, 2026-04-21, 1d
Monitorizar qualidade :a2, after a1, 2d
Aplicar em producao :a3, after a2, 1d
Monitorizar producao :a4, after a3, 2d
section Fase 2 - Limpeza BD
Exportar e restaurar backup :b1, after a4, 2d
Executar scripts em qualidade :b2, after b1, 2d
Validacao funcional qualidade :b3, after b2, 3d
Observacao em qualidade :b4, after b3, 5d
Janela manutencao producao :crit, b5, after b4, 1d
Monitorizacao pos-limpeza :b6, after b5, 3d
section Fase 3 - Otimizacoes
Auto Heal e alertas :c1, after b6, 5d
Testes de disponibilidade :c2, after b6, 3d
Avaliar SQL tier :c3, after b6, 7d
Desligar recursos nao usados :c4, after c1, 5d
Corrigir SSL e DNS :c5, after b6, 5d