如何在Ubuntu 22.04上安装Sentry

Sentry 是一个免费和开源的错误跟踪平台,可以实时监控和修复崩溃。它使软件开发人员能够看到重要的东西,更快地解决问题,并不断了解他们的应用程序。这个平台提供了对生产部署的实时洞察力,并提供了重现和修复崩溃的信息。Sentry 支持所有主要的语言和框架,并与你喜欢的应用程序和服务集成。

1. 前提条件

  • 一台运行 Ubuntu 22.04 的服务器。
  • 一个有效的域名被指向你的服务器 IP。
  • 在你的服务器上配置了一个根密码。

2. 硬件配置要求

安装 self-hosted sentry 需要的硬件配置取决于您的应用程序的大小和复杂性。以下是一些一般建议:

CPU: 至少 2 核。如果您的应用程序非常复杂,则需要更多核。
内存: 至少 4GB。如果您的应用程序生成大量日志,则需要更多内存。
存储: 至少 20GB。如果您的应用程序生成大量日志,则需要更多存储空间。
网络: 至少 100Mbps。如果您的应用程序生成大量日志,则需要更高的网络带宽。

以下是一些具体的配置建议:

对于小型应用程序(<100 个用户), 您可以使用以下配置:

  • CPU:2 核
  • 内存:4GB
  • 存储:20GB
  • 网络:100Mbps

对于中型应用程序(100-1,000 个用户), 您可以使用以下配置:

  • CPU:4 核
  • 内存:8GB
  • 存储:60GB
  • 网络:500Mbps

对于大型应用程序(>1,000 个用户), 您可以使用以下配置:

  • CPU:8 核
  • 内存:16GB
  • 存储:120GB
  • 网络:1Gbps

可以根据需要调整这些建议。例如,如果希望 sentry 能够处理更高的并发连接,则需要更多的 CPU 和内存。如果希望 sentry 能够存储更长时间的日志,则需要更多的存储空间。

您可以使用 Sentry 提供的 性能指南 来帮助您确定适合您应用程序的硬件配置。

3. 环境

本教程实验环境

Ubuntu 22.04.1
Docker 24.0.5
Docker-Compose 2.22.0
Sentry 23.11.0

3.1. 安装所需的依赖项

在开始之前,建议将你的软件包更新到最新版本。你可以用以下命令来更新它们:

配置国内的镜像源, 并更新.

1
2
3
sudo apt update -y
# apt upgrade会更新内核, 请谨慎使用
#sudo apt upgrade -y

如果您以前安装过 containerd 或 runc,请卸载它们以避免与 Docker Engine 捆绑的版本发生冲突。

运行以下命令卸载所有冲突的程序包:

1
2
3

for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done

一旦你的系统被更新,用下面的命令安装所有需要的软件包:

1
sudo apt-get install curl git build-essential apt-transport-https ca-certificates software-properties-common gnupg -y

3.2. 安装 Docker 和 Docker Compose

默认情况下,最新版本的 Docker 和 Docker Compose 包在 Ubuntu 22.04 的默认软件库中是不可用的。所以你需要在 APT 中添加 Docker 官方仓库。

首先,用以下命令下载并添加 Docker GPG 密钥:

1
2
3
4
5
6
sudo install -m 0755 -d /etc/apt/keyrings

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

sudo chmod a+r /etc/apt/keyrings/docker.gpg

接下来,用下面的命令添加 Docker 存储库:

1
2
3
4
5
6

echo \
"deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
"$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

一旦版本库被添加,用以下命令更新版本库缓存。

1
sudo apt-get update -y

接下来,用下面的命令安装 Docker 和 Docker Compose。

1
2
3
4
5
6
7
8
# 安装最新版本
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

# 或者, 像这样安装指定版本
# List the available versions:
apt-cache madison docker-ce | awk '{ print $3 }'
VERSION_STRING=5:24.0.0-1~ubuntu.22.04~jammy
sudo apt-get install docker-ce=$VERSION_STRING docker-ce-cli=$VERSION_STRING containerd.io docker-buildx-plugin docker-compose-plugin

配置镜像加速

1
2
3
4
5
6
7
sudo echo -e \
"{ \n" \
" \"registry-mirrors\": [\"https://<你的ID>.mirror.aliyuncs.com\"], \n" \
" \"live-restore\": true,\n" \
" \"debug\": true\n" \
"}" | sudo tee /etc/docker/daemon.json > /dev/null

