# 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)