В данном мануале мы расскажем как установить Sentry на ОС Centos 7, причем сделать это быстро, правильно и надежно. Кроме того мы подготовим конфигурацию для Supervisor, с помощью которого будем управлять основными службами Sentry.

Итак, прежде всего установим все необходимые зависимости:

yum install epel-release -y 
yum install wget python-setuptools.noarch python2-pip.noarch python-devel.x86_64 libxslt.x86_64 libxslt-devel.x86_64 libxml2 libxml2-devel.x86_64 libzip libzip-devel libffi.x86_64 libffi-devel.x86_64 openssl-libs.x86_64 libpqxx libpqxx-devel libyaml libyaml-devel libjpeg libjpeg-devel libpng libpng12 libpng12-devel libpng-devel net-tools gcc gcc-c++ libxml2-devel xmlsec1-devel xmlsec1-openssl-devel libtool-ltdl-devel -y

Sentry использует PostgreSQL в качестве базы данных, поэтому установим пакет postgresql с помощью команды:

yum install postgresql-server.x86_64 postgresql-contrib -y
postgresql-setup initdb
systemctl enable postgresql.service
systemctl start postgresql.service 

Так же для работы Senry необходим Redis, поэтому так же установим и его с помощью команды:

yum install redis -y
systemctl enable redis.service
systemctl start redis.service 

Ну и конечно же нам необходимо установить Supervisor, с помощью которого мы будем контролировать работу Sentry:

yum install supervisor -y
systemctl enable supervisord.service

Теперь обновим pip:

pip install --upgrade pip 

Пример результата выполнения команды выше:

root@sentry ~ $  pip install --upgrade pip
Collecting pip
Downloading https://files.pythonhosted.org/packages/00/b6/9cfa56b4081ad13874b0c6f96af8ce16cfbc1cb06bedf8e9164ce5551ec1/pip-19.3.1-py2.py3-none-any.whl (1.4MB)
100% |████████████████████████████████| 1.4MB 597kB/s
Installing collected packages: pip
Found existing installation: pip 8.1.2
Uninstalling pip-8.1.2:
Successfully uninstalled pip-8.1.2
Successfully installed pip-19.3.1

Далее установим virtualenv для создания изолированного Python-окружения:

pip install -U virtualenv 

Пример результата выполнения команды выше:

root@sentry ~ $  pip install -U virtualenv
DEPRECATION: Python 2.7 will reach the end of its life on January 1st, 2020. Please upgrade your Python as Python 2.7 won't be maintained after that date. A future version of pip will drop support for Python 2.7. More details about Python 2 support in pip, can be found at https://pip.pypa.io/en/latest/development/release-process/#python-2-support
Collecting virtualenv
Downloading https://files.pythonhosted.org/packages/c5/97/00dd42a0fc41e9016b23f07ec7f657f636cb672fad9cf72b80f8f65c6a46/virtualenv-16.7.7-py2.py3-none-any.whl (3.4MB)
|████████████████████████████████| 3.4MB 4.3MB/s
Installing collected packages: virtualenv
Successfully installed virtualenv-16.7.7

Для того что бы обеспечить необходимый уровень безопасности, мы будем запускать Sentry под отдельно созданным для него пользователем, которого создадим командой:

useradd sentry 

Все необходимые пакеты установлены, так что теперь приступим к настройке и для начала создадим базу данных sentrydb и пользователя базы данных sentry:

su - postgres
psql template1
create user sentry with password 'ваш_сложный_пароль';
alter user sentry with superuser;
create database sentrydb with owner sentry;
\q
exit 

Пользователь и БД готовы, теперь авторизуемся под пользователем сентри командой:

su - sentry 

Создаём виртуальное окружение в домашней директории пользователя sentry:

virtualenv /home/sentry/sentry_app 

Активируем shell внутри окружения:

source /home/sentry/sentry_app/bin/activate 

Теперь приступим к установке самого Sentry, для этого выполним команду:

pip install -U sentry 

результат выполнения данной команды будет достаточно обьёным, будет установлена масса зависимостей, и сам процесс может занять до 5 минут, в зависимости от скорости интернета на вашем сервере, вывод будем примерно следующим:

