Publicando de um telefone
O Chinaski pode funcionar inteiramente em um telefone Android: o admin, o banco de dados e o build vivem no armazenamento do telefone, enquanto o site público em si é servido do armazenamento de objetos Cloudflare R2. Os editores abrem o admin no navegador do telefone para escrever e publicar; os visitantes nunca tocam no telefone, de modo que o site público continua no ar mesmo se o telefone estiver desligado, sem bateria ou offline.
Esta é uma configuração feita uma única vez, melhor deixada para quem se sente confortável com alguns comandos de terminal. Depois da configuração, a publicação do dia a dia não precisa de nada disso: só o admin em um navegador e um atalho na tela inicial.
Se um notebook estiver disponível, veja Publicando de um notebook em vez disso: a mesma configuração de custo zero, com teclado e tela de verdade.
Faça a primeira instalação no Wi-Fi: ela baixa o bundle offline completo e compila vários módulos Perl.
1. Instale os apps Android
Instale Termux, Termux:Boot e Termux:Widget, todos os três da mesma fonte, de preferência F-Droid (um release do GitHub também serve; só não misture fontes, já que as chaves de assinatura delas diferem). O Termux listado na Google Play Store é um build separado, com seu próprio repositório de pacotes, e não é usado aqui.
Abra o Termux:Boot uma vez depois de instalá-lo e, nas configurações de apps do Android, isente o Termux e o Termux:Boot da otimização de bateria; caso contrário o Android pode parar o admin em segundo plano.
2. Instale o Chinaski
No Termux, execute:
curl -fsSL https://www.chinaski.net/dist/termux-quickstart.sh | bash Este único comando instala os pacotes de que o Chinaski precisa, baixa e verifica por checksum o bundle offline, compila as dependências Perl do Chinaski no telefone (a parte lenta, alguns minutos), configura o banco de dados, inicia o admin uma vez para confirmar que funciona e prepara os launchers de boot e de tela inicial do passo 3. Não é preciso root.
Quando terminar, abra http://127.0.0.1:8080/admin no navegador do telefone. O admin só escuta no próprio telefone, então nunca é alcançável de fora. Se ele não carregar, leia $HOME/chinaski/chinaski.log.
Passos manuais (o mesmo que o comando acima; útil se algo falhar)
pkg update
pkg install perl make clang sqlite openssl-tool libjpeg-turbo libpng giflib libwebp rclone rsync curl tar gzip
cd "$HOME"
curl -fSLO https://www.chinaski.net/dist/chinaski-latest.tar.gz
curl -fSLO https://www.chinaski.net/dist/chinaski-latest.tar.gz.sha256
sha256sum -c chinaski-latest.tar.gz.sha256
mkdir extracted
tar -xzf chinaski-latest.tar.gz -C extracted
cd extracted/chinaski-*
bash install.sh --termux --prefix "$HOME/chinaski"
bash "$HOME/chinaski/app/install/termux-start.sh"
mkdir -p "$HOME/.termux/boot" "$HOME/.shortcuts/tasks"
cp "$HOME/chinaski/app/install/termux-start.sh" "$HOME/.termux/boot/10-chinaski"
cp "$HOME/chinaski/app/install/termux-start.sh" "$HOME/.shortcuts/tasks/Restart My Website"
chmod 700 "$HOME/.termux/boot/10-chinaski" "$HOME/.shortcuts/tasks/Restart My Website" Se a biblioteca de imagens (Imager) não compilar, salve o log completo do build e a saída de pkg list-installed para diagnosticar o problema.
3. Mantenha-o executando
A instalação já deixou o launcher onde o Termux:Boot e o Termux:Widget o procuram. Dois passos únicos no telefone terminam o trabalho:
- Abra o app Termux:Boot uma vez, para que o admin volte a executar depois de uma reinicialização do telefone.
- Adicione o widget Termux:Widget à tela inicial e escolha Restart My Website. Um toque reinicia o admin se ele algum dia parar, sem terminal. Se o admin já estiver executando, o toque não faz nada.
4. Aponte para o Cloudflare R2
Aqui é onde o site público de fato vive.
No Cloudflare:
- Crie um bucket R2 com armazenamento Standard. Use este bucket só para este site: cada publicação faz o bucket corresponder exatamente ao site e apaga qualquer outra coisa nele.
- Em R2 → Manage API tokens, crie um token de API com permissão Object Read & Write, limitado a esse bucket. Copie a Access Key ID e a Secret Access Key (o segredo é mostrado apenas uma vez). Anote seu Account ID na página de visão geral do R2.
- Nos Settings do bucket, conecte um domínio próprio (por exemplo
www.example.com). O Cloudflare cria o registro DNS e torna o bucket público nesse endereço; não há mais nada para ligar. O endereçor2.devdo próprio R2 é só para testes. - O R2 serve um arquivo apenas pelo nome exato dele, enquanto o Chinaski salva as páginas como
.../index.html. No seu domínio (em Rules, não no R2), adicione uma URL Rewrite Rule:- Filtro (expressão personalizada):
(http.host eq "www.example.com" and ends_with(http.request.uri.path, "/"))(use o seu próprio endereço) - Path: reescreva para Dynamic
concat(http.request.uri.path, "index.html")
- Filtro (expressão personalizada):
No Chinaski: defina Settings → General → Site URL como o seu endereço público (por exemplo https://www.example.com), depois em Settings → Deploy:
| Field | Value |
|---|---|
| Deploy automatically after a successful build | On |
| Enable S3 deploy | On |
| Bucket | O nome do seu bucket R2 |
| Endpoint | https://<ACCOUNT_ID>.r2.cloudflarestorage.com (nada depois de .com) |
| Region | auto |
| Access Key / Secret Key | As credenciais da API do R2 |
Não coloque o nome do bucket no final do Endpoint. O Cloudflare às vezes mostra o endereço como https://<ACCOUNT_ID>.r2.cloudflarestorage.com/<bucket>. Copiado assim, o site é enviado para uma pasta dentro do bucket e todas as páginas mostram a mensagem do R2 "Error 404: Is this your bucket?", mesmo que o Test S3 Connection passe.
Salve e depois use Test S3 Connection para confirmar que as credenciais funcionam. Publique algo e depois abra o seu endereço e uma página dentro do site para confirmar que tudo carrega.
Publicando uma mudança
Nada específico de telefone aqui: edite e salve uma página ou um post normalmente, e o build e o deploy executam do mesmo jeito que executariam em um servidor. Acompanhe o banner de status do admin para ver "Publishing your update…" até chegar a "Your update is live.". Uma conexão móvel lenta pode fazer esse passo demorar; o banner continua preciso durante todo o tempo em que o upload estiver genuinamente executando.
Se um build tem sucesso mas o upload falha (a conexão caiu no meio do upload, por exemplo), o site publicado pela última vez no R2 permanece exatamente como estava. Os visitantes nunca veem uma publicação pela metade. Tente de novo quando voltar a ter conexão.
Atualizando o Chinaski
Para instalar a versão mais recente do Chinaski, execute isto no Termux:
curl -fsSL https://www.chinaski.net/dist/chinaski-update.sh | bash Ele verifica se há uma versão nova disponível, instala e reinicia o admin. Seu banco de dados, configurações, uploads e mídias são mantidos. Instalações feitas antes de rsync entrar na lista de pacotes precisam dele uma vez: pkg install rsync.
Bom saber
- Formulários e downloads de documentos: o site público é servido pelo R2, e o telefone não é alcançável pela internet, então os formulários de contato e os downloads de documentos do site público não funcionam nessa configuração.
- Custos: o nível gratuito do Cloudflare R2 cobre muitas vezes um site pequeno típico, e o tráfego para os visitantes não é cobrado. O nome do seu domínio você continua pagando.