ligbox-ops-platform/specs/034-nextcloud-carbonio-vm112-integration/infrastructure.md
Ligbox Spec Hub c1881f58e6 chore: sync Console SSO, DNS viewer, specs e infra docs pendentes
Inclui console handoff Desk↔Console (Spec 019), melhorias DNS Viewer (037),
OpenPanel/Nextcloud/VM116 deploy notes, contracts stack e sidebar actualizado.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-25 20:10:17 +00:00

175 lines
4.7 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 (RustDesk — não Nextcloud)
│ ├── :2524 → VM124:22 (nextcloud) ← reservar
│ └── :443 → CT114 Traefik
└── CT114 (10.10.10.114)
├── mail.{dominio} → VM112:443
├── onboard.ligbox.com.br → VM112:8090
├── files.{dominio} → VM124:8080 ← novo router
└── cloud.ligbox.com.br → VM124:8080 ← hub Ligbox
```
---
## VM124 — Nextcloud Hub (nova)
| Parâmetro | Valor |
|-----------|-------|
| **VMID** | 124 |
| **Nome** | `vm124-nextcloud-ligbox` |
| **IP LAN** | `10.10.10.124/24` |
| **Gateway** | `10.10.10.1` (pfSense) |
| **SSH WAN** | `95.216.14.146:2524` |
| **vCPU** | **2** |
| **RAM** | **4096 MB** |
| **Disco** | **500 GB** (`local-lvm` se houver espaço) |
| **SO** | Ubuntu 24.04 LTS |
> **VM116** (`10.10.10.116`) = RustDesk LXC — **não** usar para Nextcloud.
### 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 VM124 → VM112
| Origem | Destino | Porta | Uso |
|--------|---------|-------|-----|
| VM124 (Mail app users) | VM112 | 993 | IMAP SSL |
| VM124 (Mail app users) | VM112 | 587/465 | SMTP submission |
| VM124 (provision script) | VM112 | 8090 | Opcional — estado domínio |
| VM112 (wizard worker) | VM124 | 443/8080 | OCS Provisioning API |
**Firewall pfSense:** permitir LAN `10.10.10.124 → 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.124:8080`
3. Certbot SAN multi-dom ou cert por domínio (mesmo fluxo mail)
### Router hub
```yaml
# cloud.ligbox.com.br → VM124
http:
routers:
nextcloud-hub:
rule: Host(`cloud.ligbox.com.br`)
service: nextcloud-vm124
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 VM124 :9000
bucket: carbonio-archive-{tenant}
```
Credenciais S3 em `/opt/zextras/conf/` (VM112) — **nunca** no repo Git.
---
## Backup & DR
| Componente | Método | Frequência |
|------------|--------|------------|
| VM124 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 VM124 + re-ligar Traefik).
---
## Monitorização
| Métrica | Alerta |
|---------|--------|
| Disco VM124 > 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 |
|-------|------|---------|
| **VM124 dedicada** (Roger 2026-06-21) | Disco isolado · 2 vCPU 4 GB | Nova VM após VM123 |
| Nextcloud na VM112 | Menos VMs | Piora problema de disco |
| Nextcloud na VM123 | Já tem stack Docker | Mistura finance/hosting com mail |
**Decisão Spec 034:** VM124 dedicada (`10.10.10.124`).