Instalación de Self-hosted Sentry en VPS: Docker, PostgreSQL y Redis para el seguimiento de errores
TL;DR
En esta guía detallada, configuraremos nuestra propia instalación de Sentry en un servidor privado virtual (VPS) utilizando Docker y Docker Compose. Sentry es una potente plataforma para el monitoreo de errores y rendimiento en tiempo real, que permite a los desarrolladores identificar, resolver y prevenir rápidamente fallos en sus aplicaciones. Desplegaremos Sentry con sus componentes clave — PostgreSQL para la base de datos y Redis para el almacenamiento en caché y las colas, asegurando un control total sobre los datos y la infraestructura.
Aprenderá a elegir la configuración de VPS adecuada para su instalación de Sentry.
Prepararemos el servidor paso a paso: configuraremos la seguridad, instalaremos Docker y Docker Compose.
Se desplegará la plataforma completa de Sentry con PostgreSQL y Redis, gestionada por Docker Compose.
Dominará la configuración básica de Sentry, incluyendo la configuración de dominio y HTTPS con Caddy.
Revisaremos las estrategias de copia de seguridad y mantenimiento para asegurar el funcionamiento estable de Sentry.
Al final, encontrará respuestas a preguntas frecuentes y consejos para la resolución de problemas.
Qué configuramos y por qué
Esquema: Qué configuramos y por qué
En el mundo moderno del desarrollo de software, la estabilidad y el rendimiento de las aplicaciones juegan un papel clave. Los errores son inevitables, pero la velocidad de su detección y resolución afecta directamente la experiencia del usuario y la reputación del producto. Aquí es donde Sentry entra en juego – una plataforma para el monitoreo de errores y rendimiento en tiempo real. Sentry recopila automáticamente información sobre fallos, excepciones y problemas de rendimiento de sus aplicaciones, proporcionando a los desarrolladores rastreos de pila detallados, contexto del entorno, datos de usuario y mucho más.
Qué obtendrá el lector al final: Al finalizar esta guía, tendrá una instalación de Sentry completamente funcional y autoalojada (self-hosted) en su VPS. Esto le permitirá monitorear centralizadamente errores y problemas de rendimiento para todos sus proyectos, ya sean aplicaciones web, aplicaciones móviles, servicios de backend o incluso programas de escritorio. Obtendrá control total sobre sus datos y podrá adaptar Sentry a sus necesidades específicas, sin depender de soluciones en la nube de terceros.
Qué alternativas existen (cloud-managed vs self-hosted): En el mercado existen varias soluciones para el monitoreo de errores, incluyendo servicios en la nube como Rollbar, Bugsnag, Datadog y, por supuesto, la versión en la nube del propio Sentry. Estos servicios ofrecen la comodidad de una solución "llave en mano": no necesita preocuparse por la infraestructura, el escalado o el mantenimiento. Sin embargo, Sentry autoalojado en un VPS tiene sus ventajas innegables:
Control total sobre los datos: Todos sus datos de errores se almacenan en su servidor, lo cual es crucial para proyectos con altos requisitos de confidencialidad o regulación (GDPR, HIPAA, etc.).
Ahorro de costes a largo plazo: Para proyectos con un gran volumen de eventos, los servicios en la nube pueden volverse muy costosos. Sentry autoalojado a menudo resulta ser una opción más económica, especialmente si ya dispone de un VPS.
Personalización: Puede modificar la configuración de Sentry, integrarlo con sistemas internos y adaptarlo a los requisitos únicos de su equipo.
Independencia de proveedores externos: No depende de la disponibilidad o la política de precios de un servicio de terceros.
La elección de Sentry autoalojado en un VPS es ideal para desarrolladores, startups y equipos que valoran el control, la confidencialidad y desean optimizar los costes de infraestructura, al mismo tiempo que poseen los conocimientos técnicos suficientes para gestionar su propio servidor.
Qué configuración de VPS se necesita para esta tarea
Esquema: Qué configuración de VPS se necesita para esta tarea
Sentry, especialmente en una configuración autoalojada, es una aplicación bastante intensiva en recursos, ya que incluye muchos componentes: la base de datos PostgreSQL, el broker de mensajes Redis, así como ClickHouse, Kafka y Zookeeper para el procesamiento y almacenamiento de grandes volúmenes de eventos. La elección de la configuración de VPS correcta es crítica para un funcionamiento estable y rápido.
Requisitos mínimos (para proyectos pequeños, hasta 1000 eventos por minuto)
CPU: 4 núcleos. Sentry utiliza activamente el procesador para procesar eventos y ejecutar tareas en segundo plano.
RAM: 8 GB. Este es el mínimo absoluto, se recomiendan 16 GB para un funcionamiento estable. PostgreSQL, Redis y otros componentes de Sentry consumen una cantidad significativa de memoria RAM.
Disco: 100-200 GB SSD. Las unidades SSD son obligatorias debido a la alta intensidad de las operaciones de entrada/salida, especialmente para la base de datos y ClickHouse. El tamaño del disco depende del volumen esperado de datos de errores y de su período de retención.
Red: 100 Mbps o 1 Gbps. Para la transferencia de datos entre los componentes de Sentry y para el acceso externo.
Plan de VPS recomendado (para proyectos medianos, hasta 5000 eventos por minuto)
Para tareas más serias, equipos de desarrolladores o aplicaciones con una carga moderada en Sentry, la configuración óptima será la siguiente:
CPU: 6-8 núcleos.
RAM: 16-32 GB.
Disco: 300-500 GB NVMe SSD (para un rendimiento máximo).
Red: 1 Gbps.
Para estas características, se puede considerar un VPS con las características indicadas, que ofrece una relación precio/rendimiento óptima para un despliegue estable de Sentry.
Cuándo se necesita un dedicado, no un VPS
Si planea utilizar Sentry para proyectos muy grandes, que procesan decenas de miles de eventos por minuto o incluso por segundo, con un gran número de equipos y usuarios, o si tiene requisitos muy estrictos de rendimiento y aislamiento, entonces vale la pena considerar el alquiler de un servidor dedicado (dedicated server). Un servidor dedicado le proporcionará acceso exclusivo a todos los recursos de hardware, asegurando el máximo rendimiento y estabilidad sin la influencia de los "vecinos" del VPS. Por ejemplo, para sistemas de alta carga con una carga máxima de más de 10 000 eventos por minuto, un servidor dedicado con más de 16 núcleos de CPU, más de 64 GB de RAM y varios TB de NVMe SSD estará justificado. También puede considerar un dedicado adecuado para estas tareas.
Ubicación: qué influencia tiene
La elección de la ubicación física de su VPS o servidor dedicado también es importante:
Latencia: Ubique el servidor Sentry lo más cerca posible de sus servidores de aplicaciones principales. Esto reducirá la latencia al enviar eventos a Sentry, lo cual es importante para una respuesta rápida.
Legislación de datos: En algunas jurisdicciones existen reglas estrictas sobre dónde deben almacenarse los datos. Elegir la ubicación del servidor de acuerdo con estos requisitos ayudará a evitar problemas legales.
Disponibilidad: Elija un proveedor con buena reputación y centros de datos en regiones con alta estabilidad de red y suministro eléctrico.
Teniendo en cuenta estos factores, podrá elegir la configuración y ubicación más adecuadas para su instalación autoalojada de Sentry.
Preparación del servidor
Esquema: Preparación del servidor
Antes de proceder con la instalación de Sentry, es necesario realizar una configuración básica y reforzar la seguridad de su VPS. En esta guía utilizaremos Ubuntu Server 24.04 LTS, ya que es un sistema operativo actual y ampliamente utilizado que contará con soporte hasta 2029.
Configuración mínima después del aprovisionamiento
Después de iniciar sesión por primera vez en su VPS recién instalado (normalmente a través de SSH como usuario root), siga los siguientes pasos:
1. Actualización del sistema
Comience siempre actualizando la lista de paquetes y su instalación para asegurarse de que todos los componentes estén al día.
sudo apt update && sudo apt upgrade -y
Actualiza la lista de paquetes e instala todas las actualizaciones disponibles.
2. Creación de un nuevo usuario con privilegios sudo
Trabajar como usuario root no es seguro. Cree un nuevo usuario y añádalo al grupo sudo.
Crea un nuevo usuario sentryuser y lo añade al grupo sudo. Se le pedirá que establezca una contraseña.
3. Configuración de la autenticación por claves SSH
Para mejorar la seguridad, se recomienda deshabilitar la autenticación por contraseña y utilizar únicamente claves SSH. Si aún no tiene un par de claves SSH, genérelas en su equipo local.
Copie su clave pública al servidor para sentryuser:
# En su equipo local:
ssh-copy-id sentryuser@SU_IP_DEL_SERVIDOR
Copia su clave pública SSH al servidor para el usuario sentryuser.
Luego, en el servidor, edite el archivo de configuración del demonio SSH:
sudo nano /etc/ssh/sshd_config
Abre el archivo de configuración SSH.
Busque y modifique las siguientes líneas (o añádalas si no existen):
# /etc/ssh/sshd_config
# ...
PermitRootLogin no
PasswordAuthentication no
ChallengeResponseAuthentication no
# ...
Prohíbe el inicio de sesión como root y la autenticación por contraseña.
Guarde los cambios y reinicie el servicio SSH:
sudo systemctl restart ssh
Reinicia el servicio SSH para aplicar las nuevas configuraciones.
Importante: Salga de la sesión de root e inicie sesión como sentryuser para asegurarse de que las claves SSH funcionan antes de cerrar la sesión de root.
4. Configuración del firewall (UFW)
Uncomplicated Firewall (UFW) es una herramienta sencilla para gestionar iptables. Configúrelo para permitir solo las conexiones necesarias: SSH, HTTP y HTTPS.
sudo ufw allow OpenSSH: Permite conexiones entrantes SSH (puerto 22).
sudo ufw allow http: Permite conexiones entrantes HTTP (puerto 80).
sudo ufw allow https: Permite conexiones entrantes HTTPS (puerto 443).
sudo ufw enable: Habilita el firewall. Confirme la acción con 'y'.
sudo ufw status: Verifica el estado actual y las reglas de UFW.
5. Instalación de Fail2Ban
Fail2Ban escanea los registros del servidor en busca de intentos de fuerza bruta de contraseñas y bloquea las direcciones IP desde las que se originan estos intentos.
sudo systemctl enable fail2ban: Habilita el inicio automático de Fail2Ban al arrancar el sistema.
sudo systemctl start fail2ban: Inicia el servicio Fail2Ban.
La configuración básica de Fail2Ban ya es bastante efectiva, pero puede personalizarla copiando /etc/fail2ban/jail.conf a /etc/fail2ban/jail.local y realizando los cambios allí.
Ahora su servidor está listo para la instalación del software necesario para Sentry.
Instalación de software — paso a paso
Esquema: Instalación de software — paso a paso
Sentry self-hosted utiliza Docker y Docker Compose para la orquestación de sus numerosos componentes, incluyendo PostgreSQL, Redis, ClickHouse, Kafka y otros. Instalaremos Docker Engine y Docker Compose, y luego utilizaremos el instalador oficial de Sentry para desplegar toda la infraestructura.
Todos los comandos se ejecutan como un usuario con privilegios sudo (en nuestro caso, sentryuser).
1. Instalación de Docker Engine (válido para 2026)
Instalaremos Docker desde el repositorio oficial de Docker, lo que garantiza la obtención de las versiones más recientes y estables. Para 2026, las versiones actuales serán Docker Engine 25.x o 26.x.
# Paso 1: Eliminamos versiones antiguas de Docker (si existen)
sudo apt remove docker docker-engine docker.io containerd runc -y
# Paso 2: Instalamos los paquetes necesarios para la instalación por HTTPS
sudo apt install ca-certificates curl gnupg lsb-release -y
# Paso 3: Añadimos la clave GPG oficial de Docker
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
# Paso 4: Añadimos el repositorio de Docker a las fuentes de APT
echo \
"deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
"$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# Paso 5: Actualizamos la lista de paquetes después de añadir el repositorio
sudo apt update
# Paso 6: Instalamos Docker Engine, containerd y Docker Compose (cli)
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y
Elimina instalaciones anteriores de Docker.
Instala los paquetes necesarios para trabajar con repositorios HTTPS.
Añade la clave GPG de Docker para verificar la autenticidad de los paquetes.
Añade el repositorio oficial de Docker para Ubuntu.
Actualiza la caché de paquetes.
Instala Docker Engine (docker-ce), el cliente Docker (docker-ce-cli), el entorno de ejecución de contenedores (containerd.io) y los plugins para build y compose (docker-buildx-plugin, docker-compose-plugin).
2. Adición del usuario al grupo docker
Para evitar usar sudo cada vez que trabaje con Docker, añada su usuario al grupo docker.
sudo usermod -aG docker sentryuser
newgrp docker
Añade sentryuser al grupo docker.
Aplica los cambios de grupo sin necesidad de reiniciar la sesión.
3. Verificación de la instalación de Docker
Asegúrese de que Docker esté instalado y funcionando correctamente.
docker run hello-world
Ejecuta el contenedor de prueba hello-world. Si ve el mensaje de bienvenida, Docker está instalado correctamente.
4. Instalación de Sentry (válido para 2026)
Sentry proporciona un script conveniente para desplegar la versión self-hosted. Este genera automáticamente todos los archivos necesarios de Docker Compose y configuración, e instala PostgreSQL y Redis como parte de su infraestructura.
# Paso 1: Creamos el directorio para Sentry
mkdir ~/sentry && cd ~/sentry
# Paso 2: Descargamos el script de instalación de Sentry (la versión 24.x/25.x será la actual para 2026)
# Siempre verifique la versión actual en GitHub Sentry self-hosted
curl -sL https://install.sentry.io/ | bash
Crea el directorio sentry en la carpeta de inicio del usuario y se mueve a él.
Descarga y ejecuta el script oficial de instalación de Sentry. El script le guiará a través del proceso, le hará preguntas sobre el nombre de dominio y generará todos los archivos.
Durante la ejecución del script, se le pedirá que introduzca un nombre de dominio para Sentry (por ejemplo, sentry.yourdomain.com) y que acepte la instalación. El script descargará las imágenes Docker necesarias (incluyendo PostgreSQL, Redis, ClickHouse, Kafka, Zookeeper) y generará los archivos docker-compose.yml y .env.
5. Inicio de Sentry
Después de ejecutar con éxito el script de instalación de Sentry, puede iniciar todos sus componentes utilizando Docker Compose.
# Iniciamos todos los servicios de Sentry en segundo plano
docker compose up -d
Inicia todos los contenedores definidos en docker-compose.yml en segundo plano (modo detached). Esto puede tardar un tiempo en el primer inicio, ya que Docker descargará todas las imágenes necesarias.
6. Creación de un administrador de Sentry
Una vez que todos los contenedores de Sentry estén en funcionamiento, deberá crear el primer usuario administrativo para acceder a la interfaz web.
docker compose run --rm web createuser
Ejecuta el comando createuser dentro del contenedor web de Sentry, lo que permite crear un nuevo usuario de Sentry. Se le pedirá que introduzca un correo electrónico, una contraseña y que confirme si es un superusuario.
7. Verificación del estado de los contenedores
Asegúrese de que todos los contenedores de Sentry estén funcionando.
docker compose ps
Muestra una lista de todos los servicios gestionados por Docker Compose y su estado actual. Todos los servicios deben estar en estado running.
En este punto, los componentes principales de Sentry están instalados y en funcionamiento. A continuación, pasaremos a la configuración.
Configuración
Diagrama: Configuración
Después de instalar Sentry, es necesario realizar una configuración adicional para que sea accesible externamente, configurar HTTPS y asegurar el correcto funcionamiento de todos los componentes. Las configuraciones principales de Sentry se almacenan en los archivos .env y config.yml, que fueron generados por el script de instalación.
1. Configuraciones principales en .env y config.yml
Vaya al directorio de Sentry donde se encuentran estos archivos (~/sentry).
cd ~/sentry
Navegando al directorio de instalación de Sentry.
Archivo .env
Este archivo contiene variables de entorno para Docker Compose y las configuraciones de Sentry. Los parámetros principales que pueden requerir atención son:
SENTRY_SECRET_KEY: Debe ser único y muy complejo. El script de instalación lo genera automáticamente. Nunca lo comparta ni lo almacene en un lugar público.
SENTRY_WEB_HOST: El nombre de dominio por el cual Sentry será accesible (por ejemplo, sentry.yourdomain.com). Asegúrese de que coincida con lo que especificó durante la instalación.
SENTRY_EMAIL_HOST, SENTRY_EMAIL_PORT, SENTRY_EMAIL_USERNAME, SENTRY_EMAIL_PASSWORD: Configuraciones para enviar notificaciones por correo electrónico (por ejemplo, sobre nuevos errores, restablecimiento de contraseña). Es altamente recomendable configurarlo. Ejemplo para un servidor SMTP:
Ejemplo de configuración de correo electrónico para notificaciones de Sentry. Reemplace los marcadores de posición con sus datos reales.
Archivo config.yml
Este archivo contiene configuraciones adicionales de Sentry, como límites de almacenamiento de datos, configuraciones de plugins, etc. En la mayoría de los casos, las configuraciones predeterminadas son suficientes para empezar.
Después de modificar .env, es necesario reiniciar Sentry:
docker compose restart
Reinicia todos los servicios de Sentry para aplicar las nuevas variables de entorno.
2. Configuración del nombre de dominio y DNS
Para que Sentry sea accesible a través de un nombre de dominio (por ejemplo, sentry.yourdomain.com), debe crear un registro A en la configuración DNS de su dominio, apuntando a la dirección IP de su VPS.
Vaya al panel de control DNS de su dominio.
Cree un nuevo registro A.
Host/Nombre:sentry (o el subdominio que haya elegido)
Valor/Dirección IP: La dirección IP de su VPS
TTL: Deje el valor predeterminado (normalmente 3600 segundos).
La propagación de los registros DNS puede tardar desde unos minutos hasta varias horas.
3. TLS/HTTPS a través de Caddy
Es crucial asegurar el acceso a Sentry a través del protocolo HTTPS. Caddy es un servidor web potente y fácil de usar que gestiona automáticamente los certificados Let's Encrypt para HTTPS. Podemos añadir Caddy a nuestro docker-compose.yml para que actúe como un proxy inverso delante de Sentry.
Paso 1: Creación del Caddyfile
Cree un archivo llamado Caddyfile en el directorio ~/sentry:
nano Caddyfile
Crea o abre el archivo Caddyfile para la configuración de Caddy.
Añada la siguiente configuración, reemplazando sentry.yourdomain.com con su dominio:
Configuración de Caddy para manejar el tráfico HTTPS y proxy las solicitudes al servicio web de Sentry (en el puerto 9000). Reemplace [email protected] con su correo electrónico real.
Paso 2: Añadir Caddy a docker-compose.yml
Abra el archivo docker-compose.yml:
nano docker-compose.yml
Abre el archivo de configuración principal de Docker Compose.
Añada un nuevo servicio caddy al final del archivo, y también modifique el puerto para el servicio web para que no sea accesible directamente desde el exterior. Encuentre la sección services: y modifíquela de la siguiente manera:
# docker-compose.yml
# ...
services:
# ... servicios existentes (web, worker, cron, postgres, redis, clickhouse, kafka, zookeeper, snuba-api, snuba-worker, etc.)
web:
# ...
# Elimine o comente la sección de puertos para web, para que no sea accesible directamente desde el exterior
# ports:
# - '9000:9000'
expose:
- "9000" # Sentry solo será accesible dentro de la red Docker a través del puerto 9000
caddy:
image: caddy:2.7.6-alpine # Usamos la versión actual de Caddy para 2026
restart: unless-stopped
ports:
- "80:80"
- "443:443"
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile
- caddy_data:/data
- caddy_config:/config
- ./caddy_logs:/var/log/caddy # Creamos un directorio para los logs de Caddy
networks:
- sentry-network # Asegúrese de que Caddy esté en la misma red que el servicio web de Sentry
# ...
volumes:
# ... volúmenes existentes
caddy_data:
caddy_config:
# ...
networks:
sentry-network: # Definimos una red común, si no existe, o usamos una existente
external: false
Añade el servicio Caddy, que proxy las solicitudes al servicio web de Sentry. Es importante que Caddy y web estén en la misma red Docker (normalmente es la red predeterminada creada por Docker Compose, pero es mejor especificarla explícitamente o asegurarse). También se han creado volúmenes para los datos y la configuración de Caddy.
Cree un directorio para los logs de Caddy:
mkdir -p caddy_logs
Crea un directorio para los logs de Caddy.
Paso 3: Reiniciar Sentry con Caddy
Aplique los cambios en docker-compose.yml:
docker compose down
docker compose up -d
docker compose down: Detiene y elimina todos los contenedores definidos en docker-compose.yml (pero conserva los volúmenes de datos).
docker compose up -d: Reinicia todos los servicios, incluyendo Caddy, en segundo plano. Caddy solicitará e instalará automáticamente el certificado SSL.
4. Verificación de la operatividad
Después de todas las configuraciones y el reinicio, asegúrese de que Sentry esté funcionando y sea accesible a través de HTTPS.
Verificación de DNS:
dig +short sentry.yourdomain.com
Debería devolver la dirección IP de su VPS.
Verificación de accesibilidad por HTTPS:
curl -v https://sentry.yourdomain.com
Si ve el código HTML de la página de Sentry y la información del certificado SSL, significa que todo funciona correctamente.
Acceso a la interfaz web: Abra https://sentry.yourdomain.com en su navegador web. Debería ver la página de inicio de sesión de Sentry.
Verificación del estado de los contenedores:
docker compose ps
Asegúrese de que todos los contenedores, incluido caddy, estén en estado running.
Ahora su instalación self-hosted de Sentry está completamente configurada y protegida con HTTPS. Puede iniciar sesión, crear proyectos y comenzar a integrar Sentry con sus aplicaciones.
Copias de seguridad y mantenimiento
Diagrama: Copias de seguridad y mantenimiento
Las copias de seguridad fiables y el mantenimiento regular son clave para cualquier sistema en producción, y Sentry no es una excepción. La pérdida de datos de errores puede ser crítica para la depuración y el monitoreo.
Qué respaldar
Para una recuperación completa de Sentry, debe respaldar los siguientes datos:
Base de datos PostgreSQL: Almacenamiento principal de todos los datos de Sentry (proyectos, eventos, usuarios, configuraciones).
Datos de Redis: Aunque Redis se utiliza principalmente para el almacenamiento en caché y las colas, también puede almacenar información temporal pero importante.
Datos de ClickHouse: Almacena datos de eventos sin procesar para Snuba, lo cual es importante para el análisis y la búsqueda.
Archivos de configuración de Sentry: Los archivos .env, config.yml y docker-compose.yml.
Volúmenes de Docker: Todos los volúmenes utilizados por Sentry (sentry-postgres, sentry-redis, sentry-data, sentry-attachments, sentry-clickhouse, sentry-kafka, etc.).
La forma más sencilla es respaldar todos los volúmenes de Docker relacionados con Sentry, ya que contienen datos de PostgreSQL, Redis, ClickHouse y otros archivos importantes.
Script simple de copia de seguridad automática (cron + restic / borg / rsync)
Crearemos un script simple que archivará todos los volúmenes de Docker y archivos de configuración necesarios, y luego los enviará a una ubicación segura. Por ejemplo, usaremos rsync para copiar a otro servidor o a un almacenamiento compatible con S3. Para copias de seguridad más avanzadas, considere restic o borgbackup.
Se asume que tiene un servidor separado o un almacenamiento compatible con S3 (por ejemplo, MinIO, Wasabi, Backblaze B2) para almacenar las copias de seguridad. Si utiliza otro servidor, configure el acceso SSH por clave sin contraseña para el usuario que realizará las copias de seguridad.
Cree el archivo backup_sentry.sh en el directorio ~/sentry/scripts:
Crea el directorio para los scripts y abre el archivo para editarlo.
#!/bin/bash
# Переменные
BACKUP_DIR="/var/backups/sentry"
SENTRY_ROOT_DIR="/home/sentryuser/sentry" # Путь к вашей директории Sentry
TIMESTAMP=$(date +%Y%m%d%H%M%S)
BACKUP_FILE="$BACKUP_DIR/sentry_backup_$TIMESTAMP.tar.gz"
RETENTION_DAYS=7 # Сколько дней хранить бэкапы
# Настройки удаленного хранилища (пример для rsync по SSH)
REMOTE_USER="backupuser"
REMOTE_HOST="your_backup_server_ip"
REMOTE_PATH="/mnt/backups/sentry_backups"
# --- Начало процесса бэкапа ---
echo "Starting Sentry backup at $TIMESTAMP..."
# 1. Останавливаем Sentry для консистентности данных (опционально, но рекомендуется для БД)
# Если Sentry очень нагружен, рассмотрите бэкап без остановки, используя pg_dump и redis-cli BGSAVE
# docker compose stop # Можно останавливать только postgres и redis, если хотите минимизировать даунтайм
# docker compose stop postgres redis
# 2. Создаем директорию для бэкапов, если ее нет
sudo mkdir -p "$BACKUP_DIR"
sudo chown sentryuser:sentryuser "$BACKUP_DIR"
# 3. Бэкап томов Docker
# Для PostgreSQL: делаем дамп базы данных
echo "Dumping PostgreSQL database..."
docker compose exec -T postgres pg_dumpall -U postgres > "$BACKUP_DIR/sentry_postgres_dump_$TIMESTAMP.sql"
if [ $? -ne 0 ]; then
echo "ERROR: PostgreSQL dump failed. Exiting."
# docker compose start postgres redis # Запускаем обратно, если останавливали
exit 1
fi
# Для Redis: делаем сохранение RDB файла
echo "Saving Redis RDB file..."
docker compose exec -T redis redis-cli BGSAVE
# Дожидаемся завершения BGSAVE (несколько секунд)
sleep 5
docker cp sentry-redis-1:/data/dump.rdb "$BACKUP_DIR/sentry_redis_dump_$TIMESTAMP.rdb"
if [ $? -ne 0 ]; then
echo "ERROR: Redis dump failed. Exiting."
# docker compose start postgres redis # Запускаем обратно, если останавливали
exit 1
fi
# Бэкап всех остальных Docker томов Sentry
# Можно использовать 'docker volume ls -q' и 'docker run --rm -v VOLUME_NAME:/volume -v /path/to/backup:/backup alpine tar czf /backup/volume.tar.gz /volume'
# Но проще бэкапить всю директорию SENTRY_ROOT_DIR, которая содержит docker-compose.yml и .env,
# а также все локальные тома (если они созданы как bind mounts или в этой директории)
echo "Archiving Sentry configuration and data volumes..."
# Создаем временную директорию для архивации Docker томов
TEMP_VOLUMES_DIR="$BACKUP_DIR/volumes_$TIMESTAMP"
mkdir -p "$TEMP_VOLUMES_DIR"
# Копируем .env, docker-compose.yml и другие важные файлы
cp "$SENTRY_ROOT_DIR/.env" "$TEMP_VOLUMES_DIR/"
cp "$SENTRY_ROOT_DIR/config.yml" "$TEMP_VOLUMES_DIR/"
cp "$SENTRY_ROOT_DIR/docker-compose.yml" "$TEMP_VOLUMES_DIR/"
cp -R "$SENTRY_ROOT_DIR/caddy_logs" "$TEMP_VOLUMES_DIR/" # Если Caddy логи не в томе
# Копируем данные persistent томов Sentry (пути могут отличаться, проверьте через 'docker volume inspect ')
# Это более сложный шаг, так как тома могут быть вне SENTRY_ROOT_DIR.
# Проще всего использовать tar для конкретных томов или просто бэкапить всю директорию SENTRY_ROOT_DIR
# Если у вас используются именованные тома (как по умолчанию в Sentry), то их нужно бэкапить отдельно
# Например, для sentry-data:
# docker run --rm -v sentry-data:/data -v "$TEMP_VOLUMES_DIR":/backup ubuntu tar czf /backup/sentry-data.tar.gz -C /data .
# Аналогично для sentry-attachments, sentry-clickhouse-data и т.д.
# Для простоты и если тома не bind-mounts, а Docker-managed volumes, можно просто бэкапить всю директорию Sentry
# с конфигами, а данные БД и Redis уже сделали дампом.
# Для полных Docker-managed volumes, скрипт будет сложнее, с использованием 'docker run --rm -v :/vol ... tar'
# Для этого примера, мы сосредоточимся на конфигах и дампе БД/Redis, что достаточно для восстановления.
# Архивация всех бэкап-файлов
echo "Creating final archive..."
cd "$BACKUP_DIR"
tar -czf "$BACKUP_FILE" sentry_postgres_dump_"$TIMESTAMP".sql sentry_redis_dump_"$TIMESTAMP".rdb volumes_"$TIMESTAMP"/
cd "$SENTRY_ROOT_DIR" # Возвращаемся в исходную директорию
# 4. Загрузка бэкапа на удаленный сервер (rsync)
echo "Uploading backup to remote server..."
rsync -avz "$BACKUP_FILE" "$REMOTE_USER@$REMOTE_HOST:$REMOTE_PATH"
if [ $? -ne 0 ]; then
echo "ERROR: Failed to upload backup to remote server."
fi
# 5. Удаление старых бэкапов
echo "Removing old backups..."
find "$BACKUP_DIR" -type f -name "sentry_backup_.tar.gz" -mtime +$RETENTION_DAYS -delete
find "$BACKUP_DIR" -type f -name "sentry_postgres_dump_.sql" -mtime +$RETENTION_DAYS -delete
find "$BACKUP_DIR" -type f -name "sentry_redis_dump_.rdb" -mtime +$RETENTION_DAYS -delete
find "$BACKUP_DIR" -type d -name "volumes_" -mtime +$RETENTION_DAYS -exec rm -rf {} + # Удаляем временные директории
# 6. Запускаем Sentry обратно (если останавливали)
# docker compose start # Или только postgres redis
echo "Sentry backup finished."
El script realiza un volcado de PostgreSQL y Redis, archiva los archivos de configuración y sube la copia de seguridad a un servidor remoto. También elimina las copias de seguridad antiguas. Reemplace your_backup_server_ip, backupuser y [email protected] con sus propios datos.
Haga el script ejecutable:
chmod +x ~/sentry/scripts/backup_sentry.sh
Hace el script ejecutable.
Dónde almacenar
Servicio externo compatible con S3: Almacenamientos en la nube (AWS S3, Google Cloud Storage, Backblaze B2, DigitalOcean Spaces, Linode Object Storage) son una opción fiable y escalable. Para esto, necesitará una herramienta como s3cmd o rclone.
VPS separado: Puede utilizar otro VPS menos potente para almacenar las copias de seguridad, copiándolas por SSH con rsync, como se muestra en el ejemplo anterior.
Disco local (con precaución): No se recomienda almacenar las copias de seguridad en el mismo servidor que Sentry, ya que en caso de fallo del disco, perderá tanto Sentry como las copias de seguridad. Esto puede ser solo una solución temporal antes de transferirlas a un medio externo.
Actualizaciones: rolling vs. ventana de mantenimiento
Actualizar Sentry autoalojado es un procedimiento importante. Sentry lanza nuevas versiones con frecuencia, y su actualización generalmente incluye la actualización de imágenes de Docker y la migración de la base de datos.
Ventana de mantenimiento: Este es el enfoque más común y seguro para Sentry autoalojado. Durante la ventana de mantenimiento, detiene todos los servicios de Sentry, realiza la actualización, las migraciones de la base de datos y luego los inicia de nuevo. Esto asegura que todos los componentes se actualicen sincrónicamente y que las migraciones se realicen sin conflictos.
# В директории ~/sentry
docker compose down # Detiene todos los servicios
docker compose pull # Descarga las nuevas imágenes de Docker
docker compose run --rm web upgrade # Ejecuta las migraciones de la base de datos
docker compose up -d # Inicia todos los servicios de Sentry
Procedimiento estándar para actualizar Sentry. Se recomienda realizarlo regularmente para utilizar las últimas funciones y correcciones de seguridad.
Actualizaciones continuas (rolling updates): Para Sentry, esto es más difícil de implementar debido a la estrecha relación entre sus componentes y los posibles cambios en el esquema de la base de datos. Generalmente, las actualizaciones continuas requieren una arquitectura más compleja (por ejemplo, un clúster de Kubernetes) y no siempre son aplicables a una instalación estándar de Docker Compose sin tiempo de inactividad. Para la mayoría de los usuarios autoalojados, el enfoque de ventana de mantenimiento es preferible.
Siempre lea la documentación oficial de Sentry antes de actualizar, ya que puede haber instrucciones específicas para versiones concretas.
Solución de problemas + Preguntas frecuentes
Incluso con una configuración cuidadosa, pueden surgir problemas. Esta sección le ayudará a diagnosticar y resolver las preguntas más comunes al trabajar con Sentry autoalojado.
1. ¿Qué configuración mínima de VPS es adecuada para Sentry?
Para proyectos pequeños (hasta 1000 eventos por minuto), se recomienda un VPS mínimo con 4 núcleos de CPU, 8 GB de RAM y 100-200 GB de SSD. Sin embargo, Sentry es bastante intensivo en recursos. Si espera una carga más alta o desea garantizar un funcionamiento fluido sin ralentizaciones, es mejor considerar 6-8 núcleos de CPU, 16-32 GB de RAM y 300-500 GB de SSD NVMe. Un disco SSD es una condición obligatoria para un buen rendimiento debido a las intensas operaciones de entrada/salida con la base de datos y ClickHouse.
2. ¿Qué elegir: VPS o dedicado para esta tarea?
Para la mayoría de los proyectos y equipos medianos, un VPS será suficiente y es una solución más económica. El VPS proporciona un buen aislamiento y escalabilidad. Un servidor dedicado (dedicated) debe considerarse si tiene una carga muy alta (decenas de miles de eventos por minuto), requisitos estrictos de rendimiento, aislamiento de recursos o requisitos regulatorios específicos. Proporciona control total sobre el hardware, pero requiere un mayor nivel de administración.
3. La interfaz de usuario de Sentry no está disponible o muestra un error 502/503. ¿Qué hacer?
Verifique el estado de los contenedores Docker: docker compose ps. Asegúrese de que todos los contenedores (especialmente web, postgres, redis, caddy) estén en estado running. Verifique los logs de los servicios: docker compose logs web, docker compose logs caddy, docker compose logs postgres. Causas frecuentes: falta de memoria (Sentry puede consumir mucha RAM), configuración incorrecta de Caddy, problemas con la base de datos.
4. No puedo iniciar sesión en Sentry después de crear un usuario.
Asegúrese de haber creado un superusuario usando el comando docker compose run --rm web createuser. Verifique la exactitud de las credenciales ingresadas. Si olvidó su contraseña, puede restablecerla usando el mismo comando createuser e indicando un correo electrónico existente, Sentry le ofrecerá restablecer la contraseña.
5. Los eventos no llegan a Sentry, aunque configuré el SDK.
Verifique los siguientes puntos: 1. ¿El DSN está correctamente especificado en su aplicación? El DSN se puede encontrar en la configuración del proyecto en la interfaz de usuario de Sentry. 2. ¿Su servidor Sentry es accesible desde el exterior (DNS, firewall)? Intente curl -v https://sentry.yourdomain.com desde el servidor donde se ejecuta la aplicación. 3. Verifique los logs de Sentry (especialmente los servicios web y worker) en busca de errores al recibir eventos: docker compose logs web. 4. Asegúrese de que todos los componentes de Sentry estén funcionando: docker compose ps.
6. Sentry funciona lento o se "ralentiza".
El funcionamiento lento de Sentry a menudo está relacionado con la falta de recursos. Verifique el uso de CPU, RAM y operaciones de disco en su VPS. Use los comandos htop, free -h, iostat -x 1. Si algún recurso está cerca del 100%, considere aumentar los recursos del VPS. También verifique los logs de Sentry en busca de errores que puedan ralentizar el funcionamiento (por ejemplo, problemas con PostgreSQL o ClickHouse).
7. ¿Cómo actualizar Sentry a una nueva versión?
El proceso de actualización de Sentry incluye detener todos los servicios, descargar nuevas imágenes Docker, ejecutar migraciones de la base de datos y reiniciar. Siempre siga la documentación oficial de Sentry para la versión específica, pero la secuencia general de comandos es: docker compose down, docker compose pull, docker compose run --rm web upgrade, docker compose up -d. Asegúrese de tener una copia de seguridad actualizada antes de comenzar la actualización.
8. ¿Cómo limpiar datos antiguos de Sentry?
Sentry proporciona un comando para limpiar datos antiguos. Puede ejecutarlo manualmente o configurarlo como una tarea cron regular. Ejemplo de comando para eliminar datos de más de 90 días:
docker compose run --rm web cleanup --days 90
Este comando elimina eventos y datos relacionados que tienen más de 90 días. Se recomienda ejecutarlo regularmente para mantener el rendimiento y ahorrar espacio en disco.
Conclusiones y próximos pasos
Diagrama: Conclusiones y próximos pasos
¡Felicidades! Ha desplegado y configurado con éxito su propia instalación de Sentry en su VPS, utilizando Docker, PostgreSQL y Redis. Ahora tiene una potente herramienta para monitorear errores y rendimiento, que le proporciona control total sobre sus datos e infraestructura. Esto aumentará significativamente la fiabilidad de sus aplicaciones y la eficiencia de su equipo.
Próximos pasos:
Integración de proyectos: Agregue todos sus proyectos a Sentry e integre el SDK en sus aplicaciones para comenzar a recopilar datos de errores.
Configuración de alertas: Configure alertas por correo electrónico, Slack, PagerDuty u otros canales para que su equipo sea notificado rápidamente sobre nuevos problemas.
Monitoreo de Sentry: Configure el monitoreo del rendimiento y el estado de Sentry (uso de recursos del VPS, estado de los contenedores Docker) utilizando herramientas como Prometheus/Grafana o Zabbix.
Escalado: A medida que su proyecto crezca y aumente el volumen de eventos, considere escalar Sentry aumentando los recursos del VPS o migrando a un servidor dedicado.
¿Te fue útil esta guía?
Tus comentarios nos ayudan a mejorar nuestras guías.
Compartir esta publicación:
Envía esta guía a alguien a quien pueda resultarle útil.