Instalação simplificada em uma VPS nova
Após baixar o ZIP e configurar a chave SSH no Termux, o assistente transfere o pacote, verifica o plano e instala com confirmação. Não altera as verificações de segurança nem exige domínio.
pkg install -y openssh unzip
termux-setup-storage
mkdir -p ~/als-instalador
unzip -oq ~/storage/downloads/AL-Sistemas-v2.0.5-VPS.zip inicio-termux.sh bootstrap-vps.sh -d ~/als-instaladorExecute do Termux local (troque IP e chave pelos seus dados):
bash ~/als-instalador/inicio-termux.sh --host IP_DA_VPS --key ~/.ssh/minha-chave.pemO assistente pede confirmação antes de executar sudo instalar.sh. Para VPS com sites existentes, acrescente --existing; PHP/MariaDB opcionais usam --with-php e --with-mariadb. O SSH continua obrigatório e a porta 8181 não é exposta.
A versão 2.0.5 ainda não automatiza autenticação inicial do provedor nem criação de chaves SSH. O atalho é para um Ubuntu 24.04 com SSH funcional; ele não migra sites ou bancos.
↑ Voltar aos tópicos1. Preparar a VPS
- Crie uma VPS com Ubuntu Server 24.04 LTS, arquitetura amd64 ou arm64.
- Configure acesso SSH com chave pública. Na AWS, verifique o Security Group: libere sua porta SSH, mas não exponha 8181.
- Recomenda-se no mínimo 1 GiB de RAM e 4 GiB livres; a instalação recusa menos de 1 GiB livres. Uma EC2 de 2 GiB pode rodar o núcleo leve.
- Para servidores existentes, gere snapshot/backup antes da instalação. Bancos em atividade exigem backup consistente, não apenas cópia a quente.
O AL Sistemas é para uma VPS por instalação. A instalação com --allow-existing-host aceita sites existentes, mas pode alterar componentes do sistema. O projeto IguatamaOnline não é alterado diretamente pelo instalador.
2. Preparar o Termux no Android
Abra Termux e conceda permissão ao armazenamento compartilhado.
termux-setup-storage
pkg install openssh -yConfirme que o ZIP está em Downloads. Se o nome da Release mudou, ajuste-o.
ls -lh ~/storage/downloads/AL-Sistemas-v2.0.5-VPS.zip3. Chave SSH e primeiro acesso
Confirme os nomes das chaves disponíveis sem mostrar o conteúdo.
ls -lah ~/.ssh/Exemplo com chave guardada no Termux:
chmod 600 ~/.ssh/minha-chave.pem
ssh -i ~/.ssh/minha-chave.pem ubuntu@IP_DA_VPSPermission denied (publickey) significa que a VPS não aceitou a chave oferecida. Verifique usuário, chave, IP e configuração do SSH. Não crie ou substitua chaves indiscriminadamente.
4. Enviar o ZIP por SCP
Este comando roda no Termux local, não na VPS.
scp -i ~/.ssh/minha-chave.pem \
~/storage/downloads/AL-Sistemas-v2.0.5-VPS.zip \
ubuntu@IP_DA_VPS:~/Depois conecte via SSH e confirme o arquivo.
ssh -i ~/.ssh/minha-chave.pem ubuntu@IP_DA_VPS
ls -lh ~/AL-Sistemas-v2.0.5-VPS.zip5. Extrair, planejar e instalar
Com o prompt ubuntu@..., os comandos a seguir serão executados dentro da VPS.
sudo apt-get update
sudo apt-get install -y unzip
mkdir -p ~/al-sistemas-instalar
unzip -q ~/AL-Sistemas-v2.0.5-VPS.zip -d ~/al-sistemas-instalar
cd ~/al-sistemas-instalar
bash instalar.sh --planRevise a saída. Em VPS com projetos existentes, use:
sudo bash instalar.sh --allow-existing-hostPara um servidor novo, pode omitir --allow-existing-host. Para instalação opcional de PHP e MariaDB, acrescente --with-php e --with-mariadb, respectivamente. Não habilite firewall automaticamente sem verificar SSH.
Sem domínio, o processo inicia o painel apenas em 127.0.0.1:8181. O navegador acessará pelo túnel SSH, sem abrir a porta 8181 à internet.
6. Abrir o painel pelo Chrome
Crie outra sessão do Termux, mantendo a VPS em execução. Nessa nova sessão, que deve estar fora do SSH, abra o túnel:
ssh -i ~/.ssh/minha-chave.pem -N \
-o ExitOnForwardFailure=yes \
-L 8181:127.0.0.1:8181 \
ubuntu@IP_DA_VPSMantenha a conexão aberta. No Chrome, acesse http://localhost:8181. Se o terminal ficar parado sem mostrar saída, é normal: o túnel está ativo.
↑ Voltar aos tópicos7. Configuração da conta e autenticador
- Na VPS, consulte o código inicial com
sudo cat /var/lib/alsistemas/bootstrap-token, sem divulgá-lo. - Digite-o na tela de configuração do painel.
- Cadastre a chave TOTP no Google Authenticator, Aegis ou outro autenticador compatível. Guarde backup criptografado da chave.
- Crie uma senha forte, confirme o código de seis dígitos e faça login.
- Para acessar mais facilmente, marque Confiar neste dispositivo por 30 dias. No mesmo navegador e enquanto o cookie existir, precisará normalmente apenas da senha.
A confiança não ignora a senha e não permite alterar configurações sensíveis sem TOTP. Se o celular for perdido, use Segurança → Revogar todos os dispositivos. Se perder senha e TOTP, não há reset remoto por e-mail na versão atual.
↑ Voltar aos tópicos8. Confirmar instalação e funcionamento
sudo systemctl is-active alsistemas-vps
curl -i http://127.0.0.1:8181/api/health
sudo nginx -t
sudo systemctl cat alsistemas-vps --no-pagerO endpoint de saúde deve retornar HTTP 200 e "ok":true. O dashboard deverá mostrar métricas reais e listar projetos. Projetos não criados pelo painel são somente leitura.
9. Configurar subdomínio e HTTPS, quando desejar
- No DNS do provedor (por exemplo, Spaceship), crie um registro A para
painelapontando ao IPv4 da VPS. - Verifique a propagação com
getent ahostsv4 painel.exemplo.com. - Garanta portas públicas TCP 80 e 443 e preserve acesso SSH.
- Execute a atualização do instalador com
--domaine--email.
cd ~/al-sistemas-instalar
sudo bash instalar.sh --allow-existing-host \
--domain painel.exemplo.com \
--email voce@exemplo.comSe não houver domínio, continue usando o túnel SSH. Não use HTTPS fictício nem publique diretamente a porta 8181.
↑ Voltar aos tópicos10. Atualizações pelo GitHub, com assinatura obrigatória
A partir da 2.0.5, o painel possui a aba Atualizações. É necessário configurar o repositório e uma chave pública de assinatura Ed25519. Não existe repositório ou chave pré-configurados.
Preparar chave fora da VPS (uma vez)
Em um ambiente seguro, gere o par de chaves. A privada deve ficar em local criptografado, fora da VPS e fora do repositório.
openssl genpkey -algorithm ED25519 -out signing-private.pem
openssl pkey -in signing-private.pem -pubout -out update-public-key.pem
chmod 600 signing-private.pemEnvie apenas a pública para a VPS e rode novamente o instalador, sem apagar dados:
# No Termux, com o arquivo público em ~/:
scp -i ~/.ssh/minha-chave.pem ~/update-public-key.pem ubuntu@IP_DA_VPS:~/
# Na VPS:
cd ~/al-sistemas-instalar
sudo bash instalar.sh --allow-existing-host \
--update-key-file /home/ubuntu/update-public-key.pemNa aba Atualizações do painel, salve proprietario/repositorio com senha e um TOTP novo. Você pode manter o repositório público; não precisa configurar token GitHub para consulta de Releases públicas.
Publicar uma versão nova
- Gere o ZIP completo com nome
AL-Sistemas-vX.Y.Z-VPS.zip, e teste-o. - Execute, fora da VPS, o script
tools/assinar-release.shusando a chave privada. - No GitHub, crie uma Release com a tag
vX.Y.Ze anexe três arquivos: ZIP,update-manifest.jsoneupdate-manifest.json.sig. - No painel, toque em Verificar GitHub, confira a versão e use Instalar versão assinada, confirmando senha e TOTP.
./tools/assinar-release.sh \
/caminho/seguro/signing-private.pem \
AL-Sistemas-v2.0.5-VPS.zipO atualizador rejeita releases sem assinatura válida, hash incompatível ou versão não superior. Ele cria backup de código, usa o instalador, verifica o serviço e tenta rollback quando falha. Não realiza backup de sites ou bancos. O recurso exige testes numa VPS de homologação antes de ser usado em produção.
↑ Voltar aos tópicos11. Backups e proteção de dados
- O backup do painel na 2.0.5 ainda cobre somente a pasta
public/de sites criados pelo próprio AL Sistemas, com GPG AES-256. - A frase de criptografia não é armazenada. Sem ela, o backup é irrecuperável.
- Faça exportações separadas de bancos MariaDB, configurações Nginx, certificados, arquivos privados e dados do painel.
- Leve os backups para armazenamento externo e teste restauração regularmente.
- Para AWS, snapshots EBS ajudam na recuperação, mas exigem atenção à consistência do banco de dados.
12. Solução de problemas observados
Permission denied (publickey) no SCP
A chave SSH não foi aceita. Informe -i ~/.ssh/minha-chave.pem, confirme usuário e IP. Nunca compartilhe a chave privada.
ERR_CONNECTION_REFUSED ao abrir localhost:8181
Confira se a sessão do túnel SSH continua aberta. Na VPS, execute curl -i http://127.0.0.1:8181/api/health. Se responder 200, o problema pode estar no túnel ou no navegador, não necessariamente no serviço.
Backups indisponíveis: /run/lock read-only
A 2.0.3 tinha um erro no caminho do mutex. A 2.0.5 passa a usar /run/alsistemas-vps/tasks.lock com uma exceção restrita no systemd. Atualize por instalador assinado ou instalação manual e verifique novamente a seção Backups.
O Nginx não aceita a configuração
Consulte sudo nginx -t e logs do sistema. Não execute alterações aleatórias em sites existentes. O painel recusa operações em vhosts não gerenciados.
Faltou código TOTP ou houve bloqueio
Verifique hora do celular, login correto e se o código já foi utilizado. Um novo código aparece a cada 30 segundos. O recurso Confiar neste dispositivo só dispensa TOTP depois do primeiro cadastro validado.
Falha na atualização automática
Veja sudo journalctl -u alsistemas-updater -n 100 --no-pager, status na aba Atualizações e backups do código em /var/backups/alsistemas/. Não repita o comando às cegas.
13. Instalar numa nova VPS ou migrar
- Faça backup consistente dos sites, bancos, configurações, dados do painel e certificados. Guarde fora da VPS anterior.
- Crie uma nova VPS e siga as seções 1–8 com o ZIP correspondente.
- Transfira os projetos e bancos somente após verificar compatibilidade, usuários, permissões e versões PHP/MariaDB.
- Configure Nginx e certificados para o novo IP. Atualize DNS no seu provedor, mantendo a VPS antiga operante durante a transição.
- Teste DNS, HTTPS, logs, backups e integridade. Somente então desligue a VPS antiga.
A restauração completa automática entre VPS ainda não está implementada. Não suponha que copiar apenas o ZIP do AL Sistemas migra seus sites e bancos.
↑ Voltar aos tópicos14. Recuperar acesso e verificar erros
Com acesso SSH funcional, o painel pode ser diagnosticado mesmo sem domínio:
sudo systemctl status alsistemas-vps --no-pager
sudo journalctl -u alsistemas-vps -n 80 --no-pager
sudo journalctl -u alsistemas-updater -n 80 --no-pager
curl -i http://127.0.0.1:8181/api/healthNão apague /var/lib/alsistemas/admin.json nem as chaves TOTP para tentar resolver erro de login: isso pode causar perda de acesso. Mantenha o SSH e backups de credenciais disponíveis e evite registrar segredos em screenshots.