Self-hosted · AGPL-3.0

Estadísticas de Ghost, autoalojadas

Sustituye al cloud propietario detrás de las estadísticas de Ghost 6: un binario Go, un fichero SQLite y el dashboard de siempre, leyendo de tu servidor.

Eventos NDJSON JWT HS256 13 pipes v1 SQLite WAL 0 telemetría Binario ~11 MB Backups diarios verificados /metrics Prometheus

Por qué GhostBird

Pieza de recambio, no prototipo

Drop-in fiel

Los 13 endpoints del protocolo con la semántica exacta del original: filtrado de sesiones en dos etapas, series con huecos a cero y zonas horarias.

Sesiones agregadas

La tabla equivalente a la vista materializada del original, mantenida al escribir cada evento. El panel responde rápido aunque el histórico crezca.

Métricas honestas

Las reglas de conteo no se inventan aquí: son las del servicio original, verificadas corriendo su propia suite de tests contra el mismo fixture.

Operable por una persona

Backups diarios verificados con rotación, healthz con sonda de escritura, retención configurable y /metrics en formato Prometheus.

Cómo funciona

Ghost ni se entera

Ghost 6 habla con Tinybird para pintar su panel de estadísticas: un cloud de código cerrado. Quien autoaloja se queda con el panel vacío, o manda los datos de sus lectores fuera. GhostBird ocupa ese sitio y responde el mismo protocolo.

No hay servicios intermedios que instalar: el collector está dentro del binario. El tracker sigue POSTeando, el dashboard sigue leyendo pipes y los JWT los sigue firmando Ghost. Solo que ahora todo vive en tu máquina.

  • El tracker del navegador envía los page hits a tu GhostBird.
  • El dashboard consulta los 13 pipes contra tu SQLite.
  • Ghost firma los JWT con el secreto compartido; GhostBird solo los verifica.
Bloque tinybird de la config de Ghost
{
  "tinybird": {
    "workspaceId": "ghostbird",
    "adminToken": "<secreto compartido>", // el mismo que -admin-token
    "tracker": {
      "endpoint": "https://TU-SITIO/ghb/api/v1/page_hit"
    },
    "stats": {
      "endpoint": "http://127.0.0.1:18181",
      "endpointBrowser": "https://TU-SITIO/ghb"
    }
  }
}

Cifras de GhostBird

13pipes del protocolo, verificables
2dependencias Go directas
11pesa el binario estático
10de RAM medidos en producción
0conexiones salientes
100suite de tests del original, en verde

Espacio reservado · Notas de campo 1

Hueco para el contenido que decida el propietario: temas, casos y observaciones.

El panel de analytics que ya tienes, alimentado por tu servidor.

El compromiso

Tres compromisos

Licencia

AGPL, para siempre

No es open core: no hay funciones guardadas para un plan de pago, porque no hay plan de pago. Si modificas GhostBird y lo sirves en público, el AGPL pide compartir los cambios. Esa cláusula es el punto, no la letra pequeña.

Gobierno

Community driven

Issues, parches y decisiones de rumbo a la vista. El proyecto sirve a sitios reales en producción desde el día uno, así que se mantiene, no se arrincona.

Privacidad

Los datos no salen

Sin telemetría, sin phone-home, sin estadísticas anónimas de uso. El binario no abre conexiones salientes más que las que configures, y por defecto ninguna.

Para quién

Hecho para quien autoaloja Ghost

Publishers con Ghost self-hosted

Tu pestaña de estadísticas vuelve a funcionar tal cual, con métricas que entienden miembros, posts y gift links.

Comunidades y clubes

Webs colectivas que no quieren mandar los datos de sus lectores a un cloud ajeno para tener un panel.

Agencias y freelancers

Mantienes Ghost para clientes sin sumar otra factura, otra cuenta o otro panel que aprender.

Puristas de la privacidad

Cero conexiones salientes, un SQLite auditable y AGPL. Lo mínimo, bien hecho.

Dudas razonables

Preguntas frecuentes

Sigue con ellos si te gustan. GhostBird no compite con un panel de análisis: te devuelve el que Ghost trae de fábrica. Además cuenta cosas que un contador genérico no modela: estado de miembro (free, paid, comped, gift), atribución por post y visitas desde gift links.

La suite de tests oficial del proveedor original, publicada bajo MIT y vendorizada en el repo, corre entera contra el mismo fixture: misma entrada, misma salida. Es compatibilidad de contrato, no una copia del producto. GhostBird es independiente y no está afiliado a Ghost Foundation ni a Tinybird.

Menos de 10 MB de RAM medidos en producción. Las consultas leen una tabla de sesiones agregada al escribir cada evento, así que el panel responde rápido aunque acumules millones de eventos. Un binario estático de unos 11 MB sin CGO.

Diarios, con VACUUM INTO y verificación quick_check, con rotación de 14 días. /healthz incluye una sonda de escritura que responde 503 si la base de datos deja de admitir escrituras, con el disco lleno incluido.

AGPL-3.0, para siempre. Sin tier de pago ni funciones cerradas. Si lo modificas y lo sirves en un servidor público, comparte los cambios.

Espacio reservado · Notas de campo 2

Segundo hueco para el contenido que decida el propietario.

Instalación

Instala GhostBird hoy

El instalador crea un usuario dedicado, una unit de systemd endurecida y un token aleatorio que se muestra una sola vez. Después, dos URLs en la config de Ghost y a correr.

One-liner (repo público)
curl -fsSL https://raw.githubusercontent.com/gnacho/ghostbird/main/install.sh | sh
Desde fuente
CGO_ENABLED=0 go build -trimpath -ldflags "-s -w" -o ghostbird ./cmd/ghostbird

El one-liner necesita el repositorio público; las releases traen binarios linux amd64 y arm64 con checksums.

Self-hosted · AGPL-3.0 · Sin telemetría · Un binario · Un fichero SQLite · Drop-in para Ghost 6 · Sin nube ajena