安装 docker-compose

1
2
3
4
5

sudo curl -L https://github.com/docker/compose/releases/download/v2.22.0/docker-compose-`uname -s`-`uname -m` -o /usr/bin/docker-compose

# 授予docker-compose可执行权限
sudo chmod +x /usr/bin/docker-compose

如果下载速度太慢, 可以通过一台可以快速访问 github 的电脑手动下载 docker-compose, 然后上传至服务器.

查看 docker 和 docker-compose 版本信息

1
2
3
4

$ docker -v
Docker version 24.0.7, build afdd53b

1
2
3

$ docker-compose -v
Docker Compose version v2.22.0

查看镜像配置是否成功

1
sudo docker info

如果镜像仓库显示有如下内容,则配置成功。

1
2
3
4
Registry Mirrors:
https://your_id.mirror.aliyuncs.com/ #如果这里显示这里刚才的配置的地址,则配置成功
Live Restore Enabled: false

安装好这两个软件包后,用以下命令启动 Docker 服务并使其在系统重启时启动:

1
2
sudo systemctl start docker
sudo systemctl enable docker

现在你可以用下面的命令来验证 Docker 的状态:

1
sudo systemctl status docker

你应该得到以下输出:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
? docker.service - Docker Application Container Engine
Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2023-01-10 04:37:27 UTC; 5s ago
TriggeredBy: ? docker.socket
Docs: https://docs.docker.com
Main PID: 45847 (dockerd)
Tasks: 8
Memory: 29.1M
CPU: 220ms
CGroup: /system.slice/docker.service
??45847 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

Jan 10 04:37:26 vultr dockerd[45847]: time="2023-01-10T04:37:26.903435377Z" level=info msg="scheme \"unix\" not registered, fallback to defau>
Jan 10 04:37:26 vultr dockerd[45847]: time="2023-01-10T04:37:26.903453803Z" level=info msg="ccResolverWrapper: sending update to cc: {[{unix:>
Jan 10 04:37:26 vultr dockerd[45847]: time="2023-01-10T04:37:26.903464761Z" level=info msg="ClientConn switching balancer to \"pick_first\"" >
Jan 10 04:37:26 vultr dockerd[45847]: time="2023-01-10T04:37:26.916581613Z" level=info msg="Loading containers: start."
Jan 10 04:37:26 vultr dockerd[45847]: time="2023-01-10T04:37:26.997807510Z" level=info msg="Default bridge (docker0) is assigned with an IP a>
Jan 10 04:37:27 vultr dockerd[45847]: time="2023-01-10T04:37:27.060381720Z" level=info msg="Loading containers: done."
Jan 10 04:37:27 vultr dockerd[45847]: time="2023-01-10T04:37:27.074467014Z" level=info msg="Docker daemon" commit=20.10.12-0ubuntu4 graphdriv>
Jan 10 04:37:27 vultr dockerd[45847]: time="2023-01-10T04:37:27.074649813Z" level=info msg="Daemon has completed initialization"
Jan 10 04:37:27 vultr systemd[1]: Started Docker Application Container Engine.
Jan 10 04:37:27 vultr dockerd[45847]: time="2023-01-10T04:37:27.092699576Z" level=info msg="API listen on /run/docker.sock"

3.3. 安装 Sentry

首先,使用以下命令从 Git 仓库下载最新版本的 Sentry:

1
git clone https://github.com/getsentry/self-hosted.git

下载完成后,将目录改为下载的目录,并运行 Sentry 安装脚本,开始安装。

vi ~/self-hosted/.env

将 event 保留时间修改成 90 天, 默认是 30 天

1
2
COMPOSE_PROJECT_NAME=sentry-self-hosted
SENTRY_EVENT_RETENTION_DAYS=30
1
2
3
4
5
6
7
8
9
10
11
12
cd self-hosted
# 切换到release版本
git checkout 23.10.1
# 安装sentry
# 这里为了避免中间弹出prompt提示创建超级用户,
# 使用skip-user-creation选项跳过了了超级用户创建
# 后续会有单独的步骤创建超级用户
sudo ./install.sh --no-report-self-hosted-issues --skip-user-creation

