tellform/docs/setup_sentry_server.md
2015-07-13 14:49:23 -07:00

5.4 KiB

Installing Sentry Server

Medforms is an opensource form builder that can create stunning forms from PDFs or from scratch

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
  1. 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
  1. Install easy_install and pip
wget https://bootstrap.pypa.io/ez_setup.py -O - | sudo python
sudo easy_install pip
  1. Install virtualenv and virtualenvwrapper
sudo pip install virtualenv
  1. 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
  1. 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
  1. 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