Como instalar tu propio Sentry en debian 8



Hace poco instalé Sentry en un VPS con debian y como los pasos son unos cuantos, decidí escribir este post para mantenerlo en algún lugar público (que mejor que el blog!).

Sentry es un sistema que reporta en tiempo real los crashes o excepciones que ocurren en nuestras aplicaciones web, apps mobiles o juegos. No solo reporta y notifica por email, sino que podés discutir con colegas sobre errores, darle un seguimiento, etc. Permite definir multiples proyectos, y permisos específicos por usuarios y proyectos.

Sentry trabaja con la mayoría de los lenguajes y frameworks:

../images/sentry-lang.png

También permite integraciones con aplicaciones y servicios:

../images/sentry-inte.png

Bueno, basta de chachara, vamos con los pasos.

Añadimos un usuario para manejar la aplicación y lo agregamos al grupo sudo

adduser sentry  (sentrymava)
gpasswd -a sentry sudo

Iniciamos sesión con el nuevo usuario e instalamos dependencias:

su - sentry
sudo apt-get install build-essential python-dev
sudo apt-get python-pip
sudo apt-get install libxml2-dev libxslt-dev libz-dev libssl-dev

# sentry instalaré dependiencia para postgres
sudo apt-get install postgresql postgresql-contrib libpq-dev

# si no tiene virtuelenv
sudo apt-get install python-virtualenv

# sentry necesita redis
sudo apt-get install redis-server

Comprobamos que está todo ok con redis:

redis-cli ping
PONG  # son unos genios LOL

Creamos virtualenv para sentry y lo instalamos:

cd ~
virtualenv env
source env/bin/activate
pip install sentry

Si da error

c/_cffi_backend.c:15:17: fatal error: ffi.h: No such file or directory #include <ffi.h>

compilation terminated

# probá instalando

sudo apt-get install libffi-dev

y reintentar con

pip install sentry --upgrade --force-reinstall

Una vez instalado, iniciamos la configuración:

sentry init  # dentro del virtuelenv

Configuramos la base de datos postgres

sudo -u postgres psql
psql (9.4.5)
Digite «help» para obtener ayuda.

postgres=# create extension adminpack;
CREATE EXTENSION
postgres=# \q

Si da error

ERROR: no se pudo abrir el archivo de control de extensión «/usr/share/postgresql/9.4/extension/admipack.control»: No existe el fichero o el directorio

ls /usr/share/postgresql/9.4/extension/ | grep adminpack

y vemos contenido, hacemos

sudo apt-get install locale
sudo updatedb

reintentar!

Continuamos configurando la base de datos:

sudo passwd postgres
sudo su - postgres
psql -d template1 -c "ALTER USER postgres WITH PASSWORD 'unaclaverealmentefuerte';"
createdb sentry_db
createuser sentry_user --pwprompt
psql -d template1 -U postgres
GRANT ALL PRIVILEGES ON DATABASE sentry_db TO sentry_user;
\q
exit # salir del usuario postgres

Proseguimos editando el archivo de configuración de sentry:

vim .sentry/sentry.conf.py

y establecemos los valores para la conexión a la base de datos

DATABASES = {
    'default': {
        'ENGINE': 'sentry.db.postgres',
        'NAME': 'sentry_db',
        'USER': 'sentry_user',
        'PASSWORD': 'unaclaverealmentefuerte',
        'HOST': 'localhost',
        'PORT': '',
    }
}

y actualizamos la instalación

sentry upgrade  # dentro del virtualenv

Podemos probar si funciona ok la instalación:

sentry start

Configuración NGINX

Añadimos en la configuración

server {
    listen 80;
    server_name  sentry.tudominio.com;
    access_log  /home/sentry/logs/nginx.access.log;

    location / {
      proxy_pass         http://localhost:9000;
      proxy_redirect     off;

      proxy_set_header   Host              $host;
      proxy_set_header   X-Real-IP         $remote_addr;
      proxy_set_header   X-Forwarded-For   $proxy_add_x_forwarded_for;
      proxy_set_header   X-Forwarded-Proto $scheme;
    }
}

y creamos el archivo de log

mkdir logs
touch logs/nginx.access.log
sudo service nginx reload

Arrancamos sentry y verificamos que podemos acceder en sentry.tudominio.com

sentry start

Gestión de la aplicación con supervisor

Si no lo tenemos instalado

sudo apt-get install supervisor

Debemos crear dos archivos de configuración, una para la app web, y otro para las tareas que ejecuta celery

Archivo en /etc/supervisor/conf.d/sentry.conf

[program:sentry-web]
directory=/home/sentry/
command=/home/sentry/env/bin/sentry start http
user = sentry
stdout_logfile = /home/sentry/logs/sentry.log
redirect_strerr = true
autostart=true
autorestart=true

Archivo en /etc/supervisor/conf.d/sentry-worker.conf

[program:sentry-worker]
directory=/home/sentry/
command=/home/sentry/env/bin/sentry celery worker -B
stdout_logfile = /home/sentry/logs/sentry-worker.log
user = sentry
autostart=true
autorestart=true
redirect_stderr=true
killasgroup=true

Creamos los archivos de logs de ambos procesos

touch logs/sentry-worker.log
touch logs/sentry.log

Y por último, recargamos e reiniciamos supervisor

sudo supervisorctl reread
sudo supervisorctl update
sudo supervisorctl reload

Eso es todo. Realmente Sentry es una app indispensable si querés estar al tanto de todo lo que suceda en tus sistemas web o mobile.

Los pasos que siguen tienen que ver con crear un usuario en sentry, crear un proyecto y realizar la integración en tu proyecto. Todo esto es explicado por el mismo sentry cuando dseleccionas el lenguaje o framework que estás usando en tu proyecto.

Espero les sirva.

Bye!

Comments


Comments powered by Disqus