# 创建超级用户
# 将email替换成你的管理员email, password做相应替换
docker-compose --ansi never run --rm web createuser --force-update --superuser --email user@example.com --password secret

自托管监控

当运行./install.sh 时,您可以选择加入或退出 sentry 官方的监控。此监控用于开发和调试目的,以便我们能够掌握您面临的问题,从而使我们能够提供更加无缝的安装过程。

请注意,从 22.11.0 版本开始,选择是否发送错误将成为强制要求。

在安装过程中,你会被要求创建一个管理员账户,如下图所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
Here's the info we may collect:

- OS username
- IP address
- install log
- runtime errors
- performance data

Thirty (30) day retention. No marketing. Privacy policy at sentry.io/privacy.

Would you like to create a user account now? [Y/n]: y

Email: Email: your_email@xxx.com
Password:
Repeat for confirmation:
Added to organization: sentry
User created: your_email@xxx.com
Creating missing DSNs
Correcting Group.num_comments counter

-----------------------------------------------------------------

You're all done! Run the following command to get Sentry running:

docker-compose up -d

-----------------------------------------------------------------

接下来,使用以下命令验证所有下载的镜像。

1
docker images

你应该看到以下输出。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
REPOSITORY                               TAG             IMAGE ID       CREATED         SIZE
vroom-cleanup-self-hosted-local latest ea9a97a173e4 8 hours ago 119MB
symbolicator-cleanup-self-hosted-local latest ddf3f91711b9 8 hours ago 139MB
sentry-cleanup-self-hosted-local latest 3f649c2adb51 8 hours ago 1.04GB
<none> <none> e6275ee189a4 8 hours ago 1.04GB
<none> <none> ffb03d72b02c 8 hours ago 1.04GB
sentry-self-hosted-local latest 7e021f899f9d 8 hours ago 1.04GB
<none> <none> 7e93f5ff254c 8 hours ago 1.04GB
<none> <none> cfb9b6b7e493 8 hours ago 1.04GB
<none> <none> b25501401a89 8 hours ago 1.04GB
<none> <none> 83f5784ea774 8 hours ago 1.04GB
<none> <none> a25a2fe8d5dd 8 hours ago 1.04GB
<none> <none> 247203428a29 8 hours ago 1.04GB
<none> <none> b317e37159df 8 hours ago 1.04GB
<none> <none> acb9c8ac94a4 8 hours ago 1.04GB
<none> <none> 8798646a9a6e 8 hours ago 1.04GB
<none> <none> eeb84b793191 8 hours ago 1.04GB
<none> <none> 33786daa04f9 8 hours ago 1.04GB
<none> <none> e9207519f5ea 8 hours ago 1.04GB
<none> <none> 5a6bc83fb1d5 8 hours ago 1.04GB
<none> <none> 284a0389a802 8 hours ago 1.04GB
<none> <none> 01822573c6da 8 hours ago 1.04GB
<none> <none> 863ad8d9962c 8 hours ago 1.04GB
sentry-self-hosted-jq-local latest 802ce2121fdc 9 hours ago 76.8MB
getsentry/sentry nightly fab0bb9cf072 17 hours ago 1.04GB
getsentry/relay nightly da690b7dffe9 2 days ago 277MB
getsentry/snuba nightly 58aa2f0ddbd0 2 days ago 1.08GB
getsentry/vroom nightly 4248c1746c67 2 days ago 118MB
debian bookworm-slim 8edcf5b83723 11 days ago 74.8MB
getsentry/symbolicator nightly 29b78918bd5a 2 weeks ago 137MB
nginx 1.25.2-alpine 661daf9bcac8 3 weeks ago 42.6MB
getsentry/sentry-cli latest 329fdf92d508 2 months ago 27.3MB
busybox latest a416a98b71e2 3 months ago 4.26MB
ghcr.io/maxmind/geoipupdate v6.0.0 3fdbd1ffd226 4 months ago 15.5MB
redis 6.2.13-alpine 529fcf955ad4 4 months ago 28MB
memcached 1.6.21-alpine 2db2248e0a53 4 months ago 10.3MB
postgres 14.5 cefd1c9e490c 12 months ago 376MB
tianon/exim4 latest a56a3348ddb1 21 months ago 158MB
clickhouse-self-hosted-local latest 79441da6ab2b 22 months ago 706MB
confluentinc/cp-kafka 5.5.7 b362671f2bc0 22 months ago 737MB
confluentinc/cp-zookeeper 5.5.7 22b646e1afd0 22 months ago 737MB
curlimages/curl 7.77.0 e062233fb4a9 2 years ago 8.26MB

