Hecho con Chinaski

Publicación desde un teléfono

Chinaski puede funcionar por completo en un teléfono Android: el admin, la base de datos y el build viven en el almacenamiento del teléfono, mientras que el site público se sirve desde el almacenamiento de objetos Cloudflare R2. Los editores abren el admin en el navegador del teléfono para escribir y publicar; los visitantes nunca tocan el teléfono, así que el site público sigue en línea aunque el teléfono esté apagado, sin batería o sin conexión.

Esta es una configuración de una sola vez, idealmente hecha por quien se sienta cómodo con algunos comandos de terminal. Después de la configuración, la publicación del día a día no necesita nada de eso: solo el admin en un navegador y un acceso directo en la pantalla de inicio.

Si hay una laptop disponible, consulta Publicación desde una laptop en su lugar: la misma configuración de costo cero, con teclado y pantalla reales.

Haz la primera instalación con Wi-Fi: descarga el bundle offline completo y compila varios módulos Perl.

1. Instalar las apps de Android

Instala Termux, Termux:Boot y Termux:Widget, los tres desde la misma fuente, preferiblemente F-Droid (una versión de GitHub también sirve; solo no mezcles fuentes, porque sus claves de firma difieren). El Termux de la Google Play Store es un build aparte con su propio repositorio de paquetes y no se usa aquí.

Abre Termux:Boot una vez después de instalarlo y, en los ajustes de apps de Android, exime a Termux y a Termux:Boot de la optimización de batería; de lo contrario Android puede detener el admin en segundo plano.

2. Instalar Chinaski

En Termux, ejecuta:

curl -fsSL https://www.chinaski.net/dist/termux-quickstart.sh | bash

Este único comando instala los paquetes que Chinaski necesita, descarga y verifica por checksum el bundle offline, compila las dependencias Perl de Chinaski en el teléfono (la parte lenta, unos minutos), configura la base de datos, arranca el admin una vez para confirmar que funciona y prepara los launchers de arranque y de pantalla de inicio del paso 3. No se necesita root.

Cuando termine, abre http://127.0.0.1:8080/admin en el navegador del teléfono. El admin solo escucha en el propio teléfono, así que nunca es alcanzable desde afuera. Si no carga, revisa $HOME/chinaski/chinaski.log.

Pasos manuales (lo mismo que el comando de arriba; útil si algo falla)
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"

Si la librería de imágenes (Imager) no compila, guarda el log completo del build y la salida de pkg list-installed para diagnosticar el problema.

3. Mantenerlo corriendo

La instalación ya dejó el launcher donde Termux:Boot y Termux:Widget lo buscan. Dos pasos únicos en el teléfono terminan el trabajo:

  • Abre la app Termux:Boot una vez, para que el admin vuelva a arrancar tras un reinicio del teléfono.
  • Agrega el widget Termux:Widget a la pantalla de inicio y elige Restart My Website. Un toque reinicia el admin si alguna vez se detiene, sin necesidad de terminal. Si el admin ya está corriendo, el toque no hace nada.

4. Apuntarlo a Cloudflare R2

Aquí es donde vive realmente el site público.

En Cloudflare:

  1. Crea un bucket de R2 con almacenamiento Standard. Usa este bucket solo para este site: cada publicación hace que el bucket coincida exactamente con el site y borra cualquier otra cosa que haya en él.
  2. Bajo R2 → Manage API tokens, crea un token de API con permiso Object Read & Write, limitado a ese bucket. Copia la Access Key ID y la Secret Access Key (el secreto se muestra una sola vez). Anota tu Account ID de la página de resumen de R2.
  3. En los Settings del bucket, conecta un dominio propio (por ejemplo www.example.com). Cloudflare crea el registro DNS y hace el bucket público en esa dirección; no hay nada más que activar. La dirección r2.dev de R2 es solo para pruebas.
  4. R2 sirve un archivo solo por su nombre exacto, mientras que Chinaski guarda las páginas como .../index.html. En tu dominio (bajo Rules, no en R2), agrega una URL Rewrite Rule:
    • Filtro (expresión personalizada): (http.host eq "www.example.com" and ends_with(http.request.uri.path, "/")) (usa tu propia dirección)
    • Path: reescribe a Dynamic concat(http.request.uri.path, "index.html")

En Chinaski: pon Settings → General → Site URL en tu dirección pública (por ejemplo https://www.example.com), y luego en Settings → Deploy:

Field Value
Deploy automatically after a successful build On
Enable S3 deploy On
Bucket El nombre de tu bucket de R2
Endpoint https://<ACCOUNT_ID>.r2.cloudflarestorage.com (nada después de .com)
Region auto
Access Key / Secret Key Las credenciales de la API de R2

No pongas el nombre del bucket al final del Endpoint. Cloudflare a veces muestra la dirección como https://<ACCOUNT_ID>.r2.cloudflarestorage.com/<bucket>. Copiada así, el site se sube a una carpeta dentro del bucket y todas las páginas muestran el mensaje de R2 "Error 404: Is this your bucket?", aunque Test S3 Connection pase.

Guarda y luego usa Test S3 Connection para confirmar que las credenciales funcionan. Publica algo y luego abre tu dirección y una página dentro del site para confirmar que todo carga.

Publicar un cambio

Nada específico del teléfono aquí: edita y guarda una página o un post como siempre, y el build y el deploy corren igual que correrían en un servidor. Observa el banner de estado del admin para ver "Publishing your update…" hasta llegar a "Your update is live.". Una conexión móvil lenta puede hacer que ese paso tarde un rato; el banner sigue siendo preciso durante todo el tiempo que la subida siga corriendo de verdad.

Si un build tiene éxito pero la subida falla (que la conexión se caiga a mitad de la subida, por ejemplo), el site publicado la última vez en R2 queda exactamente como estaba. Los visitantes nunca ven una publicación a medias. Reintenta cuando vuelvas a tener conexión.

Actualizar Chinaski

Para instalar la última versión de Chinaski, ejecuta esto en Termux:

curl -fsSL https://www.chinaski.net/dist/chinaski-update.sh | bash

Revisa si hay una versión nueva disponible, la instala y reinicia el admin. Tu base de datos, configuración, subidas y medios se conservan. Las instalaciones hechas antes de que rsync estuviera en la lista de paquetes lo necesitan una vez: pkg install rsync.

Conviene saber

  • Formularios y descargas de documentos: el site público lo sirve R2 y el teléfono no es alcanzable desde internet, así que los formularios de contacto y las descargas de documentos del site público no funcionan en esta configuración.
  • Costos: el nivel gratuito de Cloudflare R2 cubre muchas veces un site pequeño típico, y el tráfico a los visitantes no se cobra. El nombre de tu dominio sí lo pagas.
Lee este sitio en