3.8 KiB
3.8 KiB
Quickstart: Migração de E-mail (013)
Público: Técnicos Ligbox (ops_lead, technician)
Pré-requisito: Conta destino já criada no Carbonio (wizard VM112 ou zmprov)
Regra operacional
Nunca alterar MX/DNS até
migration_gate = ready_for_dns.
Sync inicial e deltas correm com MX ainda no servidor antigo.
1. Instalar ferramentas (uma vez por host worker)
cd /opt/ligbox-ops-platform
sudo ./scripts/install-migration-tools.sh
Conteúdo esperado:
/usr/bin/imapsync/usr/bin/readpst/opt/migration-tools/imap-upload/imap_upload.py
2. Criar job no Desk
- Login Desk → Email Migration → Novo job
- Preencher:
- Domínio:
cliente.com.br - Tenant: VM112
- Ticket: #123 (onboarding ou migração dedicado)
- Servidor origem: label descritivo
- Domínio:
- Adicionar mailboxes:
| Tipo origem | Host origem | |
|---|---|---|
| admin@cliente.com.br | imap | imap.hostantigo.com |
| vendas@cliente.com.br | pst | (upload ficheiro) |
3. Preflight
# API
curl -s -X POST "http://10.10.10.122:8080/api/v1/migration/jobs/1/preflight" \
-H "Authorization: Bearer $TOKEN"
Ou botão Preflight na UI.
Verificar: credenciais OK, pastas listadas, destino acessível.
4. Sync inicial (SEM DNS)
IMAP:
curl -s -X POST "http://10.10.10.122:8080/api/v1/migration/jobs/1/sync" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"run_type":"initial"}'
PST (após upload na UI):
- Worker executa automaticamente:
readpst→imap-upload - Erros em Quarentena — rever antes do gate
Repetir delta a cada 6–24h até contagem estabilizar.
5. Verificação
curl -s "http://10.10.10.122:8080/api/v1/migration/jobs/1/verify" \
-H "Authorization: Bearer $TOKEN" | python3 -m json.tool
Critérios:
- Ratio mensagens ≥ 99%
- Inbox e Sent = 100%
- PST: 0 erros críticos em quarentena
6. Aprovar gate (ops_lead)
curl -s -X POST "http://10.10.10.122:8080/api/v1/migration/jobs/1/approve-gate" \
-H "Authorization: Bearer $TOKEN" \
-d '{"comment":"Cliente validou amostra 10/06"}'
Estado passa a ready_for_dns.
7. Cutover DNS (só agora)
- Baixar TTL MX (se possível, 24h antes)
- Alterar MX no Cloudflare / pfSense
- Sync final no Desk
- Validar recepção no Carbonio
- Fechar ticket + fase
closed
Comandos manuais (debug)
imapsync directo
imapsync \
--host1 imap.origem.com --user1 user@dominio.com --password1 '***' \
--host2 mail.destino.com --user2 user@dominio.com --password2 '***' \
--ssl1 --ssl2 --automap --dry
PST manual
mkdir -p /tmp/mbox
readpst -o /tmp/mbox -r arquivo.pst
python3 /opt/migration-tools/imap-upload/imap_upload.py \
--ssl --host mail.destino.com --user user@dominio.com --password '***' \
--error /tmp/errors.mbox -r /tmp/mbox
TGZ Zimbra→Carbonio
su - zextras -c "zmmailbox -z -m user@dominio.com getRestURL '/?fmt=tgz'" > user.tgz
# transferir para destino
su - zextras -c "zmmailbox -z -m user@dominio.com postRestURL '/?fmt=tgz&resolve=skip' /path/user.tgz"
Troubleshooting
| Sintoma | Acção |
|---|---|
| Gate blocked, ratio 95% | Correr delta; verificar pasta com erro no log imapsync |
| PST partial | Abrir quarentena ERR_MBOX; re-upload pasta falhada |
| O365 auth fail | Usar OAuth2 (oauth2_imap), não password |
| Duplicatas | imapsync usa Message-Id; não misturar upload manual + imapsync mesma pasta |
| DNS virado cedo | Sync final + contactar origem forwarding |
Referências
- spec.md
- research.md — ferramentas avaliadas
- imapsync FAQ: https://imapsync.lamiral.info/FAQ.d/FAQ.Folders_Mapping.txt