3.4. 启动 Sentry 容器

在这一点上,Sentry 已经安装完毕。现在你可以使用以下命令启动 Sentry 容器:

1
2
3
4
# 启动服务
sudo docker-compose up -d
# 如果需要停止服务, 使用如下命令
sudo docker-compose down

这将启动 Sentry 的所有容器,如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Starting sentry_onpremise_memcached_1            ... done
Starting sentry_onpremise_redis_1 ... done
Starting sentry_onpremise_symbolicator_1 ... done
Creating sentry_onpremise_symbolicator-cleanup_1 ... done
Starting sentry_onpremise_zookeeper_1 ... done
Starting sentry_onpremise_clickhouse_1 ... done
Starting sentry_onpremise_smtp_1 ... done
Starting sentry_onpremise_postgres_1 ... done
Starting sentry_onpremise_kafka_1 ... done
Starting sentry_onpremise_snuba-consumer_1 ... done
Starting sentry_onpremise_snuba-outcomes-consumer_1 ... done
Starting sentry_onpremise_snuba-api_1 ... done
Starting sentry_onpremise_snuba-sessions-consumer_1 ... done
Starting sentry_onpremise_snuba-replacer_1 ... done
Creating sentry_onpremise_snuba-cleanup_1 ... done
Creating sentry_onpremise_relay_1 ... done
Creating sentry_onpremise_web_1 ... done
Creating sentry_onpremise_post-process-forwarder_1 ... done
Creating sentry_onpremise_cron_1 ... done
Creating sentry_onpremise_sentry-cleanup_1 ... done
Creating sentry_onpremise_worker_1 ... done
Creating sentry_onpremise_ingest-consumer_1 ... done
Creating sentry_onpremise_nginx_1 ... done

你可以使用下面的命令验证所有容器的状态。

1
sudo docker-compose ps

访问 Sentry Web UI

此时,Sentry 已经启动,并在 9000 端口上监听。现在,打开你的网页浏览器,输入网址http://your-server-ip:9000,访问 Sentry 仪表板。你将会被转到 Sentry 的登录页面.

4. 准备一个 nginx,并配置 https,将其转发到 sentry 主机的 9000 端口即可

安装 nginx 可以参考我的文章nginx 安装教程

5. 配置 DNS

添加一条新的 DNS A 记录例如 sentry_host.your_domain.com 指向公网 ip

6. 配置 nginx

修改

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
server {
listen 80;
server_name sentry_host.your_domain.com;

rewrite ^(.*)$ https://$host$1 permanent;
}

server {
listen 443;
server_name sentry_host.your_domain.com;
ssl on;
ssl_certificate /etc/nginx/ssl/sentry_host.your_domain.com.pem;
ssl_certificate_key /etc/nginx/ssl/sentry_host.your_domain.com.key;

location /admin {
return 404;
}

location / {
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://sentry_host_ip:9000/;
}
}

7. 如何打扫数据

vi ~/self-hosted/docker-compose.yml

1
2
3
4
5
6
7
8
9
10
11

environment:
PYTHONUSERBASE: "/data/custom-packages"
SENTRY_CONF: "/etc/sentry"
.....
SENTRY_EVENT_RETENTION_DAYS: 7
SENTRY_MAIL_HOST:
SENTRY_MAX_EXTERNAL_SOURCEMAP_SIZE:
# Set this value if you plan on using the Suggested Fix Feature
OPENAI_API_KEY:

重启Sentry

1
sudo docker-compose down & sudo docker-compose up -d

参考: How Sentry is cleaned up correctly

8. troubleshooting

1
2
3
4
RUN echo 'deb http://mirrors.aliyun.com/debian-archive/debian stretch main contrib non-free\n\
deb http://mirrors.aliyun.com/debian-archive/debian stretch-proposed-updates main contrib non-free\n\
deb http://mirrors.aliyun.com/debian-archive/debian-security/ stretch/updates main contrib non-free\n'\
> /etc/apt/sources.list