tellform/docs/setup_sentry_server.md
2016-04-24 14:19:44 -07:00

5.3 KiB

#Installing Sentry Server

Before You Begin

Make sure you understand what sentry server does. You can view documentation for sentry server here. This document was written for a server running Ubuntu 14.04 LTS server (we used Azure).

Prerequisites

Make sure you have these installed:

  • apt-get
  • python2.7
  • vim

Installation Steps

  1. Add non-root user.

    sudo adduser sentry
    sudo adduser sentry sudo
    
  2. Update all apt-get packages

    sudo apt-get update
    sudo apt-get dist-upgrade
    sudo apt-get autoremove
    sudo apt-get install libxml2-dev libxslt1-dev libffi-dev
    sudo reboot
    
  3. Install easy_install and pip

    wget https://bootstrap.pypa.io/ez_setup.py -O - | sudo python
    sudo easy_install pip
    
  4. Install virtualenv and virtualenvwrapper

    sudo pip install virtualenv
    
  5. Install Sentry and Setup

# make server directory
mkdir ~/SentryServer; cd ~/SentryServer;
# make virtualenv
virtualenv ./
#activate virtualenv
source ./bin/activate

# install sentry and its postgresql dependencies
pip install -U sentry[postgres]
  1. Install postgresql

    # install postgres
    sudo apt-get install postgresql postgresql-contrib libpq-dev
    
    # install postgres adminpack
    sudo -u postgres psql
    CREATE EXTENSION "adminpack";
    \q
    
  2. Setup postgresql DB

    # change postgres password & create database
    sudo passwd postgres
    sudo su - postgres
    psql -d template1 -c "ALTER USER postgres WITH PASSWORD 'changeme';"
    createdb sentry
    createuser sentry_user --pwprompt
    psql -d template1 -U postgres
    GRANT ALL PRIVILEGES ON DATABASE sentry to sentry_user;
    \q
    exit
    
  3. Setup Sentry Configuration

    # initialize conf file
    sentry init
    
    #edit sentry configuration
    vim ~/.sentry/sentry.conf.py
    

The following are the contents of my sentry.conf.py file (replace name, user and password with your that of your DB)

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'sentry',
        'USER': 'sentry_user',
        'PASSWORD': 'your_password',
        'HOST': 'localhost',
    }
}
# No trailing slash!
SENTRY_URL_PREFIX = 'http://sentry.example.com'

SENTRY_WEB_HOST = '0.0.0.0'
SENTRY_WEB_PORT = 9000
SENTRY_WEB_OPTIONS = {
    'workers': 3,  # the number of gunicorn workers
    'secure_scheme_headers': {'X-FORWARDED-PROTO': 'https'},  # detect HTTPS mode from X-Forwarded-Proto header
}

#CONFIGURE REDIS
SENTRY_REDIS_OPTIONS = {
    'hosts': {
        0: {
            'host': '127.0.0.1',
            'port': 6379,
            'timeout': 3,
            #'password': 'redis auth password'
        }
    }
}

#CONFIGURE OUTGOING MAIL
EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend' 
EMAIL_USE_TLS = True 
EMAIL_HOST = 'smtp.gmail.com' 
EMAIL_PORT = 587 
EMAIL_HOST_USER = 'your_gmail_username@gmail.com' 
EMAIL_HOST_PASSWORD = 'your_gmail_password' 
DEFAULT_FROM_EMAIL = 'testing@testing.com
  1. Setup Database and Start Sentry
#install and run redis-server
wget http://download.redis.io/releases/redis-stable.tar.gz
tar xzf redis-stable.tar.gz
cd redis-stable
make
make test
sudo make install
cd utils
sudo ./install_server.sh

#Go back to app directory
cd ~/SentryServer
sudo service redis_6379 start

# set up databse
sentry upgrade

# let's try it out!
sentry start
  1. Install nginx
# install nginx
sudo apt-get install nginx

# remove the default symbolic link
sudo rm /etc/nginx/sites-enabled/default

# create a new blank config, and make a symlink to it
sudo touch /etc/nginx/sites-available/sentry
cd /etc/nginx/sites-enabled
sudo ln -s ../sites-available/sentry

# edit the nginx configuration file
sudo vim /etc/nginx/sites-available/sentry

Here are the contents of my nginx file:

server {
    # listen on port 80
    listen 80;

    # for requests to these domains
    server_name yourdomain.com www.yourdomain.com;

    # keep logs in these files
    access_log /var/log/nginx/sentry.access.log;
    error_log /var/log/nginx/sentry.error.log;

    # You need this to allow users to upload large files
    # See http://wiki.nginx.org/HttpCoreModule#client_max_body_size
    # I'm not sure where it goes, so I put it in twice. It works.
    client_max_body_size 0;

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

        proxy_read_timeout 5m;

        # make sure these HTTP headers are set properly
        proxy_set_header Host            $host;
        proxy_set_header X-Real-IP       $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}
  1. Start the worker processes
# restart nginx
sudo service nginx restart

#start sentry
sentry celery worker -B
  1. Install and Configure supervisord
pip install supervisord
sudo echo_supervisord_conf > ~/SentryServer/etc/supervisord.conf

#Edit yuour supervisord Config
vim /etc/supervisord.conf

Configuration file should look like this

[program:sentry-web]
directory=~/SentryServer/
command=~/SentryServer/bin/sentry start
autostart=true
autorestart=true
redirect_stderr=true
stdout_logfile=syslog
stderr_logfile=syslog

[program:sentry-worker]
directory=~/SentryServer/
command=~/SentryServer/bin/sentry celery worker -B
autostart=true
autorestart=true
redirect_stderr=true
stdout_logfile=syslog
stderr_logfile=syslog
  1. Run Server (with supervisord)
supervisord