Successfully built mmh3 email-reply-parser python-openid parsimonious loremipsum setproctitle python-u2flib-server sqlparse strict-rfc3339 django-jsonfield querystring-parser cssutils toronado PyYAML uwsgi django-crispy-forms functools32 requests-oauthlib simplejson hiredis petname exam olefile httplib2 billiard anyjson pycparser
Installing collected packages: djangorestframework, mmh3, email-reply-parser, python-openid, six, parsimonious, redis, rb, loremipsum, setproctitle, enum34, pycparser, cffi, ipaddress, cryptography, python-u2flib-server, sqlparse, lxml, more-itertools, attrs, py, funcsigs, pluggy, pytest, pytest-html, Django, milksnake, semaphore, qrcode, python-memcached, python-dateutil, croniter, PyJWT, urllib3, selenium, python-utils, progressbar2, certifi, sentry-sdk, strict-rfc3339, honcho, jmespath, docutils, botocore, olefile, Pillow, django-jsonfield, msgpack, unidiff, django-templatetag-sugar, django-picklefield, httplib2, oauth2, idna, chardet, pyOpenSSL, requests, mistune, percy, ua-parser, click, querystring-parser, cssutils, psycopg2-binary, pytz, amqp, anyjson, kombu, billiard, celery, django-sudo, statsd, symbolic, cssselect, toronado, PyYAML, uwsgi, redis-py-cluster, futures, s3transfer, boto3, django-crispy-forms, functools32, pytest-django, oauthlib, requests-oauthlib, simplejson, hiredis, petname, pbr, mock, structlog, BeautifulSoup, jsonschema, exam, sentry
Successfully installed BeautifulSoup-3.2.2 Django-1.6.11 Pillow-4.2.1 PyJWT-1.5.3 PyYAML-3.11 amqp-1.4.9 anyjson-0.3.3 attrs-19.3.0 billiard-3.3.0.23 boto3-1.4.5 botocore-1.5.70 celery-3.1.18 certifi-2019.9.11 cffi-1.13.1 chardet-3.0.4 click-6.7 croniter-0.3.30 cryptography-2.8 cssselect-1.1.0 cssutils-0.9.10 django-crispy-forms-1.4.0 django-jsonfield-0.9.13 django-picklefield-0.3.2 django-sudo-2.1.0 django-templatetag-sugar-1.0 djangorestframework-2.4.8 docutils-0.15.2 email-reply-parser-0.2.0 enum34-1.1.6 exam-0.10.6 funcsigs-1.0.2 functools32-3.2.3.post2 futures-3.3.0 hiredis-0.1.6 honcho-1.0.1 httplib2-0.14.0 idna-2.7 ipaddress-1.0.23 jmespath-0.9.4 jsonschema-2.6.0 kombu-3.0.35 loremipsum-1.0.5 lxml-4.4.1 milksnake-0.1.5 mistune-0.8.4 mmh3-2.3.1 mock-2.0.0 more-itertools-5.0.0 msgpack-0.6.2 oauth2-1.9.0.post1 oauthlib-3.1.0 olefile-0.46 parsimonious-0.8.0 pbr-5.4.3 percy-2.0.2 petname-2.0 pluggy-0.6.0 progressbar2-3.10.1 psycopg2-binary-2.7.7 py-1.8.0 pyOpenSSL-19.0.0 pycparser-2.19 pytest-3.5.1 pytest-django-2.9.1 pytest-html-1.9.0 python-dateutil-2.8.0 python-memcached-1.59 python-openid-2.2.5 python-u2flib-server-4.0.1 python-utils-2.3.0 pytz-2019.3 qrcode-5.3 querystring-parser-1.2.4 rb-1.7 redis-2.10.5 redis-py-cluster-1.3.4 requests-2.20.1 requests-oauthlib-0.3.3 s3transfer-0.1.13 selenium-3.141.0 semaphore-0.4.57 sentry-9.1.2 sentry-sdk-0.13.1 setproctitle-1.1.10 simplejson-3.8.2 six-1.10.0 sqlparse-0.1.19 statsd-3.1 strict-rfc3339-0.7 structlog-16.1.0 symbolic-6.1.4 toronado-0.0.11 ua-parser-0.7.3 unidiff-0.5.5 urllib3-1.24.2 uwsgi-2.0.18

После завершения процесса установки выполним инициализацию Sentry:

