7.7 KiB
Spec 028 — OpenPanel CE Ligbox Re-engenharia (Enterprise Local)
Criado: 2026-06-19
Solicitado por: Roger
Status: ✅ Implementado (VM123) — E2E FOSS validado
Prioridade: P0 (hosting comercial sem licença Enterprise paga)
VM alvo: VM123 (10.10.10.123)
Relacionado: Spec 024 (FOSS+OpenPanel), Spec 027 (RBAC Desk), Spec 018 (Serviços)
Resumo
Re-engenharia local do OpenPanel Community Edition para operar como plataforma Ligbox “enterprise” sem licença WHMCS/OpenPanel paga:
| Capacidade | Antes (CE) | Depois (Ligbox) |
|---|---|---|
| Contas hosting | Máx. 3 | Ilimitadas (patch opencli) |
| API FOSSBilling | Bloqueada | Bridge :18087 (API compatível) |
| Domínio por pedido | Manual | Automático (user-add + domains-add) |
| Email CLI | Bloqueado | Desbloqueado (patch + key local) |
| OpenAdmin extra | 1 admin | SQLite bypass + CLI desbloqueado |
| Integração Desk | Parcial | FOSS → bridge → conta real |
Princípio: conta hosting real = opencli user-add (Linux + Docker + MySQL panel.users) + opencli domains-add (vhost/Caddy/DNS). Não usar INSERT SQLite (só OpenAdmin) nem INSERT MySQL isolado.
Arquitectura
Internet → Traefik CT114
→ financeiro.ligbox.com.br → FOSSBilling (Docker VM123)
→ openpanel.ligbox.com.br → OpenPanel UI :2083
→ admin.openpanel.ligbox.com.br → OpenAdmin :2087
FOSSBilling order (hosting)
→ OpenPanel.php (Ligbox patch: campo domain)
→ POST http://10.10.10.123:18087/api/users
→ bridge.py v2
→ opencli user-add
→ opencli domains-add (domínio normalizado)
→ Conta REAL + domínio CORRECTO
VM123 — componentes
| Componente | Path / serviço |
|---|---|
| OpenPanel CE | bare metal v1.7.61 |
| Bridge FOSS | openpanel-foss-bridge.service → :18087 |
| Patch CE | patch-openpanel-ce-unlock.sh |
| Patch FOSS domain | patch-foss-openpanel-domain.sh |
| Provision manual | provision-openpanel-hosting.sh |
| E2E test | test-foss-openpanel-order.sh |
| Credenciais | CREDENCIAIS_SERVICOS_VM123.txt |
Re-engenharia CE — ficheiros patchados
Script: deploy/vm123-finance-stack/patch-openpanel-ce-unlock.sh
| Ficheiro opencli | Restrição removida |
|---|---|
user/add.sh |
Limite 3 contas + resellers |
user/restore.sh |
Limite restore |
user/transfer.sh |
Limite transfer |
api.sh |
API nativa bloqueada |
admin.sh |
Múltiplos admins/resellers |
email/*.sh (6 ficheiros) |
Módulos email bloqueados |
Config local: /etc/openpanel/openpanel/conf/openpanel.config
[LICENSE]
key=ligbox-local-enterprise
Backup: /usr/local/opencli/.ligbox-backup-YYYYMMDD/
Reaplicar obrigatório após: opencli update --cli
Bridge FOSS v2 — API
Base: http://10.10.10.123:18087
Token: ligbox-community-bridge-token (ver bridge.env)
Autenticação
POST /api
Content-Type: application/json
{"username":"ligboxadmin","password":"LbOpen805353"}
→ {"access_token":"ligbox-community-bridge-token"}
Criar conta + domínio
POST /api/users
Authorization: Bearer ligbox-community-bridge-token
Content-Type: application/json
{
"username": "cliente1",
"password": "SenhaSegura123",
"email": "cliente@dominio.com",
"plan_name": "ligbox-site-cms",
"domain": "cliente1.com"
}
Normalização domínio (bridge):
| Entrada FOSS | Painel OpenPanel |
|---|---|
cliente.com |
cliente.com |
teste.ops.ligbox |
teste.ops.ligbox.com.br |
test95452ligbox.com.br (sem ponto) |
test95452.ligbox.com.br |
Outros endpoints
| Método | Path | Função |
|---|---|---|
| GET | /api |
Health (com Bearer) |
| GET | /api/users |
Listar contas |
| GET | /api/users/{user} |
Domínios do user |
| POST | /api/domains |
Associar domínio |
| PATCH | /api/users/{user} |
suspend / unsuspend / password |
| DELETE | /api/users/{user} |
Remover conta |
Timeout: user-add demora ~15–20s — clientes HTTP ≥ 60s.
FOSSBilling — configuração servidor
Admin FOSS → System → Hosting plans → Server VM123 OpenPanel
| Campo | Valor |
|---|---|
| Manager | OpenPanel |
| Hostname | 10.10.10.123 |
| Port | 18087 |
| Secure | No |
| Username | ligboxadmin |
| Password | LbOpen805353 |
Produto: Ligbox Site CMS (id 2) · plan_name = ligbox-site-cms
Pedido FOSS (domain config):
config[domain][action]=owndomain
config[domain][owndomain_sld]=CLIENTE
config[domain][owndomain_tld]=ligbox.com.br
Patch OpenPanel.php (patch-foss-openpanel-domain.sh):
"plan_name" => $package->getName(),
"domain" => $account->getDomain(),
FOSS gera username próprio (7 chars + dígito; prefixo test → hash aleatório).
Contas de teste (audit_domains Desk)
Senha comum clientes teste: LbOpenTest805353
Plano: ligbox-site-cms (1 domínio/conta)
| Domínio Desk | User OpenPanel | Domínio painel |
|---|---|---|
| diarissima.com | diarissima | diarissima.com |
| myvexx.com | myvexx | myvexx.com |
| teste.ops.ligbox | testeops | teste.ops.ligbox.com.br |
| auth-verify.ligbox | authverify | auth-verify.ligbox.com.br |
| e2e.portal.ligbox | e2eportal | e2e.portal.ligbox.com.br |
| funnel.ops.ligbox | funnel | funnel.ops.ligbox.com.br |
| verify.ops.ligbox | verify | verify.ops.ligbox.com.br |
OpenAdmin — bypass SQLite (issue #795)
Base: /etc/openpanel/openadmin/users.db
-- Gerar hash
/usr/local/admin/venv/bin/python3 /usr/local/admin/core/users/hash "SENHA"
-- Inserir admin extra
INSERT INTO user (username, password_hash, role) VALUES ('labadmin', 'HASH', 'admin');
-- Reseller (+ ficheiro JSON)
INSERT INTO user (username, password_hash, role) VALUES ('labreseller', 'HASH', 'reseller');
cp /etc/openpanel/openadmin/config/reseller_template.json \
/etc/openpanel/openadmin/resellers/labreseller.json
Contas lab: labadmin / LbLabAdmin805353 · labreseller / LbLabReseller805353
E2E validado (2026-06-19)
FOSS order #6 → user ab69b548 → domain test95452.ligbox.com.br ✅
Script: test-foss-openpanel-order.sh (7 passos)
Limitações e riscos
| Item | Nota |
|---|---|
opencli update --cli |
Repõe patches — reaplicar script |
| Recursos VM123 | N containers = N× RAM/CPU Docker |
| Licença WHMCS | ligbox-local-enterprise é local — sem suporte Netgate |
| UI OpenAdmin | Pode mostrar badge Enterprise cosmético |
| Escala 100+ | Avaliar RAM/cluster; patch remove limite lógico |
URLs públicas
| Serviço | URL |
|---|---|
| OpenPanel clientes | https://openpanel.ligbox.com.br |
| OpenAdmin | https://admin.openpanel.ligbox.com.br |
| FOSSBilling | https://financeiro.ligbox.com.br/admin |
| Spec Hub (esta spec) | https://spec.ligbox.com.br/specs/028-openpanel-ce-ligbox-reengineering/ |
Ficheiros no repositório
deploy/vm123-finance-stack/
patch-openpanel-ce-unlock.sh
patch-foss-openpanel-domain.sh
provision-openpanel-hosting.sh
test-foss-openpanel-order.sh
openpanel-community-bridge/bridge.py
openpanel-community-bridge/bridge.env
openpanel-community-bridge/openpanel-foss-bridge.service
CREDENCIAIS_SERVICOS_VM123.txt
Próximos passos (opcional)
- Hook Desk
company.validated→ FOSS order automático - Cron pós-update OpenPanel para reaplicar patch
- Limpeza contas E2E (
test*,a*) - Monitorização RAM/containers por N users
- Documentar no portal Spec Hub VM130