Download
Código-fonte:
curl -O https://minirepo.minidc.com.br/download/minicp.tar.gz
O download é liberado apenas para IPs autorizados.
Changelog
-
Fase 1 - Painel Inicial (Flask + Apache 30/06/2026### 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_fcgi` para 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`) ---
-
Fase 2 - Autenticação e Áreas Separadas (Admin/Cliente 30/06/2026### 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_required` e `@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 permissao `751` - Estrutura criada: `public_html/`, `logs/`, `tmp/`, `backups/` - DocumentRoot: `/home/{usuario}/public_html/` (direto, sem subpasta de dominio) - PHP-FPM pool com `open_basedir` restrito 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 30/06/2026### 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 30/06/2026### 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/upload` | Arquivos, pastas e ZIPs com descompactacao | | **Editar** | `GET /api/client/files/content` + `POST /client/files/save` | Editor de codigo em modal com syntax detection | | **Criar** | `POST /client/files/create` | Criar arquivo vazio ou pasta | | **Renomear** | `POST /client/files/rename` | Modal para novo nome | | **Permissoes** | `POST /client/files/chmod` | Modal com chmod octal + opcao recursiva para diretorios | | **Excluir** | `POST /client/files/delete` | Com confirmacao | | **Magento 2** | `POST /client/files/magento-perms` | Aplicar 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 `755` em diretorios e `644` em arquivos recursivamente em todo `public_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 30/06/2026### O que foi feito - Pagina dedicada para gestao de versoes PHP (`/admin/php`) - Instalacao, remocao de versoes e modulos via `apt` - Editor de `php.ini` com 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 configurados ### Operacoes | Rota | Descrição | |---|---| | `GET /admin/php` | Painel principal com todas as versoes | | `POST /admin/php/install` | Instalar nova versao (5.6 a 8.5 disponiveis) | | `POST /admin/php/{ver}/modules/install` | Instalar modulos adicionais | | `POST /admin/php/{ver}/modules/remove` | Remover modulos (protege fpm/cli/common) | | `POST /admin/php/{ver}/uninstall` | Desinstalar versao (bloqueia se dominio usa) | | `POST /admin/php/{ver}/fpm-restart` | Reiniciar PHP-FPM da versao | | `GET /api/admin/php/{ver}/ini` | Obter conteudo do php.ini (AJAX) | | `POST /admin/php/{ver}/ini/save` | Salvar 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`, `mcrypt` ### Instalacao 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 ---
-
Fase 6 - Servicos Avancados (Start/Stop/Enable/Disable/Status 30/06/2026### 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}/start` | Iniciar servico | Quando parado | | `POST /admin/services/{svc}/stop` | Parar servico (com confirmacao) | Quando rodando | | `POST /admin/services/{svc}/restart` | Reiniciar servico | Quando rodando | | `POST /admin/services/{svc}/enable` | Habilitar no boot | Quando desabilitado | | `POST /admin/services/{svc}/disable` | Desabilitar no boot | Quando habilitado | | `GET /api/admin/services/{svc}/status` | Status detalhado (modal) | Sempre | ### Modal de status - Saida completa do `systemctl status` com syntax highlight - "active (running)" em verde, "inactive (dead)" em vermelho - Timestamps em amarelo, enabled/disabled em azul ### Servicos gerenciados - `apache2`, `nginx` (quando instalado), `mysql`, `mariadb` - `php{X.Y}-fpm` (dinamico para cada versao instalada) ---
-
Fase 7 - Dashboard com Top Processos 30/06/2026### 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) 1. **Stats em linha unica** (6 cards): Usuarios, Dominios, Disco, Memoria, CPU Cores, Load Average 2. **Sistema** - barra compacta: Uptime | Disco | Memoria 3. **Usuarios + Dominios** - tabelas lado a lado 4. **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 aux` com 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 30/06/2026### 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 via `apt` (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 servicos **Para 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 Apache ### Gestao de certificados SSL | Rota | Descrição | |---|---| | `POST /admin/operation/cert/issue` | Emitir certificado Let's Encrypt via certbot | | `POST /admin/operation/cert/custom` | Upload de certificado customizado (.crt + .key) | | `POST /admin/operation/cert/remove` | Remover SSL de um dominio | | `POST /admin/operation/cert/renew` | Renovar 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) ```nginx 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 30/06/2026### 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/cron` | GET | Listar cron jobs do usuario | | `/client/cron/add` | POST | Adicionar novo cron job | | `/client/cron/edit` | POST | Editar cron job existente | | `/client/cron/toggle` | POST | Habilitar/desabilitar job (prefixo `#DISABLED#`) | | `/client/cron/delete` | POST | 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 ---
-
Fase 10 - Gestao Avancada de Usuarios (Exclusao Completa + Suspensao 30/06/2026### 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 no `data.json` ### Backup 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: `a2dissite` em cada dominio - Status "Suspenso" no painel (badge vermelho) - Linha com opacidade reduzida na tabela **Ao reativar:** - Desbloqueia login: `usermod -U` (unlock) + shell para `/bin/bash` - Reabilita todos os sites: `a2ensite` em cada dominio - Status "Ativo" restaurado ---
-
Fase 11 - Terminal Web do Cliente 30/06/2026### 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 `cd` com guard: verifica `pwd -P` e bloqueia navegacao fora de `/home/{usuario}/` - `PROMPT_COMMAND` verifica 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 30/06/2026### 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_mageweb1 ``` ### Auto-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/haproxy` | Painel com dominios, certs e backend deste servidor | | `/admin/haproxy/domain/add` | Adicionar dominio apontando para `bk_{hostname}` | | `/admin/haproxy/domain/remove` | Remover dominio do HAProxy | | `/admin/haproxy/provision` | Provisionar completo: dominio + SSL no backend deste servidor | ### Certificados SSL | Rota | Descrição | |---|---| | `/admin/haproxy/cert/generate` | Gerar Let's Encrypt via HAProxy | | `/admin/haproxy/cert/renew` | Renovar todos os certificados | | `/admin/haproxy/cert/remove` | Remover certificado | ### Backend / Servidores | Rota | Descrição | |---|---| | `/admin/haproxy/backend/add-server` | Adicionar servidor ao backend | | `/admin/haproxy/backend/remove-server` | Remover servidor do backend | | `/admin/haproxy/backend/toggle-server` | Habilitar/desabilitar servidor | | `/admin/haproxy/backend/remove` | Remover 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}` ---
-
Fase 13 - Tela de Configuracoes 30/06/2026### O que foi feito - Pagina dedicada de configuracoes do painel (`/admin/config`) - Menu **Configuracoes** na sidebar admin (secao Sistema) - Persistencia em `data.json` (chave `config`) ### Configuracoes disponiveis **Geral:** - Nome do painel **HAProxy 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 habilitado ### Rotas | Rota | Método | Descrição | |---|---|---| | `/admin/config` | GET | Tela de configuracoes | | `/admin/config/save` | POST | Salvar configuracoes | | `/admin/config/haproxy-test` | POST | Testar conexao HAProxy API | ### Context Processor - `config` injetado automaticamente em todos os templates via `@app.context_processor` - Sidebar admin condicional: HAProxy so aparece se `haproxy_enabled == true` ---
-
Estrutura Final do Projeto 30/06/2026``` /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 30/06/2026### Autenticação | Rota | Método | Descrição | |---|---|---| | `/` | GET | Redirect para login ou dashboard | | `/login` | GET, POST | Tela de login (PAM) | | `/logout` | GET | Encerrar sessao | ### Admin - Dashboard | Rota | Método | Descrição | |---|---|---| | `/admin` | GET | Dashboard (stats, processos) | ### Admin - Usuarios | Rota | Método | Descrição | |---|---|---| | `/admin/users` | GET | Listar usuarios | | `/admin/users/create` | POST | Criar usuario (useradd) | | `/admin/users/{user}/delete` | POST | Remover usuario (completo + backup opcional) | | `/admin/users/{user}/password` | POST | Alterar senha | | `/admin/users/{user}/suspend` | POST | Suspender/reativar conta | ### Admin - Dominios | Rota | Método | Descrição | |---|---|---| | `/admin/domains` | GET | Listar dominios | | `/admin/domains/create` | POST | Criar dominio + VHost + FPM pool | | `/admin/domains/{dom}/delete` | POST | Remover dominio | | `/admin/domains/{dom}/toggle` | POST | Habilitar/desabilitar site | | `/admin/domains/{dom}/php` | POST | Trocar versao PHP | ### Admin - PHP | Rota | Método | Descrição | |---|---|---| | `/admin/php` | GET | Painel de versoes PHP | | `/admin/php/install` | POST | Instalar nova versao | | `/admin/php/{ver}/modules/install` | POST | Instalar modulos | | `/admin/php/{ver}/modules/remove` | POST | Remover modulos | | `/admin/php/{ver}/uninstall` | POST | Desinstalar versao | | `/admin/php/{ver}/fpm-restart` | POST | Reiniciar FPM | | `/admin/php/{ver}/ini/save` | POST | Salvar php.ini | ### Admin - Servicos | Rota | Método | Descrição | |---|---|---| | `/admin/services` | GET | Listar servicos | | `/admin/services/{svc}/{action}` | POST | start/stop/restart/enable/disable | ### Admin - Modo de Operacao | Rota | Método | Descrição | |---|---|---| | `/admin/operation` | GET | Painel de modo de operacao | | `/admin/operation/switch` | POST | Trocar modo (apache / nginx-apache) | | `/admin/operation/cert/issue` | POST | Emitir SSL Let's Encrypt | | `/admin/operation/cert/custom` | POST | Upload certificado customizado | | `/admin/operation/cert/remove` | POST | Remover SSL | | `/admin/operation/cert/renew` | POST | Renovar todos os certs | ### Admin - HAProxy | Rota | Método | Descrição | |---|---|---| | `/admin/haproxy` | GET | Painel HAProxy (dominios, certs, backend) | | `/admin/haproxy/domain/add` | POST | Adicionar dominio ao HAProxy | | `/admin/haproxy/domain/remove` | POST | Remover dominio do HAProxy | | `/admin/haproxy/cert/generate` | POST | Gerar certificado Let's Encrypt | | `/admin/haproxy/cert/renew` | POST | Renovar todos os certificados | | `/admin/haproxy/cert/remove` | POST | Remover certificado | | `/admin/haproxy/backend/add-server` | POST | Adicionar servidor ao backend | | `/admin/haproxy/backend/remove-server` | POST | Remover servidor do backend | | `/admin/haproxy/backend/toggle-server` | POST | Habilitar/desabilitar servidor | | `/admin/haproxy/backend/remove` | POST | Remover backend | | `/admin/haproxy/provision` | POST | Provisionar dominio (ACL + SSL) | ### Admin - Configuracoes | Rota | Método | Descrição | |---|---|---| | `/admin/config` | GET | Tela de configuracoes | | `/admin/config/save` | POST | Salvar configuracoes | | `/admin/config/haproxy-test` | POST | Testar conexao HAProxy | ### Admin - Arquivos | Rota | Método | Descrição | |---|---|---| | `/admin/files` | GET | Navegador de arquivos | | `/admin/files/view` | GET | Visualizar arquivo | ### Admin - Logs | Rota | Método | Descrição | |---|---|---| | `/admin/logs` | GET | Painel de logs | ### Cliente | Rota | Método | Descrição | |---|---|---| | `/client` | GET | Dashboard do cliente | | `/client/domains` | GET | Meus dominios | | `/client/files` | GET | Meus arquivos | | `/client/files/view` | GET | Visualizar arquivo | | `/client/files/upload` | POST | Upload de arquivos/pastas/ZIP | | `/client/files/save` | POST | Salvar edicao | | `/client/files/create` | POST | Criar arquivo/pasta | | `/client/files/delete` | POST | Excluir arquivo/pasta | | `/client/files/rename` | POST | Renomear | | `/client/files/chmod` | POST | Alterar permissoes (com recursivo) | | `/client/files/magento-perms` | POST | Aplicar permissoes Magento 2 | | `/client/cron` | GET | Listar cron jobs | | `/client/cron/add` | POST | Adicionar cron job | | `/client/cron/edit` | POST | Editar cron job | | `/client/cron/toggle` | POST | Habilitar/desabilitar cron job | | `/client/cron/delete` | POST | Remover cron job | | `/client/logs` | GET | Meus logs | | `/client/logs/purge` | POST | Limpar logs antigos (manter so hoje) | | `/client/password` | POST | Alterar minha senha | ### APIs | Rota | Método | Descrição | |---|---|---| | `/api/status` | GET | Status do sistema (disco, mem, uptime) | | `/api/processes` | GET | Top processos (CPU/MEM) | | `/api/logs/stream` | GET | SSE streaming de logs (admin) | | `/api/client/logs/stream` | GET | SSE streaming de logs (cliente) | | `/api/client/files/content` | GET | Conteudo de arquivo (AJAX editor) | | `/api/admin/php/{ver}/ini` | GET | Conteudo php.ini (AJAX editor) | | `/api/admin/services/{svc}/status` | GET | systemctl status (AJAX modal) | | `/api/admin/haproxy/{endpoint}` | GET | Proxy para HAProxy API | ### WebSocket | Namespace | Descrição | |---|---| | `/terminal` | Terminal web do cliente (PTY via Socket.IO) |
-
Tecnologias 30/06/2026| 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`, `systemctl` | | Compactacao | zip, unzip, tar |
-
Como executar 30/06/2026```bash # 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 ```