📦 Instalação
Código-fonte:
curl -O https://minirepo.minidc.com.br/download/minicp.tar.gz
O download é liberado apenas para IPs autorizados.
📋 Changelog (17) ver tudo / buscar →
-
Fase 1 - Painel Inicial (Flask + Apache)
O que foi feito
- Criado projeto Flask em
/opt/hosting-panel/ - Interface web com sidebar, Bootstrap 5 e Bootstrap Icons
- Dashboard com estatísticas (usuarios, dominios, disco, memoria)
- CRUD de usuarios do sistema (
useradd,chpasswd,userdel) - CRUD de dominios com VirtualHost Apache gerado automaticamente
- Configuracao PHP-FPM por dominio (pool dedicado por usuario)
- Gerenciador de servicos (Apache, PHP-FPM, MySQL, MariaDB)
- Gerenciador de arquivos basico com visualizador
- API REST (
/api/status) para dados do sistema - Persistencia em JSON (
data.json)
Estrutura criada por usuario
/home/{usuario}/ public_html/ index.html info.php logs/ tmp/ backups/VirtualHost gerado
- Apache com
proxy_fcgipara PHP-FPM via socket do pool do usuario - Socket:
/run/php/php{ver}-fpm-{usuario}.sock - Logs separados por dominio (
{dominio}-access.log,{dominio}-error.log)
- Criado projeto Flask em
-
Fase 2 - Autenticação e Áreas Separadas (Admin/Cliente)
O que foi feito
- Sistema de login via PAM (autenticacao com credenciais do Linux)
- root → acesso como Administrador (
/admin/*) - usuario do painel → acesso como Cliente (
/client/*) - Sessoes Flask com decorators
@admin_requirede@client_required - Tela de login estilizada com gradiente e branding
Area Admin (
/admin/*)- Dashboard completo do servidor
- Gerenciamento de usuarios (criar, remover, alterar senha, suspender/reativar)
- Gerenciamento de dominios (criar, remover, habilitar/desabilitar, trocar PHP)
- Gerenciamento de servicos
- Gerenciador de arquivos (acesso irrestrito ao filesystem)
Area Cliente (
/client/*)- Painel pessoal com seus dominios e uso de disco
- Visualizacao dos seus dominios
- Gerenciador de arquivos (restrito a
/home/{usuario}/) - Alteracao de senha propria (valida senha atual via PAM)
Padronizacao de diretorios
- Home dos usuarios:
/home/{usuario}/com permissao751 - Estrutura criada:
public_html/,logs/,tmp/,backups/ - DocumentRoot:
/home/{usuario}/public_html/(direto, sem subpasta de dominio) - PHP-FPM pool com
open_basedirrestrito ao home do usuario
Templates
base_admin.html- layout admin com sidebar azul/vermelho (badge ADMIN)base_client.html- layout cliente com sidebar verde (badge CLIENTE)login.html- tela de login centralizada
-
Fase 3 - Sistema de Logs e Rebranding para MageWeb
O que foi feito
- Renomeado de "Hosting Panel" para "MageWeb" em todos os templates e titulos
- Sistema de logs completo para admin e cliente
Logs Admin (
/admin/logs)- Logs do sistema: apache-access, apache-error, nginx-access, nginx-error, syslog, auth.log, php-fpm, mageweb
- Logs por dominio: selecionar qualquer dominio e ver access/error log
- Live streaming via SSE (Server-Sent Events) em tempo real com
tail -f - Filtro de quantidade de linhas (50, 100, 200, 500, 1000)
- Highlight de erros (vermelho), warnings (amarelo), info (azul)
- Botao de download do log como
.txt - Botao limpar tela
Logs Cliente (
/client/logs)- Apenas logs dos dominios do usuario logado (isolamento no backend)
- Selecao entre access log e error log
- Live streaming SSE
- Highlight de status HTTP (200 verde, 404/500 vermelho)
- Download e legenda explicativa
- Limpar logs antigos: mantem somente entradas do dia atual em todos os dominios
Endpoints SSE
GET /api/logs/stream- streaming admin (qualquer log)GET /api/client/logs/stream- streaming cliente (apenas seus dominios)
-
Fase 4 - Gerenciador de Arquivos do Cliente (Upload/Editar)
O que foi feito
- Gerenciador de arquivos completo na area do cliente com operacoes via modais
Funcionalidades
Operação Rota Descrição Upload POST /client/files/uploadArquivos, pastas e ZIPs com descompactacao Editar GET /api/client/files/content+POST /client/files/saveEditor de codigo em modal com syntax detection Criar POST /client/files/createCriar arquivo vazio ou pasta Renomear POST /client/files/renameModal para novo nome Permissoes POST /client/files/chmodModal com chmod octal + opcao recursiva para diretorios Excluir POST /client/files/deleteCom confirmacao Magento 2 POST /client/files/magento-permsAplicar permissoes Magento 2 (dirs 755, files 644) Upload avancado
- Modo Arquivos: selecao multipla, drag & drop
- Modo Pasta: upload de pasta inteira mantendo estrutura de subdiretorios
- Descompactacao automatica:
.zip,.tar.gz,.tgz- checkbox "Descompactar apos upload" - Drag & drop de pastas com
webkitGetAsEntry(navega recursivamente) - Lista com scroll, contador de pastas/arquivos, spinner durante envio
- Maximo 100MB por arquivo
Permissoes
- Modal chmod com campo octal e opcao recursiva para diretorios
- Botao Permissoes Magento 2: aplica
755em diretorios e644em arquivos recursivamente em todopublic_html/
Editor de codigo (modal)
- Carrega conteudo via AJAX (sem recarregar pagina)
- Detecta linguagem pela extensao (PHP, HTML, JS, CSS, JSON, Python, Shell, etc)
- Mostra info: linguagem, tamanho, numero de linhas
- Suporte a tecla Tab (insere 4 espacos)
- Ctrl+S salva direto
- Botao de tela cheia e word wrap
- Tema escuro (fundo
#0f172a)
Seguranca
- Todos os caminhos validados com
os.path.realpath()+startswith(user_home) - Nomes de arquivo sanitizados no upload (
re.sub) - Ownership (
chown) aplicado apos cada operacao - Limite de upload: 100MB (
MAX_CONTENT_LENGTH)
-
Fase 5 - Gerenciamento Completo de PHP
O que foi feito
- Pagina dedicada para gestao de versoes PHP (
/admin/php) - Instalacao, remocao de versoes e modulos via
apt - Editor de
php.inicom atalhos rapidos - Integracao automatica com dominios
Painel por versao instalada
Para cada PHP instalado (ex: 7.4, 8.3) mostra:
- Status do FPM (ativo/inativo)
- Lista de modulos instalados (badges)
- Dominios que usam aquela versao
- Pools FPM configuradosOperacoes
Rota Descrição GET /admin/phpPainel principal com todas as versoes POST /admin/php/installInstalar nova versao (5.6 a 8.5 disponiveis) POST /admin/php/{ver}/modules/installInstalar modulos adicionais POST /admin/php/{ver}/modules/removeRemover modulos (protege fpm/cli/common) POST /admin/php/{ver}/uninstallDesinstalar versao (bloqueia se dominio usa) POST /admin/php/{ver}/fpm-restartReiniciar PHP-FPM da versao GET /api/admin/php/{ver}/iniObter conteudo do php.ini (AJAX) POST /admin/php/{ver}/ini/saveSalvar php.ini com backup automatico (.bak) Editor php.ini (modal)
- Edicao separada para FPM e CLI
- Atalhos rapidos:
memory_limit,upload_max_filesize,post_max_size,max_execution_time,display_errors,date.timezone,error_reporting,max_input_time - Busca integrada com jump-to-line
- Ctrl+S para salvar
- Backup automatico antes de salvar
- Restart FPM automatico ao salvar php.ini do FPM
Modulos suportados
bcmath,bz2,curl,gd,gmp,igbinary,imagick,imap,intl,mbstring,mysql,opcache,pgsql,pspell,readline,redis,soap,sqlite3,xml,xmlrpc,zip,ldap,tidy,xdebug,memcached,apcu,mcryptInstalacao de nova versao
- Modal com dropdown de versoes disponiveis no repositorio
- Selecao de modulos com os mais comuns pre-marcados
- Instala
{php}-fpm,{php}-cli,{php}-common+ modulos - Habilita e inicia FPM automaticamente
- Pagina dedicada para gestao de versoes PHP (
-
Fase 6 - Servicos Avancados (Start/Stop/Enable/Disable/Status)
O que foi feito
- Pagina de servicos reescrita com controle completo do ciclo de vida
- Detecção dinâmica de serviços (todos os PHP-FPM instalados + NGINX quando presente)
Informacoes por servico
- Status: Rodando (verde), Parado (vermelho), estado customizado
- Boot: Habilitado (azul) / Desabilitado (amarelo) no systemd
- PID: Process ID quando ativo
- Memoria: Uso de RAM em MB
- Uptime: Data/hora desde quando esta rodando
Acoes
Rota Ação Quando aparece POST /admin/services/{svc}/startIniciar servico Quando parado POST /admin/services/{svc}/stopParar servico (com confirmacao) Quando rodando POST /admin/services/{svc}/restartReiniciar servico Quando rodando POST /admin/services/{svc}/enableHabilitar no boot Quando desabilitado POST /admin/services/{svc}/disableDesabilitar no boot Quando habilitado GET /api/admin/services/{svc}/statusStatus detalhado (modal) Sempre Modal de status
- Saida completa do
systemctl statuscom syntax highlight - "active (running)" em verde, "inactive (dead)" em vermelho
- Timestamps em amarelo, enabled/disabled em azul
Servicos gerenciados
apache2,nginx(quando instalado),mysql,mariadbphp{X.Y}-fpm(dinamico para cada versao instalada)
-
Fase 7 - Dashboard com Top Processos
O que foi feito
- Dashboard reorganizado com todos os stats na mesma linha
- Tabela de processos do sistema com auto-refresh
Layout do dashboard (ordem de exibicao)
- Stats em linha unica (6 cards): Usuarios, Dominios, Disco, Memoria, CPU Cores, Load Average
- Sistema - barra compacta: Uptime | Disco | Memoria
- Usuarios + Dominios - tabelas lado a lado
- Top Processos - tabela por ultimo
API de processos (
GET /api/processes)- Parametros:
sort(cpu|mem),limit(1-100) - Retorna: lista de processos, cores, load average
- Usa
ps auxcom sort dinamico
Tabela de processos
Coluna Descrição Usuario Colorido: root (vermelho), www-data (azul), mysql (ciano) PID ID do processo CPU % Porcentagem + barra visual colorida MEM % Porcentagem + barra visual colorida RSS Memoria residente (KB/MB/GB) Estado Status do processo (S, R, Z, etc) Tempo CPU time acumulado Comando Com icone por tipo (apache, php-fpm, mysql, python, node, ssh) Controles
- Ordenar por CPU ou MEM (toggle buttons)
- Limite: 15, 25 ou 50 processos
- Botao atualizar manual
- Auto-refresh a cada 10 segundos
- Scroll interno (max 500px)
Load Average
- Colorido por severidade relativa ao numero de cores
- Verde: < 80% dos cores
- Amarelo: 80-150% dos cores
- Vermelho: > 150% dos cores
-
Fase 8 - Modo de Operacao (NGINX + Apache / Apache Only)
O que foi feito
- Pagina dedicada para alternar entre modos de operacao do servidor web
- Gestao completa de certificados SSL via NGINX
- Integracao automatica com todas as funcionalidades existentes
Dois modos disponiveis
Apache Only:
Internet → Apache :80 → PHP-FPM → Resposta- Apache escuta na porta 80
- Configuracao simples, sem proxy reverso
- Ideal para servidores pequenos
NGINX + Apache:
Internet → NGINX :80/443 (SSL) → Apache :8080 → PHP-FPM → Resposta- NGINX como reverse proxy na frente (porta 80/443)
- Apache como backend (porta 8080)
- SSL/TLS gerenciado pelo NGINX
- HTTP/2 automatico com SSL
- Melhor performance para arquivos estaticos
Troca de modo (
POST /admin/operation/switch)Para NGINX + Apache:
1. Instala NGINX + Certbot automaticamente viaapt(se nao instalados)
2. Remove site default do NGINX
3. Altera Apache para porta 8080 (ports.conf)
4. Reescreve todos os VHosts Apache (*:8080)
5. Gera configs NGINX reverse proxy para cada dominio
6. Testa configs e reinicia ambos os servicosPara Apache Only:
1. Remove configs NGINX de todos os dominios
2. Para e desabilita NGINX
3. Altera Apache de volta para porta 80
4. Reescreve todos os VHosts Apache (*:80)
5. Reinicia ApacheGestao de certificados SSL
Rota Descrição POST /admin/operation/cert/issueEmitir certificado Let's Encrypt via certbot POST /admin/operation/cert/customUpload de certificado customizado (.crt + .key) POST /admin/operation/cert/removeRemover SSL de um dominio POST /admin/operation/cert/renewRenovar todos os certificados Let's Encrypt Let's Encrypt
- Modal com selecao de dominio + e-mail
- Usa
certbot certonly --nginx - Inclui aliases do dominio automaticamente
- Certificados em
/etc/letsencrypt/live/{dominio}/ - Reconstroi config NGINX com bloco SSL (443 + redirect 80→443)
Certificado customizado
- Upload via modal (arquivo .crt/.pem + .key)
- Salvo em
/etc/ssl/mageweb/{dominio}/ - Permissoes restritas na chave privada (chmod 600)
Config NGINX gerada (com SSL)
server { listen 80; server_name dominio.com; return 301 https://$host$request_uri; } server { listen 443 ssl http2; server_name dominio.com; ssl_certificate /etc/letsencrypt/live/dominio.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/dominio.com/privkey.pem; ssl_protocols TLSv1.2 TLSv1.3; # Security headers (X-Frame-Options, HSTS, etc) location / { proxy_pass http://127.0.0.1:8080; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto https; } }Painel de status
- Apache: ativo/parado + porta atual
- NGINX: instalado / ativo / parado / nao instalado
- Certbot: instalado ou nao
- Total de certificados SSL ativos
- Diagrama ASCII da arquitetura atual
Integracoes automaticas
- NGINX aparece na pagina de Servicos (start/stop/restart/enable/disable/status)
- Logs NGINX adicionados na pagina de Logs (nginx-access, nginx-error)
- Novo item Modo de Operacao na sidebar sob "Infraestrutura"
-
Fase 9 - Cron Jobs do Cliente
O que foi feito
- Pagina dedicada para gestao de cron jobs na area do cliente (
/client/cron) - Menu Cron Jobs adicionado na sidebar do cliente
Funcionalidades
Rota Método Descrição /client/cronGET Listar cron jobs do usuario /client/cron/addPOST Adicionar novo cron job /client/cron/editPOST Editar cron job existente /client/cron/togglePOST Habilitar/desabilitar job (prefixo #DISABLED#)/client/cron/deletePOST Remover cron job Interface
- Tabela com status (ativo/desabilitado), agendamento com descricao legivel, comando
- Descricao automatica do agendamento (ex: "A cada 5 min", "Diario as 03:00")
- Modal de adicao e edicao com campos separados (minuto, hora, dia, mes, semana)
- Atalhos rapidos: a cada min, 5 min, 15 min, 30 min, 1 hora, diario, semanal, mensal
- Card de exemplos comuns + caminhos PHP (
/usr/bin/php,/usr/bin/php8.3,/usr/bin/php7.4) - Exemplos de comandos: script PHP, Magento 2 cron:run, Laravel scheduler
- Pagina dedicada para gestao de cron jobs na area do cliente (
-
Fase 10 - Gestao Avancada de Usuarios (Exclusao Completa + Suspensao)
O que foi feito
- Exclusao completa de usuario com limpeza total de recursos
- Sistema de suspensao/reativacao de contas
- Modal de confirmacao com digitacao do nome do usuario
- Opcao de backup ZIP antes da exclusao
Exclusao completa (
POST /admin/users/{user}/delete)Remove permanentemente:
- Conta do sistema Linux (userdel)
- Diretorio home completo (/home/{usuario}/)
- Todos os dominios e VirtualHosts Apache
- Configs NGINX e certificados SSL
- Pools PHP-FPM de todas as versoes
- Logs de acesso e erro do Apache
- Crontab do usuario
- Registros nodata.jsonBackup antes de excluir
- Checkbox marcado por padrao no modal de exclusao
- Gera ZIP do diretorio home completo
- Download automatico antes da exclusao
- Arquivo temporario removido apos envio
Suspensao de conta (
POST /admin/users/{user}/suspend)Ao suspender:
- Bloqueia login:usermod -L(lock) + shell para/usr/sbin/nologin
- Desabilita todos os sites:a2dissiteem cada dominio
- Status "Suspenso" no painel (badge vermelho)
- Linha com opacidade reduzida na tabelaAo reativar:
- Desbloqueia login:usermod -U(unlock) + shell para/bin/bash
- Reabilita todos os sites:a2ensiteem cada dominio
- Status "Ativo" restaurado -
Fase 11 - Terminal Web do Cliente
O que foi feito
- Terminal web completo na area do cliente via WebSocket (flask-socketio + xterm.js)
- Menu Terminal na sidebar do cliente abre modal fullscreen
Implementacao
- Backend: PTY real (
pty.fork()) executando/bin/bash -r(restricted) como o usuario - Frontend: xterm.js 5.5 com tema escuro, cursor piscando, scrollback 5000 linhas
- Comunicacao: WebSocket via Socket.IO (namespace
/terminal)
Seguranca
- Shell restrito (
bash -r) impede alterar PATH/SHELL/ENV e redirecionar - Alias
cdcom guard: verificapwd -Pe bloqueia navegacao fora de/home/{usuario}/ PROMPT_COMMANDverifica diretorio a cada comando- PATH limitado a
/usr/local/bin:/usr/bin:/bin - Uma unica sessao por usuario (mata sessoes anteriores ao conectar)
- Transporte apenas WebSocket (sem polling duplicado)
Interface
- Modal fullscreen com header mostrando
usuario@servidor - Badge de status: Conectando / Conectado / Desconectado
- Auto-resize ao redimensionar janela
- Cores 256 com tema personalizado
-
Fase 12 - Integração HAProxy (Gestao Remota)
O que foi feito
- Pagina dedicada para gestao do HAProxy remoto (
/admin/haproxy) - Integracao via API REST com autenticacao Basic Auth
- Backend dedicado por servidor (
bk_{hostname}) criado automaticamente - Filtro inteligente: exibe apenas dominios/certs/servidores deste servidor
Arquitetura
MageWeb (10.110.2.21) → HAProxy API (10.110.2.15:5000) ↓ Backend: bk_mageweb1 Server: mageweb1 (10.110.2.21:80) ↓ ACLs por dominio → bk_mageweb1Auto-registro
- Ao acessar a pagina, detecta hostname e IP do servidor
- Cria backend
bk_{hostname}no HAProxy se nao existir - Adiciona este servidor como primeiro membro do backend
Dominios
Rota Descrição /admin/haproxyPainel com dominios, certs e backend deste servidor /admin/haproxy/domain/addAdicionar dominio apontando para bk_{hostname}/admin/haproxy/domain/removeRemover dominio do HAProxy /admin/haproxy/provisionProvisionar completo: dominio + SSL no backend deste servidor Certificados SSL
Rota Descrição /admin/haproxy/cert/generateGerar Let's Encrypt via HAProxy /admin/haproxy/cert/renewRenovar todos os certificados /admin/haproxy/cert/removeRemover certificado Backend / Servidores
Rota Descrição /admin/haproxy/backend/add-serverAdicionar servidor ao backend /admin/haproxy/backend/remove-serverRemover servidor do backend /admin/haproxy/backend/toggle-serverHabilitar/desabilitar servidor /admin/haproxy/backend/removeRemover backend inteiro Provisionamento
- Botao "Provisionar Dominio": adiciona ACL no HAProxy apontando para
bk_{hostname}+ gera certificado SSL - Botao "Gerar SSL" inline em dominios sem certificado
Filtro de dados
- Dominios: somente os que apontam para
bk_{hostname} - Certificados: somente os que correspondem aos dominios filtrados
- Servidores: somente os do backend
bk_{hostname}
- Pagina dedicada para gestao do HAProxy remoto (
-
Fase 13 - Tela de Configuracoes
O que foi feito
- Pagina dedicada de configuracoes do painel (
/admin/config) - Menu Configuracoes na sidebar admin (secao Sistema)
- Persistencia em
data.json(chaveconfig)
Configuracoes disponiveis
Geral:
- Nome do painelHAProxy API:
- Toggle habilitar/desabilitar
- Host/IP, Porta, Path da API
- Usuario e Senha (senha oculta, manter vazio preserva a atual)
- Botao Testar Conexao — valida se a API responde
- Preview da URL completa em tempo real
- HAProxy na sidebar so aparece quando habilitadoRotas
Rota Método Descrição /admin/configGET Tela de configuracoes /admin/config/savePOST Salvar configuracoes /admin/config/haproxy-testPOST Testar conexao HAProxy API Context Processor
configinjetado automaticamente em todos os templates via@app.context_processor- Sidebar admin condicional: HAProxy so aparece se
haproxy_enabled == true
- Pagina dedicada de configuracoes do painel (
-
Estrutura Final do Projeto
/opt/hosting-panel/ app.py # Aplicacao Flask (2941 linhas, 73 rotas) data.json # Persistencia (usuarios, dominios, modo, certs, config) history.md # Este arquivo templates/ login.html # Tela de login (PAM) base_admin.html # Layout admin (sidebar + flash messages) base_client.html # Layout cliente (sidebar + terminal modal) admin/ dashboard.html # Dashboard (stats, processos, usuarios, dominios) users.html # CRUD de usuarios (excluir, suspender, backup) domains.html # CRUD de dominios php.html # Gestao PHP (versoes, modulos, php.ini) services.html # Servicos (start/stop/restart/enable/disable) operation.html # Modo de operacao (Apache/NGINX+Apache, SSL) haproxy.html # Gestao HAProxy (dominios, certs, backends) config.html # Configuracoes do painel logs.html # Logs do sistema + live streaming files.html # Gerenciador de arquivos (admin) file_view.html # Visualizador de arquivos (admin) client/ dashboard.html # Painel do cliente (dominios, disco, senha) domains.html # Dominios do cliente cron.html # Cron jobs do cliente logs.html # Logs do cliente + live streaming + limpar antigos files.html # Gerenciador de arquivos (upload pastas/zip, chmod recursivo, Magento 2) file_view.html # Visualizador de arquivos (cliente) -
Mapa Completo de Rotas (73 rotas)
Autenticação
Rota Método Descrição /GET Redirect para login ou dashboard /loginGET, POST Tela de login (PAM) /logoutGET Encerrar sessao Admin - Dashboard
Rota Método Descrição /adminGET Dashboard (stats, processos) Admin - Usuarios
Rota Método Descrição /admin/usersGET Listar usuarios /admin/users/createPOST Criar usuario (useradd) /admin/users/{user}/deletePOST Remover usuario (completo + backup opcional) /admin/users/{user}/passwordPOST Alterar senha /admin/users/{user}/suspendPOST Suspender/reativar conta Admin - Dominios
Rota Método Descrição /admin/domainsGET Listar dominios /admin/domains/createPOST Criar dominio + VHost + FPM pool /admin/domains/{dom}/deletePOST Remover dominio /admin/domains/{dom}/togglePOST Habilitar/desabilitar site /admin/domains/{dom}/phpPOST Trocar versao PHP Admin - PHP
Rota Método Descrição /admin/phpGET Painel de versoes PHP /admin/php/installPOST Instalar nova versao /admin/php/{ver}/modules/installPOST Instalar modulos /admin/php/{ver}/modules/removePOST Remover modulos /admin/php/{ver}/uninstallPOST Desinstalar versao /admin/php/{ver}/fpm-restartPOST Reiniciar FPM /admin/php/{ver}/ini/savePOST Salvar php.ini Admin - Servicos
Rota Método Descrição /admin/servicesGET Listar servicos /admin/services/{svc}/{action}POST start/stop/restart/enable/disable Admin - Modo de Operacao
Rota Método Descrição /admin/operationGET Painel de modo de operacao /admin/operation/switchPOST Trocar modo (apache / nginx-apache) /admin/operation/cert/issuePOST Emitir SSL Let's Encrypt /admin/operation/cert/customPOST Upload certificado customizado /admin/operation/cert/removePOST Remover SSL /admin/operation/cert/renewPOST Renovar todos os certs Admin - HAProxy
Rota Método Descrição /admin/haproxyGET Painel HAProxy (dominios, certs, backend) /admin/haproxy/domain/addPOST Adicionar dominio ao HAProxy /admin/haproxy/domain/removePOST Remover dominio do HAProxy /admin/haproxy/cert/generatePOST Gerar certificado Let's Encrypt /admin/haproxy/cert/renewPOST Renovar todos os certificados /admin/haproxy/cert/removePOST Remover certificado /admin/haproxy/backend/add-serverPOST Adicionar servidor ao backend /admin/haproxy/backend/remove-serverPOST Remover servidor do backend /admin/haproxy/backend/toggle-serverPOST Habilitar/desabilitar servidor /admin/haproxy/backend/removePOST Remover backend /admin/haproxy/provisionPOST Provisionar dominio (ACL + SSL) Admin - Configuracoes
Rota Método Descrição /admin/configGET Tela de configuracoes /admin/config/savePOST Salvar configuracoes /admin/config/haproxy-testPOST Testar conexao HAProxy Admin - Arquivos
Rota Método Descrição /admin/filesGET Navegador de arquivos /admin/files/viewGET Visualizar arquivo Admin - Logs
Rota Método Descrição /admin/logsGET Painel de logs Cliente
Rota Método Descrição /clientGET Dashboard do cliente /client/domainsGET Meus dominios /client/filesGET Meus arquivos /client/files/viewGET Visualizar arquivo /client/files/uploadPOST Upload de arquivos/pastas/ZIP /client/files/savePOST Salvar edicao /client/files/createPOST Criar arquivo/pasta /client/files/deletePOST Excluir arquivo/pasta /client/files/renamePOST Renomear /client/files/chmodPOST Alterar permissoes (com recursivo) /client/files/magento-permsPOST Aplicar permissoes Magento 2 /client/cronGET Listar cron jobs /client/cron/addPOST Adicionar cron job /client/cron/editPOST Editar cron job /client/cron/togglePOST Habilitar/desabilitar cron job /client/cron/deletePOST Remover cron job /client/logsGET Meus logs /client/logs/purgePOST Limpar logs antigos (manter so hoje) /client/passwordPOST Alterar minha senha APIs
Rota Método Descrição /api/statusGET Status do sistema (disco, mem, uptime) /api/processesGET Top processos (CPU/MEM) /api/logs/streamGET SSE streaming de logs (admin) /api/client/logs/streamGET SSE streaming de logs (cliente) /api/client/files/contentGET Conteudo de arquivo (AJAX editor) /api/admin/php/{ver}/iniGET Conteudo php.ini (AJAX editor) /api/admin/services/{svc}/statusGET systemctl status (AJAX modal) /api/admin/haproxy/{endpoint}GET Proxy para HAProxy API WebSocket
Namespace Descrição /terminalTerminal web do cliente (PTY via Socket.IO) -
Tecnologias
Componente Tecnologia Backend Python 3 + Flask + Flask-SocketIO Frontend HTML5 + Bootstrap 5.3 + Bootstrap Icons Terminal xterm.js 5.5 + Socket.IO Autenticacao PAM (python-pam) Web Server Apache 2.4 / NGINX (opcional) Load Balancer HAProxy (integracao via API REST remota) PHP PHP-FPM (multiplas versoes via Sury) SSL Let's Encrypt (certbot) / Customizado Persistencia JSON ( data.json)Streaming Server-Sent Events (SSE) Processos ps aux,systemctlCompactacao zip, unzip, tar -
Como executar
# Iniciar em foreground (desenvolvimento) cd /opt/hosting-panel && python3 app.py # Iniciar em background (producao) nohup python3 /opt/hosting-panel/app.py > /var/log/hosting-panel.log 2>&1 & # Acesso # Admin: login com root + senha do sistema # Cliente: login com usuario criado pelo painel + sua senha