Método automático: um único script da área pessoal prepara todo o servidor (stack web Apache + PHP, base de dados, ferramentas de segurança, cron). Depois — implementar o painel, emitir o SSL e introduzir a licença. Funciona em Ubuntu/Debian: num VPS novo configura tudo de raiz, num servidor já configurado — apenas de forma aditiva (perfil «Servidor configurado», passo 01). Todos os comandos abaixo estão por ordem, basta percorrer de cima para baixo. Num VPS novo aplicam-se todos os passos, um a seguir ao outro; se o servidor já estiver configurado ou tiver um painel de alojamento, o script deixa intencionalmente parte do trabalho a seu cargo — e indica exatamente o quê no final da sua execução (a leitura desse resultado está no passo 01).
monitor.example.com — o seu domínio; 203.0.113.10 — o IP real do servidor; /var/www/monitor — a raiz do painel (onde estão public/, assets/, config.php); defina a sua própria palavra-passe da BD.
jail.local), root-crontab, regras do UFW, configuração do Apache. Se o servidor já estiver configurado (painel a funcionar, sites, correio, jails próprias) — escolha o perfil «Servidor configurado»: introduz apenas alterações aditivas e não mexe na sua firewall, no Fail2ban, no correio, no SSH nem no sysctl. Ao detetar um painel de alojamento, o script muda sozinho para este modo. Antes da primeira execução pode ativar a simulação (opção na área pessoal) — mostra o que será feito sem alterar nada. Num servidor em produção, faça uma cópia instantânea (snapshot) por precaução.
my.arciveo.com → secção «Configuração do servidor» (disponível depois de subscrever o Arcivéo Security Monitor). Está associado à sua conta e contém um token pessoal.
O script prepara todo o servidor: pilha web (Apache + PHP), base de dados, ferramentas para SSL, o conjunto completo de meios de proteção e tarefas cron (Lynis, SMART, debsums, Logwatch, relatório diário, atualização do ipsum).
1) Escolha o nível de proteção (na área pessoal, antes de copiar o comando):
2) Execute no servidor como root o comando da área pessoal — tem este aspeto:
3) Leia o resultado no final — é aí que fica dito o que sobra para si. O script termina com um bloco de verificações e uma lista «A seguir — a instalação do painel». Parte dos passos não é executada de propósito: o que exatamente depende do perfil escolhido e do que ele encontrou no servidor. Confronte com a lista abaixo — só precisa de executar os pontos cujas linhas apareceram no seu resultado.
Control panel detected (…) — o site é criado pelos meios do próprio painel de alojamento, o script não cria o vhost. Passo 03, ramo «Servidor com painel de alojamento».No vhost created (no domain given) — perfil «Servidor configurado» sem domínio: um vhost sem nome passaria a ser o site predefinido e intercetaria os seus próprios sites, por isso não foi criado. Passo 03, ramo «Criar o vhost à mão».sudo rules NOT written — o script não conseguiu determinar sob que conta funciona o painel. É uma situação normal: os ficheiros do painel são enviados já depois da configuração automática e ainda não havia nada por onde determinar. Sem estas regras, os módulos não veem os dados do sistema. Passo 04, bloco «sudo para o servidor web».! Nginx does not read .htaccess — há um Nginx à frente do Apache e não foi possível inscrever a proibição na sua configuração automaticamente. Faça-o obrigatoriamente: caso contrário, data/, keys/, database/ e config.php ficam acessíveis do exterior, contornando o .htaccess. Passo 03, bloco «Se houver um Nginx à frente do Apache».UFW installed but inactive — a firewall está instalada, mas desligada: num servidor já configurado o script não a ativa sozinho, para não lhe cortar o acesso. Ative-a você mesmo, permitindo obrigatoriamente a sua porta SSH:
Fail2ban installed but not running — inicie-o: sudo systemctl enable --now fail2ban.Database server present … but not running — inicie o SGBD antes do passo 04: sudo systemctl enable --now mariadb (ou mysql — conforme o que estiver instalado).Certbot skipped — issue SSL in … — o certificado é emitido pelo interruptor Let's Encrypt no painel de alojamento; não precisa do passo 06.All checks passed. Os pontos com ! exigem atenção; os pormenores são escritos no registo, cujo caminho o script imprime mesmo no fim (Log: …).
Para abrir o painel num endereço como monitor.example.com e obter SSL gratuito, o domínio tem de apontar para o servidor. No painel de gestão de DNS (do registador ou do alojamento) crie um registo A:
Passados alguns minutos (por vezes até uma hora), verifique que o domínio aponta para o servidor:
/var/www/monitor e configurou o site Apache (DocumentRoot na raiz do painel, PHP-FPM, AllowOverride para .htaccess). No resultado do script isso corresponde à linha vhost … → DocumentRoot …. Não é preciso criar a diretoria e o vhost à parte — basta enviar os ficheiros e definir as permissões.
Ramo «Servidor com painel de alojamento» (no resultado: Control panel detected (…)). Num servidor destes é o painel que gere os sites, e o script não cria um vhost próprio de propósito — seria apagado na primeira reconstrução das configurações pelo painel. A ordem é esta:
public_html desse domínio: ao lado de index.php, api/, assets/ devem ficar também os ficheiros e pastas de serviço config.php, includes/, data/, tmp/, logs/, keys/, cron/, database/. Não é preciso colocar nada acima da raiz web: as pastas de serviço estão protegidas pelo ficheiro .htaccess da distribuição e, sob Nginx, pela proibição que o script inscreveu na configuração do domínio.config.php (passo 05). Nos comandos, substitua os caminhos por /home/conta/web/dominio/public_html e o proprietário pelo utilizador desse domínio, em vez de www-data.Ramo «Criar o vhost à mão» (no resultado: No vhost created (no domain given)). Isto só acontece no perfil «Servidor configurado», quando o domínio não foi indicado. O mais simples é voltar a executar o comando da área pessoal, indicando o domínio:
A repetição da execução é segura: o que já foi feito não é duplicado. Se ainda assim precisar de criar o vhost à mão — aqui fica a mesma configuração que o instalador escreve:
ServerName é obrigatório. Um vhost sem nome torna-se o site predefinido do Apache e começa a responder por domínios alheios no mesmo servidor. Pela mesma razão, não desative o 000-default.conf num servidor já configurado: esse site pode ter sido adaptado para algo em produção — num VPS novo o instalador remove-o sozinho, aqui não é preciso fazê-lo.
! Nginx does not read .htaccess). O Nginx serve os ficheiros estáticos diretamente do disco e não lê o .htaccess — as pastas de serviço ficam acessíveis do exterior, ainda que o Apache as feche corretamente. O script preparou antecipadamente um ficheiro com as proibições; é preciso incluí-lo no bloco server{} do seu site e recarregar o Nginx:
my.arciveo.com → «Transferências». Descompacte o arquivo antes de o enviar para o servidor.
Envie o conteúdo da distribuição para /var/www/monitor (de modo a que lá dentro fiquem public/, assets/, config.php etc.) — por SFTP/SCP (FileZilla / WinSCP) ou com o comando scp a partir do computador local:
ServerName) fique logo definido no vhost, ele é passado ao comando de configuração automática ainda no passo 01: … | sudo bash -s -- monitor.example.com (ou indica-se o domínio no campo «Domínio do painel» na área pessoal). Se o domínio não for passado — o painel responde a qualquer host e por IP, e o ServerName será definido pelo certbot ao emitir o SSL (passo 06); não é preciso reinstalar nada.
root ou por SFTP, os ficheiros pertencem ao root, e o servidor web (www-data) não os conseguirá ler — o painel abrirá vazio ou com erro 403 (no registo: .htaccess unreadable / directory not executable). O comando abaixo corrige isto:
Abra para si próprio o envio de ficheiros por SFTP. Depois do comando acima todos os ficheiros pertencem ao www-data, enquanto o FileZilla / WinSCP se ligam com o seu próprio utilizador — o envio falhará com SSH_FX_PERMISSION_DENIED (Permission denied). Escolha uma das duas variantes.
Variante A — uma ACL apenas para o seu utilizador (recomendado). A permissão de escrita fica só consigo; o servidor web continua sem poder substituir o código do painel:
Variante B — através do grupo www-data. Mais simples, mas a permissão de escrita nos ficheiros do painel passa também para o servidor web: com uma vulnerabilidade no PHP o código poderia ser substituído. A ordem dos comandos importa — config.php e as pastas de trabalho são fechadas por último:
id deploy — na lista de grupos deve aparecer www-data; ls -ld /var/www/monitor — permissões drwxrwsr-x, a letra s em vez de x significa que o setgid está ativo.
Crie a base de dados e o utilizador, depois importe o esquema. O bloco da BD é colado no terminal por inteiro (sudo mysql entra como root pelo socket unix — não é preciso a palavra-passe de root). monitor_db e monitor_user são nomes de exemplo, pode definir os seus; memorize o nome da base, do utilizador e a palavra-passe — irá inseri-los no config.php no passo seguinte:
admin no primeiro acesso pelo navegador (a partir de database/db.sql), se a BD estiver vazia.
Se as tabelas não tiverem sido criadas (o painel mostra um erro de ligação à BD ou um ecrã vazio em vez do formulário de início de sessão) — importe o esquema à mão. O comando executa-se na raiz do painel e os valores vêm do bloco acima:
$DBNAME / $DBUSER / $DBPASS já se «perderam» (nova sessão do terminal) — introduza os valores no comando à mão ou defina-os de novo com as mesmas três linhas do bloco acima.
sudo rules NOT written — não havia como determinar a conta do painel (os ficheiros ainda não tinham sido enviados) e as regras não foram criadas. Sem elas, secções como a firewall, o Fail2ban e o CrowdSec ficam vazias. Agora que os ficheiros já estão no lugar, execute o comando da área pessoal outra vez, indicando a conta explicitamente:
www-data pelo utilizador sob o qual corre o PHP do seu site (num painel de alojamento é normalmente o proprietário do domínio). Pode consultá-lo assim:
/etc/sudoers.d/monitor existe e contém linhas com o seu utilizador.
config.php na raiz do painel (/var/www/monitor/config.php) é o único ficheiro que precisa de editar à mão. Todas as definições do painel estão definidas nele através de constantes define(). Abra-o num editor:
Introduza os seus valores nos locais realçados; deixe o resto como está:
O que alterar:
DB_NAME, DB_USER, DB_PASS — exatamente os mesmos nome da base, utilizador e palavra-passe que definiu ao criar a BD no passo 04 (se manteve os exemplos — monitor_db / monitor_user). Não mexa em DB_HOST e DB_CHARSET.APP_URL — o endereço completo do painel com https://, sem barra no fim e sem www. Tem de coincidir com o domínio no qual ativa a licença (passo 07), caso contrário a chave será rejeitada.TIMEZONE — o seu fuso horário (lista — timedatectl list-timezones). Afeta apenas a forma como o painel mostra as datas; não afeta a hora de execução das tarefas cron (aí vale o fuso do sistema).SESSION_LIFETIME — após quantos segundos de inatividade o painel pede novo início de sessão (por predefinição 8 horas). Ex.: 3600 = 1 hora, 86400 = um dia.display_errors, log_errors, error_log) — deixe por predefinição.Guarde o ficheiro (Ctrl+O, Enter, depois Ctrl+X) e reinicie o PHP-FPM — caso contrário, devido ao OPcache, as alterações não serão aplicadas:
640 (definidas no passo 03) e proibição explícita no .htaccess da raiz. Não o publique em repositórios públicos nem o envie para o suporte com a palavra-passe real.
http:// não conseguirá entrar.
Certbot skipped — issue SSL in …). O certificado é emitido pelo interruptor Let's Encrypt no domínio web dentro do próprio painel — assim é também o painel que trata da sua renovação.
O certbot e o plugin para Apache já foram instalados pela configuração automática. O DNS do domínio já deve apontar para o servidor (passo 02). Emissão num único comando:
Se o painel também tiver de abrir com www. — indique ambos os nomes no mesmo comando, caso contrário no segundo endereço o navegador mostrará um aviso sobre o certificado:
Y.<VirtualHost *:443>, configura o redirecionamento http→https e a renovação automática. No fim — Successfully enabled HTTPS.
dig +short monitor.example.com devolve o IP do servidor e se as portas 80/443 estão abertas (sudo ufw allow 80,443/tcp).
Após a emissão: https://monitor.example.com abre com o cadeado, http:// redireciona para https://.
Abra https://monitor.example.com, inicie sessão com admin / useradmin e siga a lista de verificação:
ARCIVEO-… para o seu domínio e cole a chave em «Definições» → «Licença». Saber mais.public/start_db.php, se ainda existir: permite recriar a base de dados sem autenticação. Enquanto o ficheiro estiver na raiz do painel ou em public/, o painel avisa disso com um banner vermelho.sudo /usr/local/bin/clamav-scan.sh) sobrecarrega bastante o disco e o processador e pode demorar uma hora ou mais — num servidor em produção é preferível aguardar a execução noturna das 01:30. As secções «Discos (SMART)», «Desempenho» e «Atualizações de segurança» preenchem-se sozinhas: a cada 30 minutos, 5 minutos e uma vez por hora, respetivamente.