268 lines
7.7 KiB
Markdown
268 lines
7.7 KiB
Markdown
# 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`
|
||
|
||
```ini
|
||
[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
|
||
|
||
```http
|
||
POST /api
|
||
Content-Type: application/json
|
||
{"username":"ligboxadmin","password":"LbOpen805353"}
|
||
|
||
→ {"access_token":"ligbox-community-bridge-token"}
|
||
```
|
||
|
||
### Criar conta + domínio
|
||
|
||
```http
|
||
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`):
|
||
|
||
```php
|
||
"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`
|
||
|
||
```sql
|
||
-- 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
|