Переехавши на новый сервер, перетаскиваю туда всякие разные полезные сервисы. Что-то будет скопировано целиком, что-то ставлю заново. Вот sentry, систему для сбора всяческих ошибок (как со стороны сервера, так и клиента), решил переставить новую. Тем более, что со старой версией мой grails-raven не работал.
Дано: практически голый debian 7, есть правда postgresql, nginx, python 2.7.
Для начала мы создадим пользователя sentry и поставим несколько важных и полезных пакетов.
apt-get install redis-server memcached postgresql-server-dev-9.1 python-setuptools python-dev screen
useradd -d /home/sentry.domain.ru sentry
easy_install -UZ virtualenv
Дальше было настроено несколько "редисок", штука же полезная. Для этого был скопирован /etc/init.d/redis-server в /etc/init.d/redis-server2 и /etc/init.d/redis-server3, а также /etc/redis/redis.conf в /etc/redis/redis2.conf и /etc/redis/redis3.conf. Везде мы правим pid, имя файла с дампом базы, и порт. Ну и логи, куда же без них. Например, релевантная часть redis3.conf выглядит так:
dir /var/lib/redis # The filename where to dump the DB dbfilename dump3.rdb port 6381 pidfile /var/run/redis/redis-server3.pid logfile /var/log/redis/redis-server3.log
Как пользователь postgres, создадим нового пользователя БД sentry, с правом создания баз данных, но без прав суперпользователя и без прав создания новых пользователей.
su - postgres
createuser sentry
logout
После этого переключаемся на нового пользователя, sentry :). Я делал это уже по ssh, а не через su.
createdb sentry
virtualenv sentry
source sentry/bin/activate
cd sentry/
easy_install -UZ sentry
bin/sentry init
vim ~/.sentry/sentry.conf.py
easy_install -UZ psycopg2
easy_install -UZ redis
easy_install -UZ nydus
easy_install -UZ python-memcached
screen -d -m ~/sentry/bin/sentry start --verbosity=3 -w 5
Процитирую релевантную часть конфига:
DATABASES = { 'default': { # package: psycopg2 (Postgres) or mysql-python 'ENGINE': 'django.db.backends.postgresql_psycopg2', 'NAME': 'sentry', # os.path.join(CONF_ROOT, 'sentry.db'), 'USER': 'sentry', 'PASSWORD': '', 'HOST': '', 'PORT': '', } } CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache', 'LOCATION': ['127.0.0.1:11211'], } } BROKER_URL = 'redis://localhost:6381' SENTRY_BUFFER = 'sentry.buffer.redis.RedisBuffer' SENTRY_BUFFER_OPTIONS = { 'hosts': { 0: { 'host': '127.0.0.1', 'port': 6381, } } } SENTRY_KEY = '================ a very big secret ==' SENTRY_URL_PREFIX='http://s.domain.ru' SENTRY_WEB_HOST = '0.0.0.0' SENTRY_WEB_PORT = 9000 SENTRY_WEB_OPTIONS = { 'workers': 5, # the number of gunicorn workers 'secure_scheme_headers': {'X-FORWARDED-PROTO': 'https'}, }
Всё на удивление работает, правда возникают проблемы при использовании SENTRY_USE_QUEUE = True, пришлось закомментировать и теперь всё работает. Проверить можно, подключившись к 9000 порту сервера. Но понятное дело, этого нам недостаточно, и теперь мы идём настраивать nginx. Проще пареной репы:
server { listen 80; server_name s.domain.ru; error_log /var/log/nginx/s.domain.ru.error_log; location / { proxy_pass http://localhost:9000; } }
И оно работает!