Defines hybrid hot/warm storage to expand tenant mail capacity via Nextcloud Hub on proposed VM116.
4.5 KiB
4.5 KiB
Spec 034 — Infraestrutura Nextcloud + VM112
Actualizado: 2026-06-20
Topologia proposta
Internet (95.216.14.146)
│
├── pfSense NAT
│ ├── :2512 → VM112:22 (mail/wizard)
│ ├── :2516 → VM116:22 (nextcloud) ← reservar
│ └── :443 → CT114 Traefik
│
└── CT114 (10.10.10.114)
├── mail.{dominio} → VM112:443
├── onboard.ligbox.com.br → VM112:8090
├── files.{dominio} → VM116:443 ← novo router
└── cloud.ligbox.com.br → VM116:443 ← hub Ligbox
VM116 — Nextcloud Hub (nova)
| Parâmetro | Valor proposto |
|---|---|
| VMID | 116 |
| Nome | vm116-nextcloud-ligbox |
| IP LAN | 10.10.10.116/24 |
| Gateway | 10.10.10.1 (pfSense) |
| SSH WAN | 95.216.14.146:2516 |
| vCPU | 4 |
| RAM | 8192 MB |
| Disco | 500 GB (local-lvm ou volume dedicado) |
| SO | Ubuntu 24.04 LTS |
Serviços
| Serviço | Porta | Notas |
|---|---|---|
| Nextcloud (Apache/nginx) | 443 | Behind Traefik ou direct SNI |
| PostgreSQL | 5432 | localhost only |
| Redis | 6379 | localhost — locking/sessions |
| MinIO (fase 2) | 9000 | S3 API — localhost + VM112 ACL |
Instalação recomendada
Opção A — Docker Compose (preferida para IaC no repo):
deploy/vm116-nextcloud/
├── docker-compose.yml
├── .env.example
├── traefik/dynamic-files.yml.snippet
└── scripts/
├── install.sh
├── occ-provision-user.sh
└── backup-occ.sh
Opção B — Nextcloud snap — mais rápido para piloto manual.
VM112 — ligação existente (sem alterar mail)
| Parâmetro | Valor actual |
|---|---|
| IP | 10.10.10.112 |
| Carbonio LMTP | :7025 (Desk transport) |
| Carbonio IMAP | :993 |
| Carbonio SMTP | :25 / submission |
| Wizard API | :8090 |
Conectividade VM116 → VM112
| Origem | Destino | Porta | Uso |
|---|---|---|---|
| VM116 (Mail app users) | VM112 | 993 | IMAP SSL |
| VM116 (Mail app users) | VM112 | 587/465 | SMTP submission |
| VM116 (provision script) | VM112 | 8090 | Opcional — estado domínio |
| VM112 (wizard worker) | VM116 | 443 | OCS Provisioning API |
Firewall pfSense: permitir LAN 10.10.10.116 → 10.10.10.112:993,587,8090.
CT114 — Traefik / SNI
Novo router files.{domain}
Seguir padrão Spec 017 (mail.{domain}):
- Adicionar
files.{dom}emsni_vm112.lst→ renomear parasni_tenant_apps.lst(mail + files) - Router Traefik
files-*-Router→ backendhttp://10.10.10.116:443 - Certbot SAN multi-dom ou cert por domínio (mesmo fluxo mail)
Router hub
# cloud.ligbox.com.br → VM116
http:
routers:
nextcloud-hub:
rule: Host(`cloud.ligbox.com.br`)
service: nextcloud-vm116
tls:
certResolver: letsencrypt
DNS Cloudflare (por tenant)
| Registo | Tipo | Valor |
|---|---|---|
files.{dominio} |
A | IP público (via Traefik) |
_carddav._tcp.{dominio} |
SRV | opcional — CalDAV/CardDAV NC |
Nota: MX continua mail.{dominio} → Carbonio. Nextcloud não recebe mail directo.
Storage — fase 2 (Carbonio S3 offload)
VM112 Carbonio
└── volume secondary (Custom S3)
└── MinIO VM116 :9000
bucket: carbonio-archive-{tenant}
Credenciais S3 em /opt/zextras/conf/ (VM112) — nunca no repo Git.
Backup & DR
| Componente | Método | Frequência |
|---|---|---|
| VM116 snapshot | Proxmox | diário |
| Nextcloud data | occ files:scan + rsync/borg |
diário |
| PostgreSQL NC | pg_dump |
diário |
| MinIO (fase 2) | replica ou snapshot volume | diário |
RPO alvo: 24 h · RTO alvo: 4 h (restaurar VM116 + re-ligar Traefik).
Monitorização
| Métrica | Alerta |
|---|---|
| Disco VM116 > 80% | ops_lead email |
| Disco VM112 > 85% | crítico — revisar quotas hot |
| Nextcloud status.php != 200 | Infra stack health Desk |
| IMAP latency VM112 > 2s | investigar carga Mail app |
Decisão pendente (Roger)
| Opção | Prós | Contras |
|---|---|---|
| VM116 dedicada (proposto) | Disco isolado, escala independente | Nova VM para gerir |
| Nextcloud na VM112 | Menos VMs | Piora problema de disco |
| Nextcloud na VM123 | Já tem stack Docker | Mistura finance/hosting com mail |
Recomendação Spec 034: VM116 dedicada.