Por qué migrar a GlitchTip ahora
Sentry self-hosted 26.4.x sufre desde agosto de 2026 cinco regresiones simultáneas documentadas por la comunidad. Las issues #4301 y #4306 describen respectivamente consumers de Snuba que se reinician en bucle sin procesar ningún evento, y un deadlock en el monitor_consumer que bloquea el registro de los crons. La issue #4321 señala un fallo de autenticación del relay en las conexiones HTTP/2, lo que interrumpe la ingesta de eventos. Estas regresiones han llevado a varios equipos a documentar públicamente su migración a GlitchTip.
La objeción más frecuente es la compatibilidad: ha instrumentado sus aplicaciones con el SDK de Sentry (sentry-python, @sentry/node, sentry-rails…) y no desea reescribir esa instrumentación. GlitchTip implementa la API de Sentry y acepta los eventos enviados por esos mismos SDK. El intercambio se reduce a reemplazar el valor de su variable de entorno SENTRY_DSN por el DSN que GlitchTip proporciona al crear el proyecto. Cero cambios en el código de la aplicación.
Lo que obtiene con GlitchTip v6 autoalojado
- Huella reducida — solo cuatro contenedores (Django, Celery, PostgreSQL, Redis), frente a los veinte y pico servicios de Sentry self-hosted.
- Compatibilidad con el SDK de Sentry — todos los SDK oficiales de Sentry funcionan sin modificación; solo cambia el DSN.
- Soberanía de los datos — las trazas de errores y los datos de usuario permanecen en su infraestructura, bajo su política de retención.
- Licencia GPL-3.0 — el código es auditable, sin componentes propietarios ni funciones reservadas para un plan de pago.
- Monitorización de disponibilidad — GlitchTip incluye monitores de tipo uptime (ping HTTP) sin dependencia externa.
- Interfaz de gestión del rendimiento — seguimiento de las transacciones, de las trazas N+1 y de las consultas lentas a través de la API compatible con Sentry.
- Bajo consumo de RAM — 2 GB de RAM bastan para un uso individual o de equipo pequeño, sin ajustes de configuración.
Requisitos previos antes de empezar
GlitchTip v6 se apoya en cuatro contenedores: Django (el servidor web y la interfaz), Celery (las tareas asíncronas de procesamiento de eventos), PostgreSQL (la base de datos principal) y Redis (la cola de tareas). Necesita:
- Un VPS Linux con 2 GB de RAM como mínimo (4 GB resultan cómodos para un equipo de diez desarrolladores y un volumen de algunos cientos de errores al día).
- Docker y Docker Compose instalados — disponibles en todas las distribuciones recientes.
- Un nombre de dominio o subdominio apuntado a la IP de su VPS, para activar HTTPS a través de Let's Encrypt.
- Los puertos 80 y 443 abiertos en su cortafuegos.
En un VPS de ServOrbit, Docker viene preinstalado. El VPS Start (2 vCPU, 4 GB de RAM), nuestro plan más pequeño, cubre este perfil de carga con margen.
Desplegar GlitchTip con Docker Compose
Crear el directorio de trabajo
Conéctese a su VPS por SSH y cree un directorio dedicado:
mkdir -p /opt/glitchtip && cd /opt/glitchtipCrear el archivo de variables de entorno
Cree un archivo
.envcon los valores de configuración:SECRET_KEY=<cadena-aleatoria-larga>— genérela conopenssl rand -hex 32.DATABASE_URL=postgresql://glitchtip:contraseña@db:5432/glitchtipREDIS_URL=redis://redis:6379/0GLITCHTIP_DOMAIN=https://glitchtip.su-dominio.com[email protected]EMAIL_URL=smtp://usuario:contraseñ[email protected]:587GLITCHTIP_DOMAINdebe coincidir exactamente con el dominio que va a asegurar con HTTPS — queda inscrito en los DSN generados.Crear el archivo docker-compose.yml
Cree un archivo
docker-compose.ymlcon los servicios:db(postgres:16),redis(redis:7),webyworker(imagenglitchtip/glitchtip:latest), vinculando el puerto web a127.0.0.1:8000:8080únicamente. El puerto 8000 queda vinculado a127.0.0.1únicamente: el servicio nunca se expone directamente, sino a través de un proxy inverso.Inicializar la base de datos
Ejecute las migraciones de Django para crear el esquema:
docker compose run --rm web ./manage.py migrateEjecute este comando una sola vez en la instalación y de nuevo cada vez que actualice a una nueva versión de GlitchTip.
Crear el primer superusuario
Cree su cuenta de administrador:
docker compose run --rm web ./manage.py createsuperuserIntroduzca la dirección de correo y la contraseña cuando el asistente los solicite.
Iniciar la stack
Inicie todos los contenedores en segundo plano:
docker compose up -dCompruebe que los cuatro contenedores están en ejecución con
docker compose ps. El servicio web responde enhttp://127.0.0.1:8000.Configurar el proxy inverso nginx con HTTPS
Instale nginx y Certbot si aún no están presentes:
apt install -y nginx certbot python3-certbot-nginxCree un vhost en
/etc/nginx/sites-available/glitchtipcon un bloqueserverque escuche en el puerto 80, definaserver_name glitchtip.su-dominio.comy reenvíe el tráfico ahttp://127.0.0.1:8000medianteproxy_pass. Active la configuración y obtenga el certificado:certbot --nginx -d glitchtip.su-dominio.comCertbot actualiza automáticamente el vhost para redirigir HTTP a HTTPS y añade el bloque SSL.
Conectar el SDK de Sentry de sus aplicaciones
En la interfaz de GlitchTip, cree una organización y luego un proyecto. GlitchTip genera un DSN con el formato
https://<clave>@glitchtip.su-dominio.com/<id-proyecto>.En cada una de sus aplicaciones, reemplace el valor de
SENTRY_DSN(o el parámetrodsnpasado aSentry.init()) por este nuevo DSN. Reinicie sus procesos. Los eventos aparecen en GlitchTip sin ningún otro cambio.
GlitchTip v6 vs alternativas — lo que realmente importa
Desplace la tabla
| Criterio | GlitchTip v6 | Sentry self-hosted 26.4.x | Rollbar (SaaS) | Bugsnag (SaaS) |
|---|---|---|---|---|
| Huella de memoria (prod) | ~500 MB activo (4 contenedores) | ~6-8 GB (20+ servicios) | Ninguna (SaaS) | Ninguna (SaaS) |
| Licencia | GPL-3.0 — código 100% auditable | BSL 1.1 — restricciones comerciales | Propietaria | Propietaria |
| Monitorización de disponibilidad integrada | Sí — ping HTTP, alertas incluidas | No nativa (solo extensión Crons) | No | No |
| Compatibilidad SDK Sentry | Completa — DSN plug-in | Nativa | SDK propietario | SDK propietario |
Configuración posterior a la instalación
Tras el primer arranque, ajuste estos puntos en la interfaz de administración:
Variables de entorno complementarias. Active el envío de alertas por correo definiendo EMAIL_URL en su .env. Añada GLITCHTIP_MAX_EVENT_LIFE_DAYS=90 para limitar la retención de los eventos y controlar el crecimiento de la base de datos.
Acceso multiequipo. GlitchTip gestiona organizaciones y miembros con distintos niveles de permiso. Cree sus equipos desde Configuración → Miembros e invite a sus desarrolladores por correo.
Monitores de disponibilidad. En la sección Monitors de su proyecto, cree un monitor de ping para cada servicio expuesto: GlitchTip envía una petición HTTP a intervalos regulares y crea una issue si el servicio no responde en el tiempo configurado.
Alertas webhook hacia Slack o ntfy. Desde Configuración → Alertas, añada un destino de tipo "Webhook". Para Slack, pegue la URL de su Incoming Webhook (https://hooks.slack.com/services/…); para ntfy, use https://ntfy.sh/<su-topic> con el método POST. GlitchTip envía un JSON estructurado en cada nueva issue o superación de umbral.
Integración SDK — Python. Reemplace únicamente el valor del DSN; el resto del código permanece idéntico:
import sentry_sdk y luego sentry_sdk.init(dsn="https://<clave>@glitchtip.su-dominio.com/<id>", traces_sample_rate=1.0)
Integración SDK — React. Misma lógica en el front:
import * as Sentry from "@sentry/react" y luego Sentry.init({ dsn: "https://<clave>@glitchtip.su-dominio.com/<id>", tracesSampleRate: 1.0 })
GlitchTip recibe tanto las excepciones de Python/Node como los errores JavaScript capturados en el navegador, todo agrupado en la misma interfaz.
Retención de datos. La variable GLITCHTIP_MAX_EVENT_LIFE_DAYS (sin límite por defecto) controla la antigüedad máxima de los eventos conservados. En un SSD de 60 GB, una retención de 90 días para algunos cientos de errores al día raramente supera los 5 GB — monitorice con docker system df.
Endurecimiento de la stack
Restrinja el acceso al puerto 8000 con ufw: ufw allow 80/tcp && ufw allow 443/tcp && ufw deny 8000/tcp. Añada SECURE_SSL_REDIRECT=True y SESSION_COOKIE_SECURE=True en su .env para forzar HTTPS a nivel de Django. Programe un pg_dump diario hacia una ubicación remota — el volumen pg_data contiene todos sus datos de errores y configuración. Consulte también la guía de endurecimiento inicial del servidor Linux antes de exponer la instancia a producción.
Resolución de los errores más comunes
Error: relation "glitchtip_*" does not exist — La migración no se ha ejecutado. Lance docker compose run --rm web ./manage.py migrate y compruebe que el contenedor db está en buen estado con docker compose ps.
CSRF verification failed. Request aborted. — La variable GLITCHTIP_DOMAIN no coincide con el dominio desde el que accede a la interfaz. Compruebe que está definida sin barra final y reinicie los contenedores con docker compose restart.
Connection refused en el DSN desde su aplicación — El puerto 8000 no es accesible desde el exterior (es intencional). Verifique que nginx reenvía correctamente el tráfico HTTPS a 127.0.0.1:8000.
Los eventos aparecen en los logs de Celery pero no en la interfaz — El worker Celery arrancó antes de que terminaran las migraciones. Reinícielo con docker compose restart worker.
No such file or directory: '/etc/nginx/sites-enabled/glitchtip' — Olvidó crear el enlace simbólico. Ejecute ln -s /etc/nginx/sites-available/glitchtip /etc/nginx/sites-enabled/ y luego nginx -t && systemctl reload nginx.
celery.exceptions.WorkerLostError: Worker exited prematurely: signal 9 (SIGKILL) — El contenedor worker fue matado por el OOM killer del kernel. Su VPS se queda sin RAM: reduzca CELERY_WORKER_CONCURRENCY a 2 en .env, o pase a 4 GB de RAM. Confirme con docker compose logs worker --tail 50 y dmesg | grep -i oom.
django.db.utils.OperationalError: FATAL: remaining connection slots are reserved for non-replication superuser connections — PostgreSQL ha alcanzado su límite de max_connections (por defecto: 100). Añada CONN_MAX_AGE=60 en .env para activar el pool de conexiones de Django, o configure PgBouncer como intermediario. Este error aparece típicamente cuando varios workers Celery se ejecutan en paralelo sin pool de conexiones.
GlitchTip en producción en un VPS
GlitchTip v6, publicado en febrero de 2026 bajo licencia GPL-3.0, se apoya en cuatro contenedores. Su compatibilidad con el SDK de Sentry lo convierte en una salida limpia de Sentry self-hosted cuando este acumula regresiones difíciles de sortear.
Para ir más lejos, consulte nuestra guía sobre la checklist de Docker Compose en producción para asegurar aún más su despliegue, y nuestro artículo sobre la rutina de parches de las aplicaciones autoalojadas para mantener GlitchTip al día sin interrupción del servicio.
Una instancia GlitchTip cabe en 2 GB de RAM: el VPS Start (2 vCPU, 4 GB de RAM) cubre este perfil con margen, con acceso root y elección de SO.