Sentry 使用日历版本(CalVer)生成版本号,即按照特定时间来发布版本,比如今年是 2022 年,在刚刚过去的 10 月份,他们就发布了 22.10 版本。按照这种方式,很快 22.11 也会发布。
每个版本都会有一些问题修复、新功能添加。而且,作为一个错误管理平台,里面存储数据,很多都跟我们的代码有关,所以我们也很关注它的安全问题。所以,我建议大家及时升级到新版本。
按照 Sentry 的设计,升级其实很简单:
- 下载最新版本:https://github.com/getsentry/self-hosted/releases/
- 解压缩到目标文件夹
- 执行
./install.sh
即可
不过考虑到 清理 Sentry 磁盘占用 时需要安装 pg_repack 插件,这个过程实际要复杂一些。否则,可能会安装失败,到时候,恢复也很麻烦。
升级 Sentry self-hosted 实例
停用 pg_repack
- 进入 sentry 配置目录,对于我来说,就是
~/sentry
- 登录 Postgresql 容器:
sudo docker compose exec postgres bash
- 之前我们已经装过 vim,所以不用再装。否则话,需要先安装一个文本编辑器:
apt update && apt install vim
- 修改配置:
su postgres
cd $PGDATA
vim postgresql.conf
shared_preload_libraries = 'pg_repack'
<– 找到并注释这一句- 保存并退出
wq
- 进入 postgresql shell:
psql postgres
psql postgres
- 执行 SQL:
DROP EXTENSION pg_repack;
更新配置文件
- 下载新版本之后,解压缩到新目录
sentry_new
。 - 备份之前的配置文件,对于我而言,需要备份三个文件:
~/entry/docker-compose.yml
里面关于 Kafka 的配置~/sentry/sentry/config.yml
里的邮箱配置~/sentry/sentry/sentry.conf.py
最后面的其它配置
- 将
sentry_new
复制到原本的sentry
中 - 将备份的配置复制回去
安装新版本
接下来安装新版本:sudo ./install.sh
。
安装脚本会自动停止服务,然后拉新的镜像,然后部署新的容器。这个过程会持续一段时间,与网络状态、机器性能都有关,需要提前做好准备。
这个过程如果断开连接,会出错失败。所以建议用 screen
、tmux
等工具保持进程运行。
安装成功后,正常启动服务即可:sudo docker compose up -d
,然后就可以使用新版本的 Sentry 了。
清理老的镜像和容器
一般来说,这个过程不是很必要,至少不用每次升级都做。为了避免未来的使用问题,可以先留一阵子,我建议最多清理一年前的残留镜像和容器。
(过程方法待补充)
常见更新失败及解决
container for service "postgres" is unhealthy
这就是我前面说到的原因:因为事前在 Postgresql 容器里启动过 pg_repack
插件,升级之后的容器里并没有这个插件,但因为继承了以前的存储卷(Volume),所以启动容器时还是会查找这个插件,因为容器里没有,就挂了。
解决方案是:
- 回滚到之前的版本,其实就是把比老版本配置文件拷回来
- 因为我们并没有清理镜像和容器,所以此时老版本是可以正常启动的
- 不用完全启动,启动 postgresql 即可:
sudo docker compose start postgres
- 然后登入 postgres 容器,执行前面的操作,清理
pg_repack
插件 - 退出并关闭 postgres 容器
- 重复上面的新版本安装过程
总结
作为一名土前端,我对 docker 不太熟悉,对 Kafka、Postgresql 也知之甚少。使用 Sentry 之后,迫不得已必须学习很多新知识,我觉得很有意思。如今我已经尽量使用 Docker Desktop 去使用和管理一些软件,我觉得很方便。接下来好好学习,争取把 Docker 生态的工具也为我所用。
如果你有任何问题、建议,欢迎留言讨论。
欢迎吐槽,共同进步