/home/sentry/sentry_app/bin/sentry init 

Далее нам необходимо настроить файлы конфигураций Sentry, поэтому откроем первый конфиг файл:

nano /home/sentry/.sentry/sentry.conf.py 

и изменим следующие строки, указав данные от пользователя бд и имя бд, которые мы создали выше:

…

 DATABASES = {
 'default': {
 'ENGINE': 'sentry.db.postgres',
 'NAME': 'sentrydb',
 'USER': 'sentry',
 'PASSWORD': 'ваш_сложный_пароль',
 'HOST': '127.0.0.1',
 'PORT': '5432',
 'AUTOCOMMIT': True,
 'ATOMIC_REQUESTS': False,
 }
 }

 …

так же отредактируем второй конфиг файл:

nano /home/sentry/.sentry/config.yml 

указав данные для подключения к redis:

...

redis.clusters:
default:
hosts:
0:
host: 127.0.0.1
port: 6379

...

Теперь нам необходимо настроить права доступа к PostgreSQL, что бы пользователь Sentry без проблем подключился к базе. Редактируем файл командой:

nano /var/lib/pgsql/data/pg_hba.conf 

приводим его к следующему виду:

# TYPE  DATABASE        USER            ADDRESS                 METHOD

local    all             postgres                                peer

# "local" is for Unix domain socket connections only
local    all             all                                     peer
# IPv4 local connections:
host     all             all             127.0.0.1/32            md5
# IPv6 local connections:
host     all             all             ::1/128                 md5
# Allow replication connections from localhost, by a user with the
# replication privilege.
#local   replication     postgres                                peer
#host    replication     postgres        127.0.0.1/32            ident
#host    replication     postgres        ::1/128                 ident

Перезапускаем PostgreSQL командой:

systemctl restart postgresql.service 

Теперь выполним команду:

/home/sentry/sentry_app/bin/sentry upgrade 

ВНИМАНИЕ

в процессе вам необходимо будет ввести email для супер пользователя.

Далее, нам необходимо настроить supervisor, который будет управлять службами Sentry, для этого отредактируем конфиг файл supervisr командой:

nano /etc/supervisord.conf  

и в самом низу укажем следующее:

files = supervisord.d/*.conf 

Тем самым, мы указываем, что в папке /etc/supervisord.d/ будут располагаться файлы конфигурации, которые необходимо учитывать при работе службы.

Создадим конфигурационный файл для управления службами Sentry командой

nano /etc/supervisord.d/sentry.conf

и вставим в него следующее содержимое:

[program:sentry-web]
directory=/home/sentry/sentry_app/
environment=SENTRY_CONF="/home/sentry/.sentry"
command=/home/sentry/sentry_app/bin/sentry --config=/home/sentry/.sentry run web
autostart=true
autorestart=true
redirect_stderr=true
user=sentry
stdout_logfile=syslog
stderr_logfile=syslog

[program:sentry-worker]
directory=/home/sentry/sentry_app/
environment=SENTRY_CONF="/home/sentry/.sentry"
command=/home/sentry/sentry_app/bin/sentry --config=/home/sentry/.sentry run worker
autostart=true
autorestart=true
redirect_stderr=true
user=sentry
stdout_logfile=syslog
stderr_logfile=syslog
startsecs=1
startretries=3
stopsignal=TERM
stopwaitsecs=10
stopasgroup=false
killasgroup=true

[program:sentry-cron]
directory=/home/sentry/sentry_app/
environment=SENTRY_CONF="/home/sentry/.sentry"
command=/home/sentry/sentry_app/bin/sentry --config=/home/sentry/.sentry run cron
autostart=true
autorestart=true
redirect_stderr=true
user=sentry
stdout_logfile=syslog
stderr_logfile=syslog

Перезапустим supervisor и обновим его конфигурацию командами:

service supervisord restart
supervisorctl reread
supervisorctl update

Установка и настройка Sentry завершена. Теперь мы можем используя url вида:

http://ип_вашего_сервера:9000

войти в web-панель управления Sentry и подключить своё приложения для сбора ошибок.

UPD: обновлён список зависимостей при установке пакетов, благодарим Ивана Бордаковского за актуальную информацию.

Categories: Centos

0 Comments

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *