使用Docker部署Sentry服务

0X00 Sentry是什么

Sentry是一个统一收集整理程序异常错误的服务。如果你有一个程序在跑,并且配置了日志,那么可以轻松的找到程序出错的地方;甚至可以在报错后发邮件通知自己以便抓紧处理。但是如果你的团队有10个项目和50个人,并且这50个人并不是每人只负责一个项目,此时此刻该怎么办呢?难道为每个项目都配置很多人,并且在人员变动和项目变动的时候都去再修改吗?这样就未免有点傻了,Sentry就是用来做这个的。

你可以在Sentry上为每个项目创建一个Project用于收集项目的错误,再为每位成员创建用户,由用户去关注项目,就可以实现上述复杂的功能了。

0X01 如何部署

为了流程简洁,默认安装了dockerdocker-compose

1
2
3
4
5
6
7
8
9
10
# 将一个配置好的使用docker-compose部署Sentry给clone下来
git clone https://github.com/getsentry/onpremise.git

cd onpremise

# 创建所需的目录
mkdir -p data/{sentry,postgres}

# 生成一个secret-key
docker-compose run --rm web config generate-secret-key

上述命令执行完成后,输出的最后一行类似乱码的东西是我们所需的secret-key,将其复制粘贴之docker-compose.yml文件的SENTRY_SECRET_KEY后面,形似

1
2
SENTRY_SECRET_KEY: '*********************'
SENTRY_MEMCACHED_HOST: memcached

然后初始化数据库docker-compose run --rm web upgrade,执行过程中会要求创建一个管理员账户,根据流程的提示操作既可。操作完成后执行docker-compose up -d就可以将整套Sentry服务启动起来了。此时如果想要访问Sentry的web服务需要访问ip:9000,可以按照下面的方法为其配置nginx的反向代理。

0X02 Nginx反向代理

向nxing配置的http模块内部添加下面的配置,并重新载入/重启Nginx后就可以使用域名访问Sentry了。注意将其中的xxxx.example.com改为自己解析了的域名。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
server {
listen 80;
server_name xxxx.example.com;

location / {
proxy_pass http://127.0.0.1:9000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Host $remote_addr;
}

client_max_body_size 10m;
}

到此为止Sentry就算是配置完成了。

0X03 集成到自己的程序中

在Sentry的web服务中创建一个新的Project,创建时需要选择自己程序的类型,比如是Django还是Flask或是其他,创建好后会有提示,按照提示就可以将Sentry集成到自己的程序中了。过程都非常简单,比如在纯Python程序中集成一个Sentry也就四五行的事情,而在Django中也不过10行代码。

0X04 配置发送邮件

此时的Sentry还只能接收错误,如果想要使其能够发送邮件,需要修改docker-compose.yml文件,找到几个以SENTRY_XXX开头的地方,在这里配置好自己需要使用的发件配置,例如

1
2
3
4
5
6
SENTRY_SERVER_EMAIL: [email protected]
SENTRY_EMAIL_HOST: smtp.example.com
SENTRY_EMAIL_PASSWORD: examplepassword
SENTRY_EMAIL_USER: [email protected]
SENTRY_EMAIL_PORT: 587 # 如果使用TLS加密且采用465端口失效时可以尝试将端口改为587试试
SENTRY_EMAIL_USE_TLS: 'True'

然后把生成的容器停止删除并重建一下,就可以了。

1
2
3
4
5
docker-compose stop
docker-compose rm
# 上面两个操作在新版本的docker-compose中可以使用docker-compose down来替代

docker-compose up -d

0XFFFF Done!

整体的大方面的配置就是这样了,具体的可以慢慢在web界面摸索一下,就这样啦

\口-口/