Documentação do CS-PANEL
Guia completo de todas as páginas, módulos e elementos do painel gerado pelo install.sh.
Este documento descreve exatamente o que cada tela faz, quais campos/colunas ela expõe e quais
comandos reais do sistema operacional são executados por trás de cada ação — sem simulações.
Arquitetura
cspanel_db/var/www/cspanel/admin/enduser/api/v1 via API Key
O roteamento de ambos os painéis é feito por ?module=NOME, que carrega
modules/NOME/index.php. Cada módulo é um arquivo PHP independente, gerado por uma
função create_<nome>_module() dentro do install.sh. O visual
(glassmorphism escuro, cyan #00E5FF / roxo #7C3AED) é compartilhado via
includes/header.php e includes/footer.php.
Segurança
Modelo de privilégio mínimo (least-privilege)
O PHP roda como o usuário normal do servidor web (www-data/apache), nunca como root.
O instalador cria /etc/sudoers.d/cspanel (validado com visudo -cf antes de ativar,
com rollback automático em caso de erro de sintaxe) liberando NOPASSWD apenas para os
binários que o painel realmente precisa:
virshvirt-installqemu-imgvirt-customize
iptablesufwcertbotpdnsutil
wget (escopado) systemctl reload/restart haproxy|pdns
Toda chamada privilegiada em PHP passa pelo prefixo CS_SUDO (sudo -n),
e todo dado vindo do usuário é tratado com escapeshellarg() e validação de formato/whitelist
antes de chegar em qualquer shell_exec. Uploads de mídia aceitam apenas .iso/.img
com nomes sanitizados; downloads por URL só aceitam esquemas http/https
apontando direto para um arquivo .iso/.img (mitigação básica de SSRF).
Instalação
Execute como root em um servidor Linux limpo (Ubuntu/Debian/AlmaLinux/Rocky):
wget -N http://files.cspanel.com/install.sh chmod 0755 install.sh ./install.sh email=seu@email.com kernel=kvm
O parâmetro kernel=kvm seleciona o hipervisor principal (o instalador também
instala pacotes de OpenVZ/LXC/Xen quando solicitado, mas a criação/gestão de VPS pelo painel
hoje é 100% real apenas para KVM). Ao final, o admin fica em https://SEU_IP:4085
e o painel do cliente em https://SEU_IP:4083.
VPS
Dashboard
Tela inicial do admin. Sincroniza o status de todas as VPS com virsh domstate
antes de renderizar (via cs_sync_vps_status()).
| Elemento | Origem/Descrição |
|---|---|
| Cards de estatística | VPS Ativas, Usuários, Servidores e Uptime — contagens reais via SELECT COUNT(*) |
| Tabela "Máquinas Virtuais" | 8 VPS mais recentes: Nome, IP, CPU, RAM, Status (badge colorido) |
| Painel "Uso de Recursos" | Barras de progresso de CPU/RAM/Disco reais do host, via cs_host_stats() |
| Painel "Últimas Atividades" | Últimos 5 registros da tabela logs |
| Botão "Nova VPS" | Leva para o módulo VPS |
virsh domstate top free df uptime lscpu nprocVPS (listagem)
Lista todas as VPS reais criadas no libvirt, com ações de ciclo de vida.
| Coluna | Descrição |
|---|---|
| ID / Domínio | Identificador interno e nome real do domínio libvirt |
| Sistema / CPU / RAM / Disco | Especificações alocadas na criação |
| IP | Endereço atribuído via IP Pool |
| Console (VNC) | IP_DO_HOST:PORTA_VNC para acesso ao console gráfico |
| Status | Online / Criando / Parada / Suspensa / Erro (badge) |
| Botão | Comando real executado |
|---|---|
| Iniciar | virsh start <domínio> |
| Parar (graceful) | virsh shutdown <domínio> |
| Forçar parada | virsh destroy <domínio> (confirmação obrigatória) |
| Deletar | virsh destroy + virsh undefine --remove-all-storage --nvram, libera IP no pool e remove regras de firewall da VPS |
Nova VPS (wizard de criação)
Formulário de criação real de VPS, sem simulação de progresso — a chamada só retorna após o virt-install real ser disparado.
| Campo | Descrição |
|---|---|
| ISO (cards clicáveis) | Lista as ISOs com status ready vindas do módulo Media |
| Nome da VPS | Texto livre; vira o "domínio" libvirt após sanitização |
| vCPUs | 1 / 2 / 4 / 8 cores |
| RAM | 1, 2, 4, 8 ou 16 GB |
| Disco | 20, 40, 80, 160 ou 320 GB |
| IP (IP Pool) | Seleciona um IP livre real do pool ou "sem IP fixo" |
qemu-img create -f qcow2 <disco> <tamanho>Gvirt-install --name ... --memory ... --vcpus ... --disk ... --cdrom <iso> --network bridge=cspanelbr0 --graphics vnc --noautoconsole
Cria também uma entrada em tasks (tipo create_vps) com a saída completa do comando, visível no módulo Tarefas.
IP Pool
Gestão do pool de IPs (IPv4/IPv6) usado na criação de VPS.
| Endereço IP | Validado com FILTER_VALIDATE_IP |
| Gateway / Máscara | Opcional / padrão 255.255.255.0 |
| Tipo | IPv4 ou IPv6 |
| Coluna | Descrição |
|---|---|
| Status | Livre / Atribuído / Reservado |
| VPS | Domínio da VPS que está usando o IP (se houver) |
| Remover | Só habilitado para IPs livres (evita quebrar uma VPS em uso) |
Media (ISO) — prioridade #1
Gerenciador de imagens ISO/IMG reais em disco (CS_ISO_DIR), usadas por VPS e pelo painel do cliente.
| Elemento | Descrição |
|---|---|
| Barra de espaço em disco | Uso real de disk_total_space()/disk_free_space() na pasta de ISOs |
| Formulário "Enviar ISO" | Upload real via move_uploaded_file(), restrito a .iso/.img, nome sanitizado |
| Formulário "Baixar por URL" | Valida esquema http/https e extensão, dispara wget real em background (processo com PID rastreado) e atualiza o status ao concluir |
| Tabela de ISOs | Nome, arquivo, tipo (Linux/Windows/Outro), tamanho real em MB, status (Pronta/Baixando/Erro) |
| Excluir | Apaga o arquivo do disco e a linha do banco; bloqueado se a ISO estiver em uso por alguma VPS |
wget -q -O arquivo url & virsh pool-refresh isoRecipes
Scripts reutilizáveis executados diretamente no disco de uma VPS desligada, via virt-customize.
| Nome / Sistema | Identificação e SO alvo (Linux/Windows) |
| Script | Bash executado offline dentro do disco qcow2 |
| Executar em uma VPS | Seleciona recipe + VPS; exige que a VPS esteja com estado shut off |
virt-customize -a <disco.qcow2> --run <script>Servidor
Servidores
Cadastro dos nós/servidores físicos gerenciados pelo painel (nome, hostname, IP, hipervisor).
| Coluna | Descrição |
|---|---|
| Hypervisor | KVM / OpenVZ / LXC / Xen (badge) |
| VPS | Contagem de VPS associadas |
| Status | Online/Offline (badge) |
Storage
Storage pools reais (local/NFS/iSCSI), com uso de disco calculado a partir do caminho real informado.
| Cards de pool | Nome, caminho, barra de uso real (GB usados / GB totais), alerta se o caminho não existir mais |
| Formulário "Adicionar" | Nome, caminho no servidor (validado com is_dir()), tipo |
| Pools reais do libvirt | Saída bruta de virsh pool-list --all |
Importar VPS
Detecta VMs libvirt que existem no host mas ainda não estão no banco do painel (criadas manualmente via virsh, por exemplo) e permite "adotá-las".
virsh list --all --name · virsh dominfo · virsh domstateAo importar, lê vCPUs/memória reais da VM via dominfo e grava no banco com o estado atual (rodando/parada).
GPU Passthrough
Detecta GPUs/dispositivos PCI reais do host e permite anexá-los a uma VPS via VFIO.
lspci -nn | grep -Ei 'vga|3d|display' · virsh attach-device --config --persistentRequer IOMMU habilitado na BIOS/kernel do host e reinício da VM após a atribuição.
Rede
Firewall (Host)
Controle do firewall do próprio servidor via UFW.
ufw allow ufw deny ufw --force enable ufw disable ufw status numberedFirewall VPS
Regras de firewall isoladas por VPS, aplicadas em uma cadeia iptables dedicada (cspanel-vps-<id>) que é totalmente reconstruída a cada alteração — garantindo que exclusões realmente removam a regra do host.
| Campo | Opções |
|---|---|
| Protocolo | TCP / UDP / ICMP / Todos |
| Porta | Número ou intervalo |
| Ação | Aceitar / Bloquear / Rejeitar |
| Direção | Entrada / Saída |
iptables -N/-F/-I/-A por cadeia da VPSLoad Balancer
Gera o arquivo /etc/haproxy/haproxy.cfg completo a partir das regras cadastradas e recarrega o serviço.
| Campo | Descrição |
|---|---|
| Porta frontend | Porta pública que recebe o tráfego |
| Protocolo | TCP ou HTTP |
| Backends | Lista ip:porta,ip:porta |
| Algoritmo | Round Robin / Least Conn / Source |
cp haproxy.cfg /etc/haproxy/haproxy.cfg && systemctl reload haproxyPower DNS
Gestão de zonas e registros DNS via PowerDNS.
pdnsutil create-zone pdnsutil add-record pdnsutil delete-zone pdnsutil list-all-zones systemctl reload pdnsRegistros suportados: A, AAAA, CNAME, MX, TXT, NS.
SSL Settings
Emissão de certificados Let's Encrypt reais.
certbot certonly --standalone --non-interactive --agree-tos -m EMAIL -d DOMINIO · certbot delete --cert-nameRequer porta 80 livre e DNS do domínio já apontando para o servidor (modo standalone).
Financeiro
Planos
Cadastro de planos de venda (CPU, RAM, disco, banda, preço) usados como referência comercial.
Faturamento
Geração e controle de faturas por usuário/VPS.
| Coluna | Descrição |
|---|---|
| Status | Pendente / Paga / Vencida / Cancelada |
| Ações | Marcar como paga, remover |
Sistema
Usuários
Cadastro de clientes do painel (usuário, e-mail, senha com password_hash(), limite de VPS).
API Credentials
Exibe e permite regenerar a API Key/Password (geradas com random_bytes()) usadas pelos endpoints em /api/v1.
Configuration
Edição direta da tabela settings — cada linha vira um campo de formulário automaticamente.
Tasks
Fila/histórico real de operações assíncronas (criação de VPS, download de ISO, recipes), com saída bruta dos comandos executados, visível em um painel expansível por linha.
Backup
Backup e restauração de discos de VPS.
qemu-img convert -O qcow2 origem destino · restauração via cp (exige VPS desligada)Logs
Auditoria completa: data, ação, detalhes e IP de origem das últimas 300 ações registradas por cs_log() em todos os módulos.
Cloud Resources
Visão de capacidade: vCPUs/RAM/disco alocados (somados das VPS ativas) versus capacidade real do host.
virsh nodeinfoPainel do Cliente (Enduser)
Dashboard (Enduser)
Visão do cliente: total de VPS próprias, quantas estão em execução, limite do plano contratado e lista das 5 VPS mais recentes com status real (sincronizado via virsh domstate).
Minhas VPS (Enduser)
Wizard de 3 passos (Categoria → Sistema → Configuração) para o cliente criar sua própria VPS,
respeitando o limite de VPS do seu plano. A lista de sistemas operacionais vem das ISOs reais
cadastradas em Media (compartilhado com o admin) e o deploy executa o mesmo fluxo real de
qemu-img + virt-install usado no painel administrativo — nada é
simulado nem usa IP aleatório.
| Ação | Comando real |
|---|---|
| Iniciar | virsh start <domínio> |
| Parar | virsh shutdown <domínio> |
| Criar VPS | qemu-img create + virt-install ... --noautoconsole, com IP real do IP Pool e porta VNC real |
install.sh