Nextcloud em um celular Android antigo com Tailscale
Sim, o Nextcloud roda no Termux com proot-distro e você acessa pelo Tailscale num celular antigo. Veja onde instalar o Tailscale e como evitar que o Android mate o servidor.
Dá para rodar Nextcloud em um celular Android com Tailscale?
Sim. O Nextcloud roda em um Ubuntu montado com proot-distro dentro do Termux, e você acessa esse servidor pelo Tailscale a partir do notebook ou de outro celular. Um celular antigo parado na gaveta vira um pequeno servidor de arquivos pessoal, sem abrir porta no roteador.
O Termux é um terminal com ambiente Linux para Android. O proot-distro instala uma distribuição Linux completa, como o Ubuntu, dentro do Termux. O Tailscale cria uma rede privada entre os seus aparelhos, chamada tailnet. Se o Tailscale ainda é novidade para você, comece por o que é o Tailscale e como a tailnet funciona.
A instalação em si é a parte fácil. O que decide se o servidor continua de pé depois de uma semana são quatro pontos: onde o Tailscale roda, o que o proot muda no Linux, o que fazer com o HTTPS e o que o Android faz com um processo que fica ligado o tempo todo. Este guia cobre a instalação e depois cada um desses pontos.
O que você precisa antes de começar
- Um celular Android que fique sempre na tomada. Um servidor que desliga quando a bateria acaba não serve para guardar arquivos.
- Espaço livre no armazenamento interno. O Ubuntu, os pacotes e o próprio Nextcloud ocupam espaço antes do primeiro arquivo seu.
- O Termux instalado pelo F-Droid ou pelas releases oficiais no GitHub.
- Uma conta do Tailscale e o app do Tailscale em pelo menos mais um aparelho, como o seu notebook.
O README do termux-app indica o F-Droid e o GitHub como fontes, com suporte a partir do Android 7. O guia da comunidade no fórum do Nextcloud sobre Termux dá o mesmo conselho. As versões de cada fonte são assinadas com chaves diferentes, então você não consegue atualizar uma versão do F-Droid com um APK de outra fonte. Para trocar de fonte, desinstale o Termux antes. Isso apaga tudo que estava dentro dele.
O mesmo README avisa que o Termux pode ficar instável no Android 12 ou mais novo. Um dos motivos é o limite de processos do Android, que este guia trata numa seção própria mais abaixo.
Onde o Tailscale roda: no app do Android ou dentro do Termux?
Existem dois lugares possíveis para o Tailscale, e eles não se comportam igual.
O app do Tailscale para Android. Segundo a documentação do Tailscale, o app funciona no Android 8.0 ou mais novo, em celulares, tablets e Android TV. Você instala pela Google Play ou pela página de download do próprio Tailscale. Durante a configuração, o app pede para instalar uma configuração de VPN no Android. Depois disso, o celular inteiro ganha um endereço na tailnet, e não só um app.
O Tailscale dentro do Termux. Aqui o caminho é ruim por dois motivos. Primeiro, não há pacote. Em 21 de outubro de 2026, o índice aarch64 do repositório principal do Termux não tinha nenhum pacote chamado tailscale, então pkg install tailscale não funciona. A única tentativa de empacotar que encontrei, o pull request #22980 no termux-packages, foi fechada sem merge em fevereiro de 2025. Quem fechou disse que não tinha como fazer os testes necessários. Na discussão, o modo com interface de túnel falhou com erros de iptables no aparelho de teste.
Segundo, o Termux sem root não cria uma interface de túnel. Sobra o modo userspace networking, que a documentação do Tailscale define como o modo para rodar o Tailscale onde você não tem acesso para criar um dispositivo de túnel VPN. A página descreve o tailscaled funcionando como proxy SOCKS5 ou HTTP, para que outros programas saiam pela tailnet através dele. Isso é tráfego de saída. A página não diz se conexões que chegam da tailnet até um serviço local funcionam nesse modo. Para um servidor, conexão de entrada é justamente o que você precisa, e eu não consegui confirmar que ela funciona.
Por isso este guia usa o app do Android. Ele é o caminho com suporte oficial, e ele coloca o celular inteiro na tailnet.
Instale o Ubuntu no Termux com proot-distro
Abra o Termux e atualize os pacotes:
pkg update && pkg upgrade -y
pkg install proot-distroO proot-distro puxa o proot como dependência. Agora instale o Ubuntu 24.04 e entre nele:
proot-distro install ubuntu:24.04
proot-distro login ubuntuAgora você está no shell do Ubuntu, como root. Esse root não é root de verdade no Android. O proot só simula um usuário root dentro do sistema de arquivos do Ubuntu, por isso nada disso exige fazer root no celular.
O que o proot muda: sem systemd e sem portas abaixo de 1024
Um Ubuntu dentro do proot parece um Ubuntu normal, mas duas coisas mudam, e as duas afetam o Nextcloud.
Não existe systemd. O README do proot-distro diz que iniciar supervisores de serviço, como systemd, OpenRC ou daemons ativados por socket, em geral não é possível. Isso quer dizer que systemctl enable não faz nada útil aqui. Você inicia o Apache e o MariaDB com service, à mão, toda vez que o Ubuntu sobe. Nada volta sozinho depois de um reinício do celular.
A porta 80 não abre. O guia do fórum do Nextcloud explica que o Ubuntu dentro do proot normalmente não consegue abrir a porta privilegiada 80, e resolve trocando o Apache para a porta 8080. Este guia faz o mesmo. Existe outra saída: o proot-distro tem a opção --redirect-ports, que mapeia as portas privilegiadas de 1 a 1023 para números mais altos. Por exemplo, a 80 vira 2080. A troca para 8080 é mais fácil de entender, porque o número que você configura é o número que você digita no navegador.
Instale Apache, PHP e MariaDB no Ubuntu do proot
Dentro do Ubuntu, instale a pilha web. A lista de pacotes é a mesma do guia do fórum, com curl e sudo a mais para os testes e para o occ:
apt update
apt full-upgrade -y
apt install -y apache2 mariadb-server libapache2-mod-php php php-mysql php-gd php-curl php-mbstring php-intl php-gmp php-bcmath php-xml php-zip php-imagick php-apcu unzip wget nano bzip2 curl sudo
php -vO php -v deve mostrar a versão do PHP que o Ubuntu 24.04 instalou. Agora troque a porta do Apache de 80 para 8080 e ative os módulos que o Nextcloud usa:
sed -i 's/^Listen 80$/Listen 8080/' /etc/apache2/ports.conf
echo "ServerName localhost" >> /etc/apache2/apache2.conf
a2enmod rewrite headers env dir mime setenvifCrie o banco de dados e baixe o Nextcloud
Inicie o MariaDB e abra o cliente:
service mariadb start
mariadbNo prompt do MariaDB, crie o banco e o usuário. Troque a senha por uma sua:
CREATE DATABASE nextcloud CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
CREATE USER 'nextcloud'@'localhost' IDENTIFIED BY 'SUA_SENHA_DO_BANCO';
GRANT ALL PRIVILEGES ON nextcloud.* TO 'nextcloud'@'localhost';
FLUSH PRIVILEGES;
EXIT;Baixe a versão mais recente do Nextcloud e coloque em /srv/nextcloud:
cd /tmp
wget https://download.nextcloud.com/server/releases/latest.tar.bz2
tar -xjf latest.tar.bz2
mv nextcloud /srv/
chown -R www-data:www-data /srv/nextcloudCrie o site do Apache. O bloco Directory segue o exemplo do manual de administração do Nextcloud, só com outro caminho e outra porta:
cat > /etc/apache2/sites-available/nextcloud.conf <<'EOF'
<VirtualHost *:8080>
DocumentRoot /srv/nextcloud/
<Directory /srv/nextcloud/>
Require all granted
AllowOverride All
Options FollowSymLinks MultiViews
<IfModule mod_dav.c>
Dav off
</IfModule>
</Directory>
</VirtualHost>
EOF
a2dissite 000-default.conf
a2ensite nextcloud.conf
apache2ctl configtest
service apache2 start
curl -I http://127.0.0.1:8080/O apache2ctl configtest deve responder Syntax OK. O curl -I deve devolver uma linha que começa com HTTP/1.1 e um código de status. Se aparecer Connection refused, o Apache não está escutando na 8080. Nesse caso, confira se o sed mudou mesmo a linha Listen em /etc/apache2/ports.conf.
Termine a instalação e teste o acesso pela tailnet
Abra http://127.0.0.1:8080/ no navegador do próprio celular. O instalador do Nextcloud pede um usuário administrador e os dados do banco: usuário nextcloud, a senha que você criou, banco nextcloud e host localhost.
Agora instale o app do Tailscale no celular, faça login e aceite o pedido de configuração de VPN. O app mostra o endereço IP que o celular recebeu na tailnet. Com o MagicDNS ligado, o console de administração do Tailscale também mostra o nome MagicDNS do aparelho, que é um nome curto para esse IP. Anote os dois.
No notebook, que também está na tailnet, teste:
curl -I http://IP_DO_CELULAR_NA_TAILNET:8080/Não encontrei nenhuma página oficial que confirme que um servidor rodando dentro do proot responde no endereço de tailnet que o app do Android cria. Esse teste é a confirmação. Se ele devolver uma linha HTTP/1.1, o caminho funciona no seu aparelho. Se o tempo esgotar, confira primeiro se o app do Tailscale está conectado no celular e se o Apache ainda está rodando no Termux.
Coloque o IP da tailnet e o nome MagicDNS em trusted_domains
O Nextcloud só aceita login pelos endereços que estão na lista trusted_domains. O manual explica que essa lista evita ataques de envenenamento do cabeçalho Host (host header poisoning) e pede para não removê-la. Se você instalou pelo 127.0.0.1, o IP da tailnet e o nome MagicDNS ainda não estão na lista. Ao abrir o Nextcloud por um deles, você recebe uma página de erro sobre domínio não confiável em vez da tela de login.
O occ é a ferramenta de linha de comando do Nextcloud. O manual manda rodar o occ como o usuário do servidor web, que no Ubuntu é www-data. Dentro do Ubuntu do proot, veja a lista atual:
cd /srv/nextcloud
sudo -E -u www-data php occ config:system:get trusted_domainsDepois adicione o IP da tailnet e o nome MagicDNS em posições novas da lista. O número depois de trusted_domains é a posição. Use números que ainda não estão ocupados, porque gravar numa posição existente substitui o valor que estava lá:
sudo -E -u www-data php occ config:system:set trusted_domains 1 --value=IP_DO_CELULAR_NA_TAILNET
sudo -E -u www-data php occ config:system:set trusted_domains 2 --value=NOME_MAGICDNS_DO_CELULARRode o config:system:get de novo para conferir a lista. Não testei o sudo -u dentro do proot em um celular. Se ele falhar no seu aparelho, a mesma lista fica no arquivo /srv/nextcloud/config/config.php, na chave trusted_domains, e você pode editar com nano.
Como impedir que o Android mate o servidor
Um servidor precisa ficar rodando quando a tela está apagada. O Android foi feito para o contrário: ele economiza bateria matando o que roda em segundo plano. Cada camada abaixo precisa de uma ação diferente.
Wake lock. A notificação do Termux tem uma ação chamada Acquire wakelock. O comando termux-wake-lock, do pacote termux-tools, pede o mesmo wake lock pelo terminal. Rode no Termux, fora do Ubuntu, antes de subir os serviços. Para soltar, use a ação Release wakelock na mesma notificação.
Otimização de bateria. Cada fabricante coloca essa opção num lugar diferente e com outro nome. Procure nas configurações de bateria do seu celular a opção de não restringir o Termux. Não consegui abrir a documentação oficial do Android sobre esse comportamento, então não vou descrever o que cada modo faz. Teste deixando a tela apagada por uma hora e veja se o Nextcloud ainda responde.
O limite de processos do Android 12 ou mais novo. O README do Termux avisa que o Android mata processos "fantasmas" acima de 32. Processo fantasma é um processo filho criado por um app, como o Apache, o MariaDB e o próprio proot dentro do Termux. O Android também mata processos que usam CPU demais. A correção muda por versão. O resumo abaixo vem da documentação mantida por agnostic-apollo, desenvolvedor do Termux, em um repositório pessoal dele, e não do Google.
- Android 12: não existe ajuste que desligue a morte por uso de CPU. Dá apenas para aumentar o limite de 32 processos, por ADB (Android Debug Bridge, a ferramenta de depuração por USB) ou com root.
- Android 12L e 13: um comando por ADB desliga as duas formas de matar processos.
- Android 14 ou mais novo: as opções do desenvolvedor têm um botão chamado "Disable child process restrictions". No celular em português, o nome aparece traduzido. Se você desligar as opções do desenvolvedor, o ajuste volta ao padrão.
- Android 15 e 16: a documentação não fala dessas versões. Teste no seu aparelho.
No Android 12, a mesma documentação manda desligar primeiro a sincronização de configurações, porque o Google Play services pode sobrescrever o limite poucos minutos depois de o celular ligar. Com a depuração USB ativa e o celular conectado ao computador:
adb shell "/system/bin/device_config set_sync_disabled_for_tests persistent"
adb shell "/system/bin/device_config put activity_manager max_phantom_processes 2147483647"Desligar essa sincronização pode impedir que mecanismos de recuperação do Android restaurem valores padrão. No Android 12L e 13, o comando é este:
adb shell "settings put global settings_enable_monitor_phantom_procs false"A documentação também avisa que fabricantes podem ter serviços parecidos por conta própria. Em aparelhos Samsung ou Xiaomi, por exemplo, confirme no seu celular em vez de confiar só na versão do Android.
Como subir o Nextcloud de novo depois de reiniciar o celular
Como não existe systemd, nada inicia sozinho. Depois de cada reinício, abra o Termux e rode:
termux-wake-lock
proot-distro login ubuntuDentro do Ubuntu:
service mariadb start
service apache2 start
curl -I http://127.0.0.1:8080/Deixe essa sessão do Termux aberta. O guia do fórum coloca os dois service start no ~/.bashrc do Ubuntu, para que eles rodem a cada login. Isso economiza digitação, mas não resolve o reinício do celular: alguém ainda precisa abrir o Termux.
E o HTTPS? Uma pergunta ainda aberta
Em um servidor Linux comum na tailnet, o HTTPS é simples. Você ativa o MagicDNS e o HTTPS na página DNS do console do Tailscale e roda tailscale cert ou tailscale serve na máquina. A diferença entre os dois caminhos de publicação está em Tailscale Serve e Funnel: o que cada um expõe.
No celular, isso esbarra numa frase da referência da CLI do Tailscale: não há suporte a CLI no iOS e no Android. Tanto o tailscale cert quanto o tailscale serve são comandos da CLI. As páginas de Serve e de HTTPS não dizem nada sobre o app do Android. Então a pergunta "dá para ter HTTPS do Tailscale com o app do Android?" continua aberta. Não encontrei confirmação de que dá, nem de que não dá.
Sem certificado, você usa HTTP puro dentro da tailnet. A documentação do Tailscale diz que as conexões entre nós da tailnet têm criptografia de ponta a ponta. Isso protege o trajeto entre o seu notebook e o celular, inclusive numa rede Wi-Fi pública. A mesma documentação lembra que navegadores e outras ferramentas não sabem dessa criptografia, então podem mostrar avisos ou desligar recursos em endereços HTTP. E o túnel não protege duas coisas:
- Qualquer aparelho que já está na sua tailnet chega à tela de login. A proteção ali é a senha do Nextcloud.
- O Apache escuta na porta 8080 em todas as interfaces do celular, inclusive o Wi-Fi. Quem está na mesma rede Wi-Fi que o celular alcança a tela de login sem passar pelo Tailscale, e esse tráfego vai sem criptografia.
Uma coisa este guia não recomenda: o Tailscale Funnel. O Funnel publica um serviço local na internet aberta, para pessoas fora da sua tailnet. Ele está em beta, só escuta nas portas 443, 8443 e 10000 e roda apenas onde a CLI do Tailscale roda. Um Nextcloud instalado num celular, sem endurecimento, não deve ficar exposto para a internet inteira. Para entender por que a tailnet já dispensa abrir porta, leia por que usar o Tailscale no lugar de redirecionamento de portas.
Vale a pena usar um celular antigo como servidor Nextcloud?
Minha opinião: vale para aprender e para guardar arquivos pessoais, num celular antigo que fica sempre ligado na tomada. Você aprende como o Nextcloud funciona por dentro, e o custo é zero.
Para arquivos que você não pode perder, eu não confiaria. O Android pode matar o servidor a qualquer momento, e cada atualização do sistema pode mudar as regras. O armazenamento interno de um celular não foi pensado para um banco de dados escrevendo o dia todo. E quando o celular reinicia, o servidor fica fora do ar até alguém abrir o Termux. Esses são os motivos que levam as pessoas a migrar para um Raspberry Pi ou para uma VPS.
Se você chegou a esse ponto, o passo seguinte é o Nextcloud em uma VPS com Docker, TLS e backups. Lá os serviços sobem sozinhos com o sistema, e o certificado é de verdade. Antes de migrar, leia também as limitações do Nextcloud em uma VPS, para saber o que muda. E se a sua necessidade real é só manter pastas iguais entre aparelhos, a comparação entre Syncthing e Nextcloud mostra quando um servidor central nem é necessário.
FAQ
Preciso de root no celular para rodar o Nextcloud?
Não. Nenhum passo da instalação deste guia usa root no Android. O root que aparece dentro do Ubuntu do proot é simulado. A única parte que pode exigir mais acesso é o ajuste do limite de processos no Android 12, 12L e 13, que usa ADB pelo cabo USB ou root.
Dá para instalar o Tailscale dentro do Termux em vez de usar o app?
Em 21 de outubro de 2026, o repositório principal do Termux não tinha pacote tailscale para aarch64, e a única proposta de pacote que encontrei foi fechada sem merge. Sem root, só sobra o modo userspace networking, e a documentação do Tailscale descreve esse modo como proxy de saída, sem confirmar conexões de entrada. Para um servidor, use o app oficial do Tailscale para Android, que funciona a partir do Android 8.0.
Por que o Termux fecha sozinho e o Nextcloud para de responder?
No Android 12 ou mais novo, o sistema mata processos filhos de apps acima de um limite de 32 e mata processos que usam CPU demais. O Apache, o MariaDB e o proot contam nesse limite. A correção depende da versão. No Android 12 dá só para aumentar o limite por ADB. No 12L e no 13, um comando ADB desliga o mecanismo. No 14 ou mais novo existe um botão nas opções do desenvolvedor. Ative também o wake lock do Termux e libere o Termux da otimização de bateria.
Dá para ter HTTPS com o Tailscale quando ele roda como app no Android?
Não está confirmado. Os comandos tailscale cert e tailscale serve são da CLI, e a documentação do Tailscale diz que não há CLI para Android. Sem certificado, o HTTP dentro da tailnet ainda viaja cifrado entre os aparelhos, mas o navegador não sabe disso. Além disso, quem estiver no mesmo Wi-Fi que o celular alcança a porta 8080 sem criptografia. Não use o Funnel para contornar isso, porque ele publica o Nextcloud na internet aberta.