#依赖:
- redis
- postgresql
- python
sentry是python开发的一个应用,使用python uWSG框架运行,所有安装完sentry要记得在nginx的代理上禁用掉/admin路径,不然uwsg的后台管理入口就泄漏了 具体的安装资料地址为:
https://docs.sentry.io/server/installation/#redis的启动su - redis redis-server /etc/redis.conf
#postgresql因为是项目迁移,用的9.6版本,所以需要yum自己安装一下
systemctl restart postgresql-9.6#使用的材料地址https://download.postgresql.org/pub/repos/yum/9.6/redhat/rhel-7.2-x86_64/repodata/repomd.xmlhttps://www.postgresql.org/download/linux/redhat/
db准备好之后要先初始化
postgresql-setup initdb/usr/pgsql-9.6/bin下也会有一个专用的命令/usr/pgsql-9.6/bin/initdb -D /data/www/db可以这样去指定一个目录来进行初始化
redis和pgsql都要要各自对用的用户来进行操作,pgsql的默认用户是postgres
初始化完成之后要注意两个文件: postgresql.conf #相当于mysql的my.cnf配置文件 pg_hba.conf #用户远程访问控制配置文件,这个文件弄不好,pgsql无法远程连接
pgsql的用户创建
CREATE USER dbuser WITH PASSWORD 'password'; #创建用户dbuser并设置密码CREATE DATABASE sentry OWNER dbuser; #创建库sentry并指定拥有者给dbuserGRANT ALL PRIVILEGES ON DATABASE sentry TO dbuser; #授权dbuser可以对sentry库进行任何操作修改密码的语句alter user dbuser with password 'password';
pgsql登录好坑爹的,要先切到postgers用户,然后再运行pgsql(我的不知道为什么叫psql) 送一个pgsql的数据导入和导出操作语句
导出DB数据到file文件pg_dump -h $host -p $port sentry -W > file从file导入数据到DBpsql -U dbuser -h $yourhost -p $port -W -d sentry -f file
#redis和DB做好之后下来安装sentry 最直接的办法是用pip进行安装 可以指定版本
pip install sentry==your-version
安装前的依赖
yum install python-setuptools python-devel libxslt1-devel gcc libffi-devel libjpeg-devel libxml2-devel libxslt-devel libyaml-devel libpqxx-devel
pip的安装
wget https://bootstrap.pypa.io/get-pip.pypython get-pip.py
安装好之后可以这样查看sentry的版本
sentry --versionsentry --help #查看所有支持的命令
#启动sentry sentry要启动有三个东西,web worker cron,据说是缺一不可,不过我看可以先启动web,后面两个补上就行了
启动的方式:
sentry run websentry run workersentry run cron
but,在启动之前需要先生产sentry的配置文件,也就是文档上说的初始化
sentry initsentry upgrade
运行之后会在当前目录造出来两个文件 config.yml
sentry.conf.py upgrade 命令用来在pgsql创建所需的表根据自己的配置填好redis和pgsql的地址和密码就可以run web了
[Unit]Description=Sentry Main ServiceAfter=network.target[Service]Type=simpleUser=sentryGroup=sentryWorkingDirectory=/data/www/sentryEnvironment=SENTRY_CONF=/etc/sentryExecStart=/usr/bin/sentry run web[Install]WantedBy=multi-user.targe
启动sentry.service,可以放systemd进行服务的启动
另外要注意尽量新创建一个sentry帐号,启动服务的使用用指定的普通帐号
关于nginx的配置,nginx代理服务到sentry会更加灵活一点
server { listen 80; server_name sentry.com; access_log /logs/nginx/sentry_access.log main; error_log /logs/nginx/sentry_error.log; return 301 https://$server_name$request_uri; }server { listen 443 ssl; server_name sentry.com; access_log /logs/nginx/sentry_access.log main; error_log /logs/nginx/sentry_error.log; ssl_certificate /etc/nginx/ca/sentry.cer; ssl_certificate_key /etc/nginx/ca/sentry.key; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS; ssl_prefer_server_ciphers on; ssl_session_cache shared:SSL:128m; ssl_session_timeout 10m; proxy_set_header Host $http_host; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Forwarded-For $remote_addr; proxy_redirect off; keepalive_timeout 0; proxy_read_timeout 5s; proxy_send_timeout 5s; send_timeout 5s; resolver_timeout 5s; client_body_timeout 5s; client_max_body_size 5m; client_body_buffer_size 100k; location /admin/ { deny all; } location / { proxy_pass http://localhost:$sentry-port; add_header Strict-Transport-Security "max-age=31526000"; } location ^~ /auth/login/ { allow $your-ip-address; deny all; proxy_pass http://localhost:$sentry-port/auth/login/; add_header Strict-Transport-Security "max-age=31536000"; }}
#关于错误
Please wait while we load an obnoxious amount of JavaScript.You may need to disable adblocking extensions to load Sentry.
这个错误找了好多资料 有一个说是要执行sentry django collectstatic,生成static的相关文件 反正核心的意思是js和css静态资源无法加载,这个如果找不到文件,就上面的办法生成一下,如果能找到,考虑static的访问权限问题,nginx用的是nobody用户,sentry是sentry用户,中间的tmp文件和static文件,应该多多少少都会碰到权限问题。
sentry repair
这个命令很实用,可以修复一些简单的数据错误,但是也有可能修复不了
还有一个遗留的问题,sentry数据迁移之后,启动的新实例中老数据会丢失,不知道是怎么回事