Como Transformar um Celular Velho em Servidor Pessoal
A parte física é sua, o resto é do seu agente de IA. Do Android parado na gaveta ao painel de status online — o fluxo real, sem VPS.
Todo mundo tem um Android velho numa gaveta. O meu é um Samsung Galaxy J5 Prime, mas a ideia não depende desse modelo: hoje ele roda bots, crons, APIs pequenas e digests automáticos o dia inteiro, sem gastar quase nada.
O J5 Prime é apenas o aparelho usado neste guia. O server-box identifica o fabricante e o modelo publicados pelo Android. Se você estiver usando outro aparelho, não precisa trocar o modelo manualmente nem adaptar o painel antes de começar.
Este guia é o fluxo real que eu uso, dividido em duas frentes:
- Você faz a parte física no aparelho — uns 15 minutos, mexendo no celular.
- Seu agente de IA (Claude Code, Codex, Cursor, o que você usar) implementa o resto via SSH — uns 40 minutos, sem você digitar quase nada.
A regra de ouro: depois que o SSH conecta, quem implementa é o agente. Você não precisa decorar comando nenhum — precisa saber o que está sendo criado e conferir se ficou pronto.
Antes de começar, o que você leva daqui de graça:
- O repositório aberto do painel de status que eu construí pro meu servidor (
github.com/felipenalves/server-box) — modelo do aparelho, bateria, cron e processos numa página só. - O primeiro sucesso bem definido: ver esse painel online no seu navegador.
- Dois prompts prontos pra colar no seu agente: um que te guia até o SSH e monta o servidor, outro que adiciona as rotinas que você escolher (cron + watchdog + boot; Digest é opcional).
- O passo a passo do servidor que roda 24/7 na minha casa — o que funciona de verdade, sem enrolação.
A divisão de trabalho
Antes de qualquer comando, entenda quem faz o quê:
| Você (físico, no celular) | Seu agente (via SSH) |
|---|---|
| Preparar o aparelho (reset, chip, Wi-Fi, bateria) | SSH na porta 8022 + chave SSH |
| Instalar os apps pelo F-Droid | Node.js e os scripts |
| Digitar os comandos iniciais no Termux | Clonar e subir o server-box |
| Liberar permissões (bateria, travar app) | Cron, digest, watchdog, boot automático |
O primeiro sucesso: quando a página http://SEU_IP:8080 abrir no seu navegador mostrando o aparelho online (uptime, RAM e as métricas disponíveis), deu certo. A bateria pode aparecer como “sem leitura” sem impedir o servidor de funcionar.
O que é obrigatório e o que é opcional
Para chegar ao primeiro painel, você precisa do Termux, do Node.js, do SSH e de uma conexão Wi-Fi. O modelo do aparelho e as métricas disponíveis são detectados automaticamente.
São recursos opcionais:
- Termux:API — tenta liberar a leitura da bateria quando o Android não a expõe diretamente.
- Cron — executa tarefas automáticas em horários definidos por você.
- Digest — uma rotina específica de notícias; não faz parte da instalação básica.
- Termux:Boot — inicia serviços depois que o aparelho reinicia.
Fase 1 — Só você: preparando o aparelho
Nada disso o agente consegue fazer — precisa de mão. Faça com calma, cada passo evita dor de cabeça depois.
- Reset de fábrica. O aparelho vai servir uma função só. Limpa lixo de anos.
- Remova o chip SIM. Sem rede móvel, sem custo, sem reinício por conta de operadora.
- Wi-Fi fixo. Reserve IP fixo pro aparelho no roteador (ou IP estático no Android). Se o IP mudar, o SSH quebra.
- Atualizações automáticas. Não desligue de vez. Deixe uma janela controlada: atualize quando for mexer no servidor e mantenha as atualizações de segurança em dia. Android reiniciando no meio do cron é chato; aparelho desatualizado é pior.
- Modo avião + Wi-Fi ligado. Menos ruído, menos consumo, menos surpresa.
- Tela desligada. Timeout no mínimo. Quem mantém ele vivo é o wake-lock (vem depois).
- Bateria. Mantenha a bateria instalada e use carregador e cabo adequados. Fique de olho em calor e pare de usar se a bateria inchar — isso é risco de incêndio. Não há truque: bateria saudável, carregador correto.
Atenção: bateria inchada (tampa estufada) é risco de fogo. Troque ou descarte antes de qualquer coisa. Não é piada.
Instalando os apps (você, na mão)
Esse passo é seu de propósito — você vai conhecer o que está rodando no aparelho. No mínimo você precisa do Termux e do Termux:Boot:
- Instale o Termux pela fonte estável: o F-Droid (f-droid.org) ou o GitHub oficial (github.com/termux/termux-app). A versão da Play Store é experimental, tem limitações e exige Android 11+ — evite. Regra: Termux e os plugins devem vir da mesma fonte (todos pelo F-Droid ou todos pelo GitHub).
- Instale o Termux:Boot da mesma fonte — o app que roda comandos na inicialização do aparelho. Abra ele uma vez quando instalar: é obrigatório pra ativar.
- Instale o Termux:API — dá ao Termux acesso às APIs do Android (o wake-lock depende dele). Ele exige o app e o pacote
pkg install termux-api, que seu agente roda na Fase B. Diferente do Termux:Boot, não precisa abrir ele — se o wake-lock falhar, o troubleshooting cobre.
Depois abra o Termux e rode a primeira atualização:
O primeiro upgrade pode demorar e pedir confirmação — responda Y e enter quando perguntar.
Depuração: acesso extra pro seu agente (opcional)
Se o seu Android for 11 ou mais novo, ative a Depuração sem fio (Wi-Fi): Configurações → Opções do desenvolvedor (toque 7x em "Número da versão" se não aparecer) → Depuração sem fio → *Emparelhar dispositivo com código de emparelhamento*. Ele mostra um IP com porta e um código de 6 dígitos. No computador:
Se o Android for 10 ou inferior (tipo o meu J5 Prime — SM-G570M —, Android 8), o caminho é com cabo uma única vez: Opções do desenvolvedor → Depuração USB → plugue no computador e rode:
Desconectou o cabo, continua via Wi-Fi.
O que a depuração libera pro seu agente: instalar apps via adb install (se o F-Droid falhar), dar permissões de bateria e Doze via adb shell, abrir apps com am start, e testar o SSH do computador pro aparelho com adb forward:
O adb forward encaminha sua porta local 8022 pra porta 8022 do aparelho — útil pra validar o SSH antes mesmo de descobrir o IP. Ou seja: o agente faz mais sozinho.
Não é requisito. O fluxo padrão deste guia é manual — a depuração só aumenta o alcance do agente. Se der trabalho, pule.
Permissões Samsung (se for Samsung, como o J5)
O Android da Samsung mata app em segundo plano com força — é a causa número 1 de script morrendo sozinho. Faça antes do agente entrar:
- Configurações → Bateria → Otimização de energia → apps → Termux → Não otimizar.
- No gerenciador de apps recentes, abra o Termux e trave ele (cadeado).
Pronto. O aparelho está preparado — e o resto é com o seu agente.
Fase 2 — O que seu agente vai criar
Não é você quem executa isso. É bom saber o que está sendo montado pra conferir depois:
- SSH na porta 8022 com chave — acesso do computador pro aparelho sem digitar a senha do Termux (a chave privada pode ter passphrase ou ficar protegida pelo ssh-agent).
- Node.js — o runtime dos scripts.
- Server-box na porta 8080 — o painel de status, que identifica o Android e tenta ler a bateria pelo sistema ou pelo Termux:API (seu primeiro sucesso).
- Cron e rotinas automáticas — só no prompt 2; o painel funciona mesmo sem nenhum cron configurado.
- Digest — só se você escolher essa rotina; não é requisito do server-box.
- Boot automático + wake-lock — depois de um reinício, os serviços voltam sozinhos via Termux:Boot (desde que o aparelho ligue e a rede volte; só no prompt 2).
Quando terminar, o resultado é um servidor de verdade: aparelho que trabalha sozinho, com rotinas automáticas, e você acompanha tudo numa página.
Se o aparelho não for um J5 Prime
Não existe uma configuração de modelo no painel. O server-box lê o fabricante e o modelo publicados pelo Android e mostra o nome encontrado. O J5 Prime é apenas o aparelho usado como exemplo neste texto.
Se o painel mostrar um nome genérico ou um modelo antigo, atualize o server-box e recarregue a página. Isso é uma identificação do Android, não uma configuração que você precise editar.
Se a bateria aparecer como sem leitura, o Android pode não expor o arquivo de energia ao Termux. O painel tenta primeiro o sysfs e depois o comando termux-battery-status. Nesse caso, confirme que o app Termux:API está instalado pela mesma fonte do Termux e que o pacote também foi instalado:
Depois reinicie o painel com o mesmo comando usado para subi-lo. Se ainda aparecer sem leitura, o aparelho está funcionando; apenas essa métrica não está disponível para o Termux.
Prompt 1 — até o primeiro sucesso
Copie o bloco abaixo, cole no seu agente de IA e siga as instruções que ele te der. Ele conduz a parte de digitação no Termux e assume sozinho depois do SSH.
Se o seu agente seguir bem, em ~40 minutos você tem o primeiro sucesso: o painel aberto no navegador, mostrando seu celular velho como servidor online.
Prompt 2 — as rotinas opcionais (depois do primeiro sucesso)
Agora que o painel está online, você pode adicionar rotinas automáticas. O painel funciona sem cron. O Digest é uma rotina específica e opcional: não crie ~/newsdigest nem linhas de Digest se eu não pedir.
Cola este prompt no mesmo agente (ou num novo):
Com isso, o servidor trabalha sozinho: as rotinas escolhidas saem nos horários programados e o watchdog recupera o processo em até 5 minutos sempre que ele cair — contanto que o Android, a rede, o cron e o Termux:Boot continuem de pé.
Como conferir o trabalho do seu agente
Não confie cegamente. Quatro verificações de 1 minuto:
- Abra o painel:
http://SEU_IP:8080— o primeiro sucesso, mostrando o aparelho online. - Conecte sem digitar a senha do Termux:
ssh -i ~/.ssh/id_ed25519 -p 8022 u0_aXXX@SEU_IP— entra direto. - Veja as rotinas:
crontab -lno aparelho — aparecem somente as linhas que você configurou. - Reinicie e veja voltar: desligue e ligue o aparelho — SSH e painel voltam em poucos minutos, se o aparelho ligar e a rede Wi-Fi voltar.
Se qualquer uma falhar, o agente não terminou — devolve pra ele com o erro.
Apêndice — referência rápida
Só pra consulta, não pra decorar. São os comandos que o agente usa (e que você usa pra conferir):
| O quê | Comando | |
|---|---|---|
| Atualizar o Termux | pkg update && pkg upgrade | |
| Instalar pacote | pkg install <pacote> | |
| IP do aparelho | ip addr show wlan0 | |
| Usuário do Termux | whoami | |
| Conectar por SSH | ssh -i ~/.ssh/id_ed25519 -p 8022 u0_aXXX@IP | |
| Copiar chave SSH | ssh-copy-id -i ~/.ssh/id_ed25519.pub -p 8022 u0_aXXX@IP | |
| Subir SSH / cron | sshd / crond · persistentes: sv-enable sshd / sv-enable crond | |
| Rodar em background | nohup node server.mjs > server.log 2>&1 & | |
| Ver processos | `ps aux \ | grep node` |
| Editar agenda | crontab -e | |
| Acompanhar log do Digest (se usar) | tail -f ~/newsdigest/digest.log | |
| Enviar arquivo (Mac → aparelho) | scp -i ~/.ssh/id_ed25519 -P 8022 arquivo u0_aXXX@IP:~/newsdigest/ | |
| Validar sintaxe no aparelho | ssh -i ~/.ssh/id_ed25519 -p 8022 u0_aXXX@IP "node --check ~/newsdigest/digest.mjs" | |
| Hash local / remoto | md5 arquivo / ssh -i ~/.ssh/id_ed25519 -p 8022 u0_aXXX@IP "md5sum ~/newsdigest/arquivo" | |
| Wake-lock | termux-wake-lock | |
| Subir o painel | cd ~/server-box && node server.js | |
| Depuração sem fio (Android 11+) | adb pair IP:porta → adb connect IP:porta | |
| Depuração via cabo (Android velho) | adb tcpip 5555 → adb connect IP:5555 |
Troubleshooting (o que é seu)
Se der problema, a maior parte é física — o resto o agente resolve.
| Problema | Causa provável | Solução |
|---|---|---|
| Painel mostra modelo antigo ou genérico | Versão antiga do server-box ou página em cache | No aparelho, rode cd ~/server-box && git pull --ff-only e peça ao agente para reiniciar o painel; depois recarregue a página |
| Bateria aparece como “sem leitura” | Android não expõe o sysfs ou Termux:API não está instalado | pkg install termux-api e termux-battery-status; se o comando responder, reinicie o painel |
| SSH não conecta | IP do aparelho mudou | Reserve IP fixo no roteador; confira com ip addr |
| SSH pede senha | Chave não copiada | ssh-copy-id -i ~/.ssh/id_ed25519.pub -p 8022 u0_aXXX@IP de novo |
| Script para sozinho | Doze do Android | termux-wake-lock; carregador plugado; permissões Samsung |
termux-wake-lock falha | App Termux:API não aberto | Abra o app uma vez e rode de novo |
| F-Droid não instala o APK | Download/permite desconhecidos | Habilite "Instalar apps desconhecidos" pro navegador |
| Cron roda na hora errada | Fuso/hora errados | Ajuste hora e fuso nas configurações do aparelho |
| Armazenamento cheio | Logs e pacotes acumulados | pkg clean; apague logs antigos; df -h |
| Bateria inchada | Bateria velha | Troque ou descarte — risco de incêndio |
| Sem depuração sem fio | Android abaixo do 11 | Use o caminho do cabo (adb tcpip 5555) |
Dica de ouro: ps aux | grep <nome> (o processo está vivo?) e tail -f <arquivo>.log (o que ele imprimiu antes de morrer?) resolvem metade dos casos.
FAQ
Pode usar outro Android? Sim. O J5 Prime é o aparelho usado neste guia, não uma configuração obrigatória. O painel identifica o modelo automaticamente.
Preciso trocar o modelo no painel? Não. O nome vem do próprio Android. Se aparecer um modelo antigo, atualize o server-box e recarregue a página.
A bateria não apareceu. O servidor deu errado? Não. A bateria é uma métrica opcional. Instale o app Termux:API e o pacote termux-api; se o Android continuar sem expor a informação, o restante do painel segue funcionando.
E iPhone? Complicado — o iOS não tem Termux. Se for pra fazer isso, Android.
Precisa de root? Não. Nada deste guia exige root.
Quanto custa por mês? Praticamente nada. É o custo de um carregador na tomada — centavos de conta de luz, que ninguém sente. Contra os R$ 30+ de um VPS ou o gasto de deixar um computador ligado 24/7, é de graça.
Dá pra rodar o quê? Tudo que for leve e autônomo: bot de Telegram, monitor de uptime, digest de RSS, scraper leve, API de teste, webhook. Se é leve e fica esperando, roda.
E se eu não tiver agente de IA? O apêndice acima tem os comandos essenciais — dá pra fazer na mão, no ritmo que for.
