Defines hybrid hot/warm storage to expand tenant mail capacity via Nextcloud Hub on proposed VM116.
172 lines
4.5 KiB
Markdown
172 lines
4.5 KiB
Markdown
# 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}`):
|
|
|
|
1. Adicionar `files.{dom}` em `sni_vm112.lst` → **renomear** para `sni_tenant_apps.lst` (mail + files)
|
|
2. Router Traefik `files-*-Router` → backend `http://10.10.10.116:443`
|
|
3. Certbot SAN multi-dom ou cert por domínio (mesmo fluxo mail)
|
|
|
|
### Router hub
|
|
|
|
```yaml
|
|
# 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.
|