CentOS7上面搭建sentry24版本详细教程与踩坑记录


这次搭建sentry24.8这个版本,这是一个比较新的版本,安装过程中多去github以及stack overflow上面去寻找问题,由于百度上面可以搜索到的内容很有限,所以本次将一些踩坑记录都记录一下。

一、选择机器配置

先列一下我的操作配置:

操作系统:CentOS Linux release 7.6
docker版本:Docker version 26.1.4
docker-compose版本:Docker Compose version v2.5.0
服务器情况:8核16G,磁盘至少50G,建议实际使用配置100G以上。

注意:
docker尽量用新版的,docker低于21的版本不建议考虑,因为新版的sentry要求比较新的docker。建议大家都用到我这个配置之上,不然会出现一些莫名奇妙的问题。服务器配置不低于8核16G,因为启动的时候有50多个docker服务,有条件直接上32G的。

由于业务需要,我搭建的是比较新的版本,sentry 24.8.0。

二、安装docker-ce和docker-compose

如果有报错请去下面报错专区寻找相关问题

2.1 安装docker-ce

配置源

sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

or

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

然后开始安装docker-ce

yum install docker-ce docker-ce-cli containerd.io

安装完成后启动并检查版本

service docker start
docker --version

2.2 安装docker-compose

依次执行下面的命令即可,这个步骤一般没啥问题,比较顺利

sudo curl -L "https://github.com/docker/compose/releases/download/v2.5.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/bin/docker-compose
sudo chmod +x /usr/bin/docker-compose
docker-compose --version

三、安装sentry服务

3.1 安装sentry

这次我们使用的离线项目本地安装的方式安装sentry

# 创建源码目录
mkdir /root/sentry
cd /root/sentry
# 获取基于dokcer-compose的构建项目并解压进入
wget https://github.com/getsentry/self-hosted/archive/refs/tags/24.8.0.zip
unzip 24.8.0.zip 
cd self-hosted-24.8.0/
# 开始安装
./install.sh

原则上讲这里就结束了,启动起来就够了,但是会遇到很多问题,如果有问题请见下面的报错部分查找,大概问题有如下一些。

  1. clickhouse服务启动不起来
  2. 数据库字段冲突报错
  3. geoipupdate服务启动不起来
  4. Error in bootstrap-snuba.sh:3

3.2 外部代理Nginx配置

因为sentry在机器上面启动的是9000端口,为了更好的对外通过80提供服务,我们在宿主机器上面搭建一个Nginx进行一层代理。
安装Nginx。

yum install nginx

主要配置如下

server {
    
    
    listen 80;
    listen 443 ssl;
    
    error_log /var/log/nginx/error.log;
    access_log /var/log/nginx/access.log;
    
    index           index.php index.html index.htm;
    server_name sentry.{
    
    your domian}.com;
    
    # 443需要证书,这里自行寻找配置即可
    ssl_certificate /etc/nginx/ssl/ssl.crt;
    ssl_certificate_key /etc/nginx/ssl/ssl.key;
    
    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 $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }

}

然后启动Nginx后就可以通过域名进行访问了。

nginx

在这里插入图片描述

如果访问这里可能存在问题CSRF验证失败,解决方式见报错处理部分。

四、报错与踩坑解决记录

4.1 yum update 报错Could not retrieve mirrorlist http://mirrorlist.centos.org

Could not retrieve mirrorlist http://mirrorlist.centos.org/?release=7&arch=x86_64&repo=os&infra=stock error was
14: curl#6 - "Could not resolve host: mirrorlist.centos.org; Unknown error"
http://mirror.centos.org/centos/7/os/x86_64/repodata/repomd.xml: [Errno 14] curl#6 - "Could not resolve host: mirror.centos.org; Unknown error"
Trying other mirror.

在这里插入图片描述

解决办法是:
从 2024 年 7 月 1 日起,在 CentOS 7 上,请切换到 Vault 存档存储库:

vi /etc/yum.repos.d/CentOS-Base.repo

复制/粘贴以下内容并注意您的操作系统版本。如果需要,请更改。此配置中的版本为 7.9.2009:

[base]
name=CentOS-$releasever - Base
baseurl=http://vault.centos.org/7.9.2009/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

[updates]
name=CentOS-$releasever - Updates
baseurl=http://vault.centos.org/7.9.2009/updates/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

[extras]
name=CentOS-$releasever - Extras
baseurl=http://vault.centos.org/7.9.2009/extras/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

[centosplus]
name=CentOS-$releasever - Plus
baseurl=http://vault.centos.org/7.9.2009/centosplus/$basearch/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

如果需要,请执行以下操作:

yum clean all

4.2 yum install docker-ce出现如下报错 Requires: slirp4netns >= 0.4

在这里插入图片描述
解决办法:
vi /etc/yum.repos.d/docker-ce.repo 在结尾添加:

[centos-extras]
name=Centos extras - $basearch
baseurl=http://vault.centos.org/centos/7/extras/x86_64
enabled=1
gpgcheck=0

然后执行:

yum remove slirp4netns fuse-overlayfs container-selinux
yum -y install slirp4netns fuse-overlayfs container-selinux

4.3 install.sh执行过程clickhouse服务启动不起来Waiting for clickhouse server, 18 remaining attempts…

在这里插入图片描述
这个问题我的主要报错是先用dokcer logs查看clickhouse容器的报错,显示
DB::Exception::Exception(DB::Exception::MessageMasked&&, int, bool)
Probably you are trying to upgrade from version older than 20.7. If so, you should upgrade through intermediate version
这个提示比较明显,就是要通过中间版本来依次升级。解决方式是查看cat install/upgrade-clickhouse.sh这个文件。
在这里插入图片描述
然后更改docker-compose文件,将原来代码这个位置更换成21.8.13.1.altinitystable,不得不说官方这里留了一个坑。
在这里插入图片描述
然后重新执行install.sh,我的这个问题得以解决。

4.4 install.sh执行过程数据库字段冲突报错

constraint "sentry_externalactor_actor_id_a8478274_fk_sentry_actor_id" for relation "sentry_externalactor" already exists
在这里插入图片描述
这个问题也是一个坑,后面的数据库迁移文件执行的时候需要创建这个约束,但是前面又有,我处理这个做法是,在install/set-up-and-migrate-database.sh文件中先删除这个字段。还有一个user_case也是这个问题。添加如下两行到这个位置。

cursor.execute('ALTER TABLE IF EXISTS sentry_externalactor DROP CONSTRAINT IF EXISTS sentry_externalactor_actor_id_a8478274_fk_sentry_actor_id;')
cursor.execute('ALTER TABLE IF EXISTS sentry_projectkey DROP COLUMN IF EXISTS use_case;')

在这里插入图片描述
然后重新执行install.sh,我的这个问题得以解决。

4.5 geoipupdate服务报错

这个包主要用于更新这个文件:geoip/GeoLite2-City.mmdb,就是通过IP定位城市的功能。

通过docker日志发现这里主要是没有 /sentry/GeoIP.conf这个文件,这又是官方包的一个坑。
error loading configuration file /sentry/GeoIP.conf: error opening file: open /sentry/GeoIP.conf: no such file or directory
在这里插入图片描述
我采取的方式是直接创建,执行如下三行命令。

vi geoip/GeoIP.conf 
rm -rf sentry/GeoIP.conf
cp geoip/GeoIP.conf sentry/

GeoIP.conf 里面的内容主要是三行。

AccountID 12312123
LicenseKey asdfasdfaf
EditionIDs GeoLite2-City

AccountID和LicenseKey可以去 这里注册后获取。并登录后在这里生成。

在这里插入图片描述

然后重新执行docker-compose up geoipupdate,我的这个问题得以解决。

geoipupdate启动一次后会自行退出,容器处于exit状态,属于正常情况。

4.6 关于报错 Error in bootstrap-snuba.sh:3

这个问题通过升级docker版本后得以解决,之前我的版本是20,现在是26。

4.7 关于sentry启动后无法登录报错CSRF验证失败的问题。

在这里插入图片描述

这个问题的解决方式是找到sentry/config.yml,将如下配置放开,并改成你的域名。

system.url-prefix: http://xx.xx.x.xx

并且Nginx的反向代理按照我上面给出的配置配好,然后执行docker-compose restart。