# Infraestrutura — VM e Recursos (013)

**Status:** 📋 **Decisão futura — NÃO implementar hoje**  
**Registado:** 2026-06-10 (Roger)  
**Rever quando:** iniciar Fase B/C da migração em produção ou primeiro PST &gt; 10 GB

---

## Resumo

| Pergunta | Resposta |
|----------|----------|
| **Outra VM obrigatória hoje?** | **Não** — MVP pode usar worker na VM122 existente |
| **Outra VM recomendada em produção?** | **Sim** — VM dedicada de migração (ex. VM123) |
| **Pode correr na VM112 Carbonio?** | **Nunca** — servidor de mail de produção |

---

## O que fica onde

| VM / host | Função | Estado hoje |
|-----------|--------|-------------|
| **VM122** `ligbox-ops` (8 GB) | API, Desk, SQLite, fila, gate DNS | ✅ Existe |
| **VM112** Carbonio | Destino IMAP / zmmailbox | ✅ Existe |
| **VM123** `ligbox-migration` (proposto) | imapsync, readpst, imap-upload | 📋 **Futuro** |

Orquestração permanece na **VM122**. Execução pesada das ferramentas pode ser na VM122 (piloto) ou VM123 (produção).

---

## Opção A — Worker na VM122 (piloto / MVP)

**Quando usar:** 1–3 mailboxes, PST &lt; 10 GB, testes internos.

| Recurso | Valor | Notas |
|---------|-------|-------|
| RAM | 8 GB (actual) | Máx. **1–2 jobs em paralelo** |
| vCPU | 2–4 | imapsync é mais rede que CPU |
| Disco extra | **+100 GB** volume | PST + mbox temp + logs |
| Rede | LAN → VM112 + Internet → origem IMAP | Obrigatório |

**Risco:** carga de migração compete com API, Desk e Redis na mesma VM.

**Decisão futura:** adicionar volume Docker `/data/migrations` na VM122 só quando implementar Fase C (PST).

---

## Opção B — VM dedicada migração (produção — recomendado)

**Quando usar:** várias migrações em paralelo, PST grandes, clientes reais.

| Recurso | Standard | Carga alta |
|---------|----------|------------|
| **Nome** | `ligbox-migration` / **VM123** | — |
| **RAM** | **8 GB** | **16 GB** |
| **vCPU** | **4** | **8** |
| **Disco** | **200 GB** SSD | **500 GB** SSD |
| **OS** | Debian 12 | igual VM122 |
| **IP LAN** | `10.10.10.x` (a definir) | — |
| **SSH WAN** | Porta range 2501–2510 | como outras VMs |
| **IP público** | Não necessário | só LAN + NAT |

**Não precisa:** MX, DNS próprio, Traefik, Carbonio.

---

## Consumo estimado por tipo de job

| Tipo | RAM (por job) | Disco temporário | Rede |
|------|---------------|------------------|------|
| imapsync (IMAP) | 200–500 MB | Logs 10–50 MB | Alta (GB/dia) |
| PST 10 GB | 1–2 GB | **20–30 GB** (mbox) | Média |
| PST 50 GB | 2–4 GB | **100–150 GB** (mbox) | Alta, horas/dias |
| TGZ Zimbra | Baixa | Tamanho do .tgz | SSH → VM112 |

**Regra PST:** reservar **2×–3×** o tamanho do ficheiro `.pst` em disco livre.

---

## Rede obrigatória (worker)

1. **Saída Internet** → servidor origem (cPanel, O365, Gmail, etc.)
2. **LAN `10.10.10.0/24`** → Carbonio VM112 (`mail.dominio:993`)
3. **SSH VM112** (opcional) → import TGZ via `zmmailbox`
4. **Callback HTTP** → API VM122 (`10.10.10.122`) — progresso e gate

---

## Software na VM worker

```bash
# scripts/install-migration-tools.sh
apt install imapsync pst-utils python3 git
git clone https://github.com/rgladwell/imap-upload.git /opt/migration-tools/imap-upload
```

---

## Roadmap infra (futuro)

| Fase | Infra | Quando |
|------|-------|--------|
| **Piloto** | Worker na VM122 + volume 100 GB | 1ª implementação código (Fase A–B) |
| **Produção** | Provisionar **VM123** 4 vCPU / 8 GB / 200 GB | Primeira migração cliente real com PST |
| **Escala** | VM123 8 vCPU / 16 GB / 500 GB | Múltiplos jobs paralelos |

---

## Proxmox — checklist futuro (VM123)

- [ ] Clone template Debian 12 ou criar VM nova
- [ ] RAM 8 GB, 4 vCPU, disco 200 GB em SSD
- [ ] Bridge `vmbr1` / LAN `10.10.10.x`
- [ ] Regra DNAT SSH WAN (porta livre no range 2501–2510)
- [ ] Regra FORWARD no Proxmox (dentro `iface vmbr0`)
- [ ] **Não** alterar MX/DNS — worker não é servidor de mail
- [ ] Instalar `install-migration-tools.sh`
- [ ] Testar: `imapsync --justlogin` origem + destino VM112

---

## Decisão Roger (2026-06-10)

> Guardar sizing de VM e recursos na spec para **ver no futuro, não hoje**.  
> Implementação de código (API/worker) pode começar na VM122; VM dedicada fica para quando houver carga real.

---

*Relacionado: [plan.md](./plan.md) · [spec.md](./spec.md) · [tasks.md](./tasks.md)*
