246 lines
9 KiB
Markdown
246 lines
9 KiB
Markdown
# Spec 024 — FOSSBilling + OpenPanel + Odoo 16 (VM123)
|
|
|
|
**Criado:** 2026-06-17
|
|
**Solicitado por:** Roger
|
|
**Status:** ✅ Concluída (v1 piloto) — 2026-06-17
|
|
**Prioridade:** P1
|
|
**Decisão:** **FOSSBilling** + **OpenPanel** + **Odoo V16** · gateway pagamento fase futura
|
|
**Relacionado:** Spec 023 (Desk 💳), Spec 018 (Serviços)
|
|
|
|
---
|
|
|
|
## Resumo
|
|
|
|
| Componente | Onde | Como |
|
|
|------------|------|------|
|
|
| **FOSSBilling** | VM123 Docker | Billing, clientes, pedidos, módulo OpenPanel |
|
|
| **Odoo 16** | VM123 Docker | ERP / fiscal (fase contabilidade) |
|
|
| **OpenPanel** | VM123 **bare metal** | Hosting Site/CMS |
|
|
| **Desk** | VM122 | Ops — wizard, tickets, links financeiro |
|
|
| **Gateway** | Fase 2 | ASAAS/Iugu no FOSSBilling |
|
|
|
|
---
|
|
|
|
## VM123 — hardware
|
|
|
|
| Recurso | Valor |
|
|
|---------|--------|
|
|
| VMID Proxmox | **123** |
|
|
| vCPU | **2** |
|
|
| RAM | **4 GB** + swap 2 GB |
|
|
| Disco | **25 GB** |
|
|
| IP LAN | **10.10.10.123** |
|
|
| SSH WAN | **:2523** |
|
|
| Hostname | `vm123-finance` |
|
|
|
|
Utilizadores: **root**, **admin**, **mini** — senha **805353**
|
|
**fail2ban** activo · **Wazuh agent** → VM104
|
|
|
|
---
|
|
|
|
## Credenciais dos serviços (VM123)
|
|
|
|
Ficheiro: `deploy/vm123-finance-stack/CREDENCIAIS_SERVICOS_VM123.txt`
|
|
|
|
| Serviço | URL interna | Login | Senha |
|
|
|---------|-------------|-------|-------|
|
|
| **FOSSBilling Admin** | `http://10.10.10.123:8092/admin` | `admin@ligbox.com.br` | `LbFossAdmin805353` |
|
|
| **FOSSBilling Cliente** | `http://10.10.10.123:8092/login` | ver clientes | — |
|
|
| **Odoo 16** | `http://10.10.10.123:8069` | `admin@ligbox.com.br` | `LbOdooAdmin805353` |
|
|
| **OpenPanel** | `https://10.10.10.123:2087` | `ligboxadmin` | `LbOpen805353` |
|
|
|
|
URLs públicas (após Traefik/DNS):
|
|
|
|
| Serviço | URL |
|
|
|---------|-----|
|
|
| FOSSBilling Admin | `https://financeiro.ligbox.com.br/admin` |
|
|
| FOSSBilling Cliente / Signup | `https://financeiro.ligbox.com.br/login` · `/signup` |
|
|
| Odoo | `https://financeiro.ligbox.com.br/odoo/web/login?db=ligbox` |
|
|
| OpenPanel | `https://openpanel.ligbox.com.br` |
|
|
| OpenAdmin | `https://openpanel.ligbox.com.br:2087` |
|
|
|
|
> **Não usar** `/foss` — FOSSBilling está na **raiz** do domínio `financeiro.ligbox.com.br`.
|
|
|
|
**Bases de dados:** ver `.env` — `FOSS_MARIADB_PASSWORD`, `ODOO_DB_PASSWORD`
|
|
**Odoo DB:** `ligbox` · master pwd gestor: `admin`
|
|
**FOSS ↔ OpenPanel:** módulo `OpenPanel.php` instalado · API `:2087` activa
|
|
|
|
---
|
|
|
|
## URLs (Traefik CT114)
|
|
|
|
| URL | Backend |
|
|
|-----|---------|
|
|
| `financeiro.ligbox.com.br` (exceto `/odoo`) | VM123:8092 FOSSBilling |
|
|
| `financeiro.ligbox.com.br/odoo` | VM123:8069 Odoo 16 |
|
|
| `openpanel.ligbox.com.br` | VM123:2083 OpenPanel |
|
|
|
|
FOSSBilling na **raiz** do domínio; Odoo em **subpath** `/odoo`; OpenPanel em **subdomínio** dedicado.
|
|
|
|
---
|
|
|
|
## FOSSBilling — Antispam (signup)
|
|
|
|
**Problema conhecido (2026-06-17):** o campo honeypot padrão `bio` pode ser preenchido pelo **autocomplete do browser**. O FOSSBilling bloqueia com `Registration failed.` e a UI fica no spinner sem mensagem clara.
|
|
|
|
**Correção aplicada:**
|
|
|
|
| Item | Valor |
|
|
|------|-------|
|
|
| Admin → System → Antispam | Honeypot **activo** |
|
|
| Nome do campo honeypot | `lb_hp_x9k2` (não usar `bio`) |
|
|
| Template signup | Campo oculto (`position:absolute`, `aria-hidden`, `autocomplete=new-password`) |
|
|
| Script reapply | `deploy/vm123-finance-stack/setup-foss-antispam.sh` |
|
|
| Patch template | `deploy/vm123-finance-stack/patches/mod_page_signup.html.twig` |
|
|
|
|
**Reaplicar após rebuild do container FOSS:**
|
|
|
|
```bash
|
|
ssh root@10.10.10.123
|
|
bash /opt/ligbox-ops-platform/deploy/vm123-finance-stack/setup-foss-antispam.sh
|
|
```
|
|
|
|
**Admin manual (se script falhar):** `https://financeiro.ligbox.com.br/admin` → **System** → **Antispam** → Honeypot field = `lb_hp_x9k2`.
|
|
|
|
**Diagnóstico:** log `data/log/php_error.log` no container — mensagem `honeypot field was not empty`.
|
|
|
|
**Dois logins distintos:**
|
|
|
|
| Área | URL | Quem |
|
|
|------|-----|------|
|
|
| Staff/Admin | `/admin` | operadores Ligbox |
|
|
| Cliente | `/login` ou `/signup` | clientes finais |
|
|
|
|
---
|
|
|
|
## Arquitectura
|
|
|
|
```
|
|
Traefik CT114
|
|
│
|
|
┌─────────────────┼─────────────────┐
|
|
▼ ▼ ▼
|
|
financeiro/foss financeiro/odoo openpanel.ligbox.com.br
|
|
│ │ │
|
|
└────────┬────────┴────────┬────────┘
|
|
▼ │
|
|
VM123 10.10.10.123 │
|
|
┌────────────────────────────┴───┐
|
|
│ Docker: FOSSBilling + Odoo │
|
|
│ Host: OpenPanel Enterprise │
|
|
└──────────────┬─────────────────┘
|
|
│ OpenAdmin API :2087
|
|
▼
|
|
FOSSBilling Server Manager
|
|
(criar/suspender contas hosting)
|
|
|
|
Desk VM122 ──webhook/link──► FOSSBilling / tickets
|
|
Wizard VM112 ──company.validated──► Desk
|
|
```
|
|
|
|
---
|
|
|
|
## Deploy
|
|
|
|
Pacote: `deploy/vm123-finance-stack/`
|
|
|
|
| Ficheiro | Função |
|
|
|----------|--------|
|
|
| `proxmox-create-vm123.sh` | Criar VM no PVE |
|
|
| `bootstrap-vm123.sh` | users, swap, docker, fail2ban |
|
|
| `docker-compose.yml` | FOSS + Odoo |
|
|
| `install-openpanel.sh` | OpenPanel bare metal |
|
|
| `setup-foss-openpanel-module.sh` | Módulo GitHub OpenPanel.php |
|
|
| `traefik-routes-snippet.yml` | Rotas CT114 |
|
|
| `README.md` | Passo a passo |
|
|
|
|
---
|
|
|
|
## Integração FOSS ↔ OpenPanel
|
|
|
|
Repo: [stefanpejcic/FOSSBilling-OpenPanel](https://github.com/stefanpejcic/FOSSBilling-OpenPanel)
|
|
|
|
- Create / suspend / unsuspend / cancel / change package ✅
|
|
- FOSSBilling Admin → **System → Hosting Plans and Servers** → **New Server** → Manager OpenPanel, port **2087**
|
|
|
|
### Onde clicar no FOSS Admin (não é em Settings)
|
|
|
|
| Passo | Menu / URL |
|
|
|-------|------------|
|
|
| 1 | **System** (barra superior) → **Hosting Plans and Servers** |
|
|
| 2 | Ou directo: `https://financeiro.ligbox.com.br/admin/servicehosting` |
|
|
| 3 | Aba **Hosting Servers** → botão azul **New Server** |
|
|
| 4 | Manager: **OpenPanel** · Host: `10.10.10.123` · Port: `2087` · SSL: Yes · User: `ligboxadmin` · Pass: `LbOpen805353` |
|
|
| 5 | Aba **Hosting Plans** → **New Plan** → plano `ligbox-site-cms` (espelhar OpenPanel) |
|
|
|
|
### Estado configurado (2026-06-17 — API)
|
|
|
|
| Item | ID / Nome | Notas |
|
|
|------|-----------|-------|
|
|
| Servidor | `VM123 OpenPanel` (id 1) | manager `openpanel`, host `10.10.10.123:2087`, user `ligboxadmin` |
|
|
| Plano FOSS | `ligbox-site-cms` (id 1) | = plano OpenPanel id 3 |
|
|
| Produto | `Ligbox Site CMS` (id 2) | slug `ligbox-site-cms-hosting`, preço free, domínio próprio |
|
|
| Test connection | ✅ OK (bridge Community) | porta **18087** HTTP — ver abaixo |
|
|
|
|
### OpenPanel Community — bridge API (sem Enterprise)
|
|
|
|
A API Enterprise (`:2087/api/`) **não existe** na Community. Solução VM123:
|
|
|
|
| Componente | Detalhe |
|
|
|------------|---------|
|
|
| Bridge | `openpanel-foss-bridge.service` → `http://10.10.10.123:18087` |
|
|
| Backend | `opencli user-add/suspend/delete` |
|
|
| FOSS servidor | Host `10.10.10.123` · Port **18087** · SSL **No** |
|
|
| Instalar | `bash install-openpanel-community-bridge.sh` |
|
|
| CSF | allow `172.19.0.0/16` → porta 18087 (Docker FOSS) |
|
|
|
|
Upgrade futuro: licença [OpenPanel Enterprise](https://my.openpanel.com/index.php?rp=/store/openpanel/enterprise-license) → FOSS volta a `:2087` SSL.
|
|
|
|
### Card cliente → conta (Desk Spec 023)
|
|
|
|
| Fase | O quê | Quando |
|
|
|------|-------|--------|
|
|
| **A** ✅ | FOSS + OpenPanel + bridge + produto `Ligbox Site CMS` | Feito 2026-06-17 |
|
|
| **B** | Teste pedido manual FOSS → conta OpenPanel | **Agora** (podes encomendar no `/order`) |
|
|
| **C** | Desk card campos (`email`, `domínio`, `plano`, `senha painel`) | Spec 023 fase 2 — **próximo sprint** |
|
|
| **D** | Webhook Desk → API FOSS `client/create` + `order/create` | Após fase C |
|
|
|
|
Campos card: ver `PROVISIONING_CLIENT_CARD.md`.
|
|
|
|
> **Settings** (grelha Activity, Anti-Spam, Client…) é configuração de módulos — **não** é onde se criam servidores.
|
|
|
|
---
|
|
|
|
## Odoo 16
|
|
|
|
- Imagem `odoo:16.0` + `postgres:15-alpine`
|
|
- Uso interno Ligbox (parceiros, NF futura)
|
|
- API existente Roger (`813f08e7…`) — configurar após 1.º login
|
|
- **Não** expor dados sensíveis ao cliente final
|
|
|
|
---
|
|
|
|
## Critérios de aceite
|
|
|
|
- [x] VM123 no ar com IP 10.10.10.123
|
|
- [x] `docker compose up -d` — FOSS + Odoo healthy
|
|
- [x] OpenPanel instalado — `openpanel.ligbox.com.br` (OpenAdmin :2087)
|
|
- [x] FOSSBilling → bridge → conta OpenPanel (E2E validado)
|
|
- [x] Traefik — FOSS raiz + `/odoo` + openpanel HTTPS
|
|
- [x] fail2ban + swap
|
|
- [x] Wazuh agent
|
|
- [x] Desk — link financeiro (Spec 023 fase 1)
|
|
|
|
---
|
|
|
|
## Riscos (4 GB RAM)
|
|
|
|
Piloto apenas — monitorizar RAM. Se apertar: subir VM para 8 GB ou Odoo noutra VM depois.
|
|
|
|
---
|
|
|
|
## Fora de escopo v1
|
|
|
|
- Gateway ASAAS/Iugu
|
|
- Hub custom financeiro.ligbox.com.br
|
|
- Paymenter (decisão: FOSSBilling)
|