News
Servidor12 min de leitura

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.

Por Felipe Natanael·13 de agosto de 2026·Nível: Intermediário

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-DroidNode.js e os scripts
Digitar os comandos iniciais no TermuxClonar 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.

  1. Reset de fábrica. O aparelho vai servir uma função só. Limpa lixo de anos.
  2. Remova o chip SIM. Sem rede móvel, sem custo, sem reinício por conta de operadora.
  3. Wi-Fi fixo. Reserve IP fixo pro aparelho no roteador (ou IP estático no Android). Se o IP mudar, o SSH quebra.
  4. 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.
  5. Modo avião + Wi-Fi ligado. Menos ruído, menos consumo, menos surpresa.
  6. Tela desligada. Timeout no mínimo. Quem mantém ele vivo é o wake-lock (vem depois).
  7. 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:

  1. 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).
  2. 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.
  3. 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:

Primeira atualização do Termux
$pkg update
$pkg upgrade

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:

Conectando por depuração sem fio (Android 11+)
$adb pair IP:porta
$adb connect IP:porta

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:

Liberando via USB (uma vez)
$adb tcpip 5555
$adb connect IP:5555

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:

Testando o SSH via cabo antes do IP
$adb forward tcp:8022 tcp:8022
$ssh u0_aXXX@localhost -p 8022

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:

  1. Configurações → Bateria → Otimização de energia → apps → Termux → Não otimizar.
  2. 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:

Habilitando a leitura de bateria
$pkg install termux-api
$termux-battery-status

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.

Prompt 1 — até o painel online (copia e cola no seu agente)
Você vai transformar um Android velho em um servidor pessoal, seguindo o guia
https://inovadigitalid.com/news/servidor-j5-prime (fluxo real, já testado).
Trabalhamos em DUAS fases. Leia as duas antes de começar.
FASE A — EU DIGITO, VOCÊ CONDUZ (até o SSH funcionar)
Nesta fase eu estou com o Termux aberto na tela do celular e você ainda
não tem acesso a ele. Regras:
1. Me diga EXATAMENTE um comando por vez, em bloco de código pra eu copiar.
2. Eu rodo e te mostro a saída completa.
3. Você analisa. Ok = próximo comando. Falhou = me explica, corrige e roda
de novo.
4. Quando precisar de algo físico em mim (instalar app, abrir permissão,
tocar em tela), me instrua passo a passo e ESPERE eu confirmar.
5. Nunca me passe vários comandos de uma vez. Um por vez.
Ordem da Fase A (não pule):
a) pkg update && pkg upgrade (confirme Y / press enter se perguntar)
b) pkg install openssh termux-services nano — DEPOIS de instalar o
termux-services, me peça pra sair (exit) e reabrir o Termux, como a
documentação do termux-services exige.
c) passwd — me peça pra criar uma senha (é a do Termux, não a do celular)
d) sshd — subir o servidor
e) Confirmar: ps aux | grep sshd (tem que aparecer sshd)
f) Porta 8022: nano $PREFIX/etc/ssh/sshd_config → adicionar "Port 8022" →
salvar (Ctrl+O, Enter, Ctrl+X) → pkill sshd → sshd
g) sv-enable sshd (pra sobreviver a reinícios)
h) IP: ip addr show wlan0 (se falhar: pkg install net-tools && ifconfig wlan0)
e usuário: whoami (guarde o u0_aXXX)
i) Me peça pra testar do computador:
ssh u0_aXXX@IP -p 8022 (login inicial com a senha do Termux; aceitar fingerprint com yes)
Quando conectar, a Fase A acabou.
FASE B — VOCÊ ASSUME (do SSH até o painel online)
Agora você tem acesso SSH. Sua missão termina quando a página do painel
estiver online no meu navegador. Regras:
1. Um comando por vez, mostrando comando e saída. Valide cada passo antes
de avançar.
2. Chave SSH: me peça pra rodar `ssh-keygen -t ed25519` no meu computador.
Os exemplos abaixo usam a chave padrão `~/.ssh/id_ed25519`; se eu salvar
a chave com outro nome, substitua esse caminho em todos os comandos.
A chave privada pode ter passphrase ou ficar no ssh-agent. Copie com
`ssh-copy-id -i ~/.ssh/id_ed25519.pub -p 8022 u0_aXXX@IP`, teste com
`ssh -i ~/.ssh/id_ed25519 -p 8022 u0_aXXX@IP` SEM pedir a senha do Termux e só então
desligue o login por senha (PasswordAuthentication no) + sv restart
sshd. Se eu me trancar pra fora, me oriente a ir até o celular e reverter.
3. Instale nesta ordem:
a) pkg install nodejs-lts e confirme com node -v
b) Se eu tiver instalado o app Termux:API, instale também o pacote
termux-api. Se não tiver, siga sem ele: o painel continua funcionando
e a bateria será lida quando o Android expuser essa métrica.
c) git clone https://github.com/felipenalves/server-box.git ~/server-box
d) suba na porta 8080 em background com nohup (log em arquivo)
4. PRIMEIRO SUCESSO: me peça pra abrir http://IP:8080 no navegador. Se o
painel mostrar o aparelho online (uptime, RAM e as métricas disponíveis),
a missão terminou. Bateria sem leitura não bloqueia o primeiro sucesso.
5. Se algo falhar, consulte o Troubleshooting do guia ANTES de improvisar.
6. Nada de abrir porta no roteador. Não commitar .env nem credenciais.
ENTREGÁVEIS FINAIS (resumo pra mim):
- IP do aparelho e porta SSH (8022)
- Comando de conexão: ssh -i ~/.ssh/id_ed25519 -p 8022 u0_aXXX@IP
- URL do painel: http://IP:8080
- Lista do que está rodando no aparelho

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):

Prompt 2 — rotinas opcionais: cron + watchdog + boot (copia e cola)
O painel está online. Agora deixe o aparelho trabalhando sozinho com as
rotinas que eu escolher. Missão: cron + watchdog + boot automático.
O Digest é opcional. Não crie nem instale o Newsdigest se eu não pedir.
Use o SSH (ssh -i ~/.ssh/id_ed25519 -p 8022 u0_aXXX@IP). Mesmas regras: um comando por vez,
valide cada passo, instrua e espere quando precisar de algo físico,
consulte o Troubleshooting antes de improvisar.
Ordem:
1. pkg install cronie (se ainda não instalado)
2. Wake-lock: termux-wake-lock. Se falhar, me peça pra abrir o app
Termux:API uma vez e rode de novo.
3. Serviços persistentes: pkill crond; sv-enable crond
4. Estrutura: mkdir -p ~/servidor
5. Pergunte qual rotina eu quero automatizar antes de criar qualquer script.
Se eu pedir o Digest, crie ~/newsdigest e configure as chaves somente
no aparelho. Teste em modo DRY-RUN, sem enviar Telegram nem gastar API.
Se eu não pedir, não crie nem configure o Digest.
6. Watchdog: crie ~/servidor/watchdog.sh — checa se o processo do
server-box está vivo e sobe com nohup se caiu. chmod +x.
7. Crontab: crontab -e com somente as rotinas escolhidas. Modelo do
watchdog:
*/5 * * * * sh ~/servidor/watchdog.sh >> ~/servidor/watchdog.log 2>&1
Se eu pedir o Digest, adicione as linhas dele somente depois de validar
o script e as chaves.
8. Boot: crie ~/.termux/boot/boot.sh seguindo o padrão oficial do
termux-services — no mínimo com wake-lock e o source do
start-services.sh. Modelo:
#!/data/data/com.termux/files/usr/bin/sh
export PREFIX=/data/data/com.termux/files/usr
export PATH=$PREFIX/bin:$PATH
termux-wake-lock
source $PREFIX/etc/profile.d/start-services.sh 2>/dev/null
pgrep -f sshd >/dev/null || sshd
Me peça pra abrir o app Termux:Boot uma vez. Valide rodando
sh ~/.termux/boot/boot.sh.
9. Validação final:
- crontab -l (somente as linhas configuradas)
- acompanhe o log da rotina escolhida, se houver
- me peça pra reiniciar o aparelho e confirme que SSH e painel
voltam sozinhos
ENTREGÁVEIS: crontab final, rotinas configuradas, caminho de qualquer
.env criado e confirmação de que tudo voltou sozinho após reiniciar.

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 -l no 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 Termuxpkg update && pkg upgrade
Instalar pacotepkg install <pacote>
IP do aparelhoip addr show wlan0
Usuário do Termuxwhoami
Conectar por SSHssh -i ~/.ssh/id_ed25519 -p 8022 u0_aXXX@IP
Copiar chave SSHssh-copy-id -i ~/.ssh/id_ed25519.pub -p 8022 u0_aXXX@IP
Subir SSH / cronsshd / crond · persistentes: sv-enable sshd / sv-enable crond
Rodar em backgroundnohup node server.mjs > server.log 2>&1 &
Ver processos`ps aux \grep node`
Editar agendacrontab -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 aparelhossh -i ~/.ssh/id_ed25519 -p 8022 u0_aXXX@IP "node --check ~/newsdigest/digest.mjs"
Hash local / remotomd5 arquivo / ssh -i ~/.ssh/id_ed25519 -p 8022 u0_aXXX@IP "md5sum ~/newsdigest/arquivo"
Wake-locktermux-wake-lock
Subir o painelcd ~/server-box && node server.js
Depuração sem fio (Android 11+)adb pair IP:portaadb connect IP:porta
Depuração via cabo (Android velho)adb tcpip 5555adb connect IP:5555

Troubleshooting (o que é seu)

Se der problema, a maior parte é física — o resto o agente resolve.

ProblemaCausa provávelSolução
Painel mostra modelo antigo ou genéricoVersão antiga do server-box ou página em cacheNo 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á instaladopkg install termux-api e termux-battery-status; se o comando responder, reinicie o painel
SSH não conectaIP do aparelho mudouReserve IP fixo no roteador; confira com ip addr
SSH pede senhaChave não copiadassh-copy-id -i ~/.ssh/id_ed25519.pub -p 8022 u0_aXXX@IP de novo
Script para sozinhoDoze do Androidtermux-wake-lock; carregador plugado; permissões Samsung
termux-wake-lock falhaApp Termux:API não abertoAbra o app uma vez e rode de novo
F-Droid não instala o APKDownload/permite desconhecidosHabilite "Instalar apps desconhecidos" pro navegador
Cron roda na hora erradaFuso/hora erradosAjuste hora e fuso nas configurações do aparelho
Armazenamento cheioLogs e pacotes acumuladospkg clean; apague logs antigos; df -h
Bateria inchadaBateria velhaTroque ou descarte — risco de incêndio
Sem depuração sem fioAndroid abaixo do 11Use 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.

Checklist — o que conferir no final

Documente.club

Quer ver o que aconteceu depois que o J5 ficou funcionando?

Na Documente, eu mostro arquivos, decisões, erros e próximos projetos construídos com IA. R$29/mês.