Installing and Configuring Sentry
Sentry is a great tool for error-tracking and monitoring your applications. It is an open source project written in Django (Python). It tracks crashes, exceptions, errors in real time which saves a lot of debugging time especially in production environment. There are other alternatives to Sentry, namely Aibrake.io, Raygun etc.
Sentry being free & open source project, it gives freedom to be set your own way. It also has wide variety of language specific SDK integrations available which makes it a potential choice than its competitors.
Installing and Configuring Sentry is a complicated process in itself. I have tried my best to document these changes which might not be clear to a beginner.
Things to pay attention in this tutorial
[email protected]$: refers to local system
[email protected]#: root account login of remote server; check
[email protected]$: a new user account on server, denoted by
[email protected]$: postgres user gets created when we install postgres
ssh-copy-id: command available when we install
cURLetc commands are packages/libraries which should be installed beforehand.
Setup a new server
I strongly recommend using a Vultr VPS server. As you will be given a
root account with username and password, try SSH-ing on the server (xxx.xxx.xxx.xxx).
Once you are logged in the
root account, its time to create a user named
deploy. As it is possible to do any administrative task using
root account, it is advisable to never use
root and always use root privileges by creating user account and adding the user to
sudo (superuser do!) group.
[email protected]# adduser deploy
In order to be able to install dependencies on server, created user
deploy has to be included in
[email protected]# usermod -aG sudo deploy
To be able to login into new server without the need to enter password everytime from your local system, copy the ssh key by running
[email protected]$ ssh-copy-id -i ~/.ssh/id_rsa [email protected]
This will copy your ssh key to server without any hassles. Now you can log again to your newly created user account.
Creating swap memory
Swap memory is a space in hard drive which gets used for operations when the RAM gets full. It is a very important step, as going ahead there will be few tasks which will be memory intensive. It is always a good idea to have swap memory allocated if you don’t want your tasks get aborted in mid way when RAM gets filled up.
# To create 4GB swap: # Source: https://help.ubuntu.com/community/SwapFaq#How_do_I_add_a_swap_file.3F sudo fallocate -l 4g /mnt/4GiB.swap sudo chmod 600 /mnt/4GiB.swap sudo mkswap /mnt/4GiB.swap sudo swapon /mnt/4GiB.swap free -m # To make swap permanent across reboots: echo '/mnt/4GiB.swap swap swap defaults 0 0' | sudo tee -a /etc/fstab
Now to the real work
pythonis needed for
build-essentialcontains required libraries for compiling
Most problems we get are due to some
xyz library not installed.
[email protected]$ sudo apt-get update [email protected]$ sudo apt-get install -y python build-essential
Setting environment for project
By looking at the official documentation of Sentry, dependencies are:
- PostgresSQL DB
- Redis DB
- Dedicated Domain (in our case its our server [xxx.xxx.xxx.xxx])
Documentation lists two ways of installation
- via Docker
- via Python
Let’s now look on how can we install Sentry with the deprecated method using Python:
For PostgreSQL Db:
[email protected]$ sudo touch /etc/apt/sources.list.d/pgdg.list
Add the string provided in the link for your ubuntu version(https://www.postgresql.org/download/linux/ubuntu/)
deb http://apt.postgresql.org/pub/repos/apt/ xenial-pgdg main
OR You can alternatively run the following command.
echo "deb http://apt.postgresql.org/pub/repos/apt/ $(lsb_release -sc)-pgdg main" | sudo tee -a /etc/apt/sources.list.d/pgdg.list
# Import the signing key and update package lists [email protected]$ wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add - [email protected]$ sudo apt-get update [email protected]$ sudo apt-get install postgresql-9.5
There are two ways for redis to get installed
$ wget http://download.redis.io/releases/redis-4.0.1.tar.gz $ tar xzf redis-4.0.1.tar.gz $ cd redis-4.0.1 $ sudo make install $ cd utils $ sudo ./install_server.sh
$ wget http://download.redis.io/releases/redis-4.0.1.tar.gz $ tar xzf redis-4.0.1.tar.gz $ cd redis-4.0.1 $ make
to run in in background :
$ src/redis-server --daemonize yes
Check if its running via :
$ ps aux | grep redis-server
Install pip & related libraries
Libraries mentioned in dependencies section
[email protected]$ sudo apt-get install python-setuptools python-dev libxslt1-dev gcc libffi-dev libjpeg-dev libxml2-dev libxslt-dev libyaml-dev libpq-dev
Virtual python environment
To set up an environment we would need python virtual environment. With virtual environment, we can run applications on multiple versions of python.
There are two ways you can install it. I prefer to get the latest one, via
pythonpackage manager (
Get pip installed via `cURL`: `curl -o get-pip.py https://bootstrap.pypa.io/get-pip.py` & `sudo python get-pip.py`
- the other via
ubuntupackage manager (
$ sudo pip install -U virtualenv
$ sudo apt install python-virtualenv
- Choose the location of virtual environment for
Documentation says we can install on /www/sentry folder, I have installed it on ~/sentry path to avoid using `sudo pip`
$ virtualenv ~/sentry/
- To activate your
$ pip install -U sentry
Check if the installation is properly done by typing
We need a default configuration which gets initialized using
# path if not provided automatically takes ~/.sentry $ sentry init
init provides 2 types of files for configuration
For default installation, we don’t need to change the settings
Before running migrations, create a DB by
createdb command by logging into
[email protected]$ sudo su - postgres [email protected]$ createdb -E utf-8 sentry
Once done, initial schema can be created by
upgrade command. Run the command after coming back to
deploy user. Our
swap memory will be very helpful here.
$ SENTRY_CONF=~/.sentry sentry upgrade
You may get the following error.
AttributeError: 'NoneType' object has no attribute 'connection_pool'
Official link to this error is https://github.com/getsentry/sentry/issues/5908
pip install redis==2.10.5. It was caused by an upgrade in Redis client driver that broke the way Redis scripts get loaded in
You may also get following
OperationalError: FATAL: Peer authentication failed for user "postgres"
Go to the file
pg_hba.conf file (
As of now I am changed it to
trust , anyone who can connect to the server will be authorized to access the database with whatever database user name they specify (even superuser names). You should change it to
md5 when deploying to
local all postgres trust
Don’t forget to restart the
sudo service postgresql restart
Next is creation of the first user which will act as superuser to the DB
$ SENTRY_CONF=~/.sentry sentry createuser
Starting Sentry as web service:
$ SENTRY_CONF=~/.sentry sentry run web
You should be able to see the prompt on http://xxx.xxx.xxx.xxx:9000
Starting background workers:
$ SENTRY_CONF=~/.sentry sentry run worker