Instalação

Instalação

Um comando. O instalador é idempotente: rodar de novo atualiza o plugin sem tocar nos stacks nem nos dados.

Requisitos

ItemExigência
PainelcPanel/WHM instalado, acesso root
SistemaCloudLinux, AlmaLinux, Rocky, CentOS ou RHEL, versão 8 ou 9
Servidor webea-nginx obrigatório: é ele que publica os redirecionamentos. Não precisa estar instalado: o instalador explica o que muda (nginx assume 80/443, Apache vai para 81/444) e pergunta antes
Handler de PHPPHP com uid por conta: cgi/suexec, suPHP, fcgid ou lsapi. Com PHP como módulo do Apache (dso) o instalador recusa instalar: nesse modo o PHP de todas as contas roda com o usuário do servidor web e o dPanel não consegue isolar um cliente do outro. Ajuste em WHM → MultiPHP Manager
Dockernão precisa estar instalado, o instalador cuida disso
Discoao menos 5 GB livres; imagens Docker crescem rápido
Memóriao teto padrão dos containers é 2,2 GB; ajuste conforme o servidor
Firewall Se o servidor usa CSF, o instalador integra os dois automaticamente. Sem CSF, as regras de isolamento continuam sendo aplicadas; só a reposição após reinício do firewall deixa de existir, e o watchdog cobre isso.

Instalar

Como root, na máquina do servidor:

git clone <repositorio> dpanel
cd dpanel
bash install.sh

Ao terminar, o plugin aparece em WHM → Plugins → dPanel Docker. Se você já estava com o WHM aberto, recarregue a página.

A instalação reinicia dois serviços O docker (se já existia) e o cpsrvd, que é o serviço do próprio WHM/cPanel. O reinício do cpsrvd derruba sessões abertas do painel por alguns segundos; sites, e-mail e banco não são afetados.

O que o instalador faz

Nesta ordem, parando no primeiro erro:

  • Confere que é root, que há cPanel e que o sistema é da família RHEL 8/9.
  • Cria /var/cpanel/dpanel/ e o usuário de sistema dpanel, usado para rodar o parser de YAML sem privilégio.
  • Copia o plugin e valida a sintaxe dos programas antes de expor no WHM.
  • Instala docker-ce e o plugin Compose v2 a partir do repositório oficial do Docker (se ainda não houver).
  • Escreve /etc/docker/daemon.json: redes fixas em 172.17/172.18, publicação padrão em 127.0.0.1, rotação de log, live-restore e o cgroup-parent apontando para o teto global.
  • Cria o dpanel.slice do systemd, o limite global de memória e CPU dos containers, aplicado pelo kernel.
  • Aplica as regras de isolamento e instala os três gatilhos que as mantêm vivas.
  • Configura rotação dos logs e registra o plugin no WHM via AppConfig.

Um daemon.json já existente é preservado como backup antes de ser substituído; revise se você tinha ajustes próprios.

Opções

ComandoEfeito
bash install.shinstalação ou atualização completa
bash install.sh --files-only só atualiza o código do plugin; não toca em Docker, firewall ou systemd
bash install.sh --no-docker instala o plugin sem mexer no Docker (útil se você já gerencia o daemon)
bash install.sh --yes não pergunta nada; autoriza instalar o ea-nginx e a troca de portas. Obrigatório quando a execução não é interativa
bash install.sh --disable-nginx-cache desliga o cache do ea-nginx no sistema e em todas as contas. O tráfego dos containers já ignora o cache de qualquer forma
bash install.sh --verify não altera nada; só relata o estado da instalação, incluindo nginx -t

Verificar

bash install.sh --verify

Resposta esperada:

==> Verificacao
  ok   AppConfig registrado
  ok   plugin instalado em /usr/local/cpanel/whostmgr/docroot/cgi/dpanel
  ok   docker Docker version 29.x
  ok   docker ativo
  ok   isolamento ativo

Pela linha de comando também dá para consultar a API, útil quando algo não abre no navegador:

cd /usr/local/cpanel/whostmgr/docroot/cgi/dpanel
./api.cgi --action=health

Atualizar

Baixe a nova versão e rode o instalador de novo. Stacks em execução, redirecionamentos e logs são preservados.

cd dpanel && git pull
bash install.sh

Para trocar só o código do plugin, sem reiniciar o Docker:

bash install.sh --files-only

Desinstalar

bash uninstall.sh

Remove o plugin do WHM, as regras de firewall e os serviços auxiliares. Preserva os containers em execução, os stacks publicados, as regras do nginx e o /etc/docker/daemon.json: os sites publicados continuam no ar.

Para remover tudo:

bash uninstall.sh --purge

Aí sim os stacks são derrubados e, na sequência, as regras do nginx são removidas e o serviço recarregado, nessa ordem, para nenhum domínio ficar apontando para container morto e devolvendo 502. Includes antigos do Apache (versões 0.1.x) também são limpos, e /var/cpanel/dpanel é apagado. O Docker Engine nunca é desinstalado: isso fica por sua conta.

--purge apaga dados de cliente Os dados ficam em /home/{conta}/docker/ — inclusive os volumes nomeados, que o dPanel materializa como pastas ali — e o --purge não toca no /home. Mas os stacks são derrubados e a configuração some. Confira o que está no ar antes.

Nota sobre o CSF

O CSF reconstrói todas as cadeias do iptables quando reinicia, e isso apaga também as cadeias que o Docker cria para publicar portas e dar saída aos containers. Sem tratamento, um csf -r deixaria os containers sem rede.

O instalador resolve isso de três formas, para não depender de uma só:

  • DOCKER = "1" no csf.conf, para o CSF preservar o que sabe do Docker.
  • Um csfpost.sh que roda depois de cada reconstrução: reinicia o Docker (com live-restore, os containers não caem) e repõe as regras do dPanel.
  • Um timer do systemd que confere a cada 60 segundos, cobrindo casos que o hook não pega, como um csf -f.

Além disso, o painel se recusa a subir um stack se as regras de isolamento não estiverem ativas naquele momento.