Sentry 26.10.0 Docker Compose 部署指南

解读 Sentry 26.10.0 官方 Docker Compose 编排:53 个服务的组成分类、端口映射、数据卷清单、资源占用实测与 .env 环境变量逐项说明,附常用编排运维命令。

SentrySentryDockerDockerCompose2026/10/17

Sentry 26.10.0 Docker Compose 部署指南

目标:读懂并掌握 Sentry self-hosted 26.10.0 官方 Docker Compose 编排的结构——53 个服务分别承担什么职责、暴露哪些端口、数据落在哪些数据卷、实际消耗多少资源,以及如何用环境变量控制这套编排。本文所有数字(服务数、端口、卷、内存、磁盘)均来自 26.10.0 实测环境的真实采集。

一、环境信息

  • 操作系统:Ubuntu 22.04(x86_64)
  • Sentry self-hosted:26.10.0(仓库 tag 26.10.0,commit 5f84986)
  • Docker Engine:29.8.1,Docker Compose:v5.5.1
  • 编排文件:self-hosted 仓库根目录 docker-compose.yml(单文件定义全部 53 个服务)
  • 项目名:sentry-self-hosted(.env 中 COMPOSE_PROJECT_NAME,所有服务、数据卷、网络以此为前缀)
  • 实测运行状态:53 个服务全部 healthy(docker compose ps 统计)
  • 管理员账号:admin@sentry.local / q1w2e3r4(本文演示账号)

💡 说明:Sentry 的 Docker Compose 不是「单机玩具」,它本身就是官方唯一的生产部署形态。理解这份编排文件,等于理解 Sentry 的完整运行架构:数据从 nginx/relay 接入,经 Kafka 消费链落进 ClickHouse(事件库)与 PostgreSQL(元数据库),后台由 taskbroker/各消费器异步处理。

二、镜像选型说明

self-hosted 26.10.0 编排引用的组件镜像全部为固定版本(.env 中以变量声明),初装实测拉取的镜像清单如下(docker images 输出):

镜像版本(tag)实测大小用途
ghcr.io/getsentry/sentry26.10.0约 1.1 GBSentry 主程序(web/taskworker/各消费器共用基础镜像)
ghcr.io/getsentry/snuba26.10.0约 800 MBSnuba 数据流服务(事件/指标/会话等,对接 ClickHouse)
ghcr.io/getsentry/relay26.10.0约 180 MBRelay 事件代理与净化层
ghcr.io/getsentry/symbolicator26.10.0约 200 MB符号化服务(崩溃堆栈还原)
ghcr.io/getsentry/taskbroker26.10.0约 200 MB后台任务队列(替代旧版 worker)
ghcr.io/getsentry/vroom26.10.0约 180 MB性能剖析(Profiling)服务
ghcr.io/getsentry/uptime-checker26.10.0约 200 MBUptime 拨测服务
ghcr.io/getsentry/launchpad26.10.0约 130 MBLaunchpad 源码接入辅助服务
clickhouse-self-hosted-local26.10.0约 630 MBClickHouse(基于 altinity/clickhouse-server:25.8.28.10001.altinitystable 本地构建)
sentry-self-hosted-local26.10.02.06 GB主程序本地构建镜像(叠加系统依赖与证书)
sentry-cleanup-self-hosted-local26.10.02.04 GB定期清理任务镜像
postgres18.6-trixie650 MBPostgreSQL 元数据库
confluentinc/cp-kafka7.6.141.91 GBKafka 消息队列
valkey/valkey8.1.10-alpine61.6 MB缓存与队列(Redis 兼容协议的 Valkey 分支)
memcached1.6.45-alpine32.6 MB缓存
edoburu/pgbouncerv1.26.0-p033.9 MBPostgreSQL 连接池
nginx1.31.6-alpine94.4 MB反向代理入口
chrislusf/seaweedfs3.80约 120 MB对象存储(事件原始数据/文件存储)
registry.gitlab.com/egos-tech/smtplatest约 50 MB内置 Exim4 邮件中继
对比项用官方锁定版本变量自行改镜像 tag
兼容性官方联调过的组合可能出现数据库迁移不匹配
升级跟随 self-hosted 发版节奏自行负责验证
建议默认保持仅在安全修复时精确升级单镜像

关键差异:.env 中每个镜像都有独立版本变量(SENTRY_IMAGE、SNUBA_IMAGE 等),官方发版时会同步更新全部变量保持组合兼容,自行改动需自行承担联调验证。

三、前置条件

  • 已按《Sentry 26.10.0 Ubuntu 22.04 安装指南》安装 Docker Engine 与 Docker Compose。
  • 硬件满足:14 GB 内存 / 4 核(errors-only 模式 7 GB / 2 核,见第十章)。
  • 磁盘可用空间 50 GB 以上(初装组件镜像约 8 GB + 数据卷约 110 MB,随事件量增长)。
  • 服务器可访问 GitHub 与 ghcr.io(或按安装指南方案 B 先备齐镜像)。

四、部署步骤

部署入口与安装指南一致,这里给出面向编排管理的最小序列(详细安装排障见安装指南第四章):

git clone --depth 1 --branch 26.10.0 https://github.com/getsentry/self-hosted.git sentry
cd sentry
./install.sh --skip-user-creation --no-report-self-hosted-issues
docker compose up --wait

实测启动完成状态:

docker compose ps --format '{{.Service}}' | wc -l
docker compose ps | grep -c "Up"

实测回显:

53
53

五、服务组成详解

26.10.0 的 docker-compose.yml 共定义 53 个服务,全部为「只暴露内部网络、仅 nginx 对外」的结构。按职责分类如下(实测 docker compose config --services 全量清单):

5.1 接入层(用户流量与事件入口)

服务数量职责
nginx1反向代理入口,发布对外端口(SENTRY_BIND→80),承载 Web UI 与 SDK 事件上报
relay1事件代理:DSN 校验、载荷净化、限流缓冲后再进入 Kafka
web1Django Web 应用,承载 UI 与 REST API
launchpad-taskworker1Launchpad 接入向导的后台任务

5.2 存储层(基础设施)

服务数量职责
postgres1元数据库(项目、用户、Issue 元数据等)
pgbouncer1PostgreSQL 连接池,web/taskworker 通过它连库
redis1Valkey 实例:缓存、会话、任务队列状态
memcached1通用缓存加速
kafka1Kafka 消息总线,事件数据管道核心
clickhouse1ClickHouse 列式库:事件、性能、指标明细存储
seaweedfs1对象存储:事件原始附件、剖析数据、符号文件
smtp1内置 Exim4 邮件中继(出站邮件)

5.3 Snuba 数据流系列(14 个)

服务职责
snuba-apiSnuba 查询 API,web 查询事件的唯一入口
snuba-errors-consumer / snuba-transactions-consumer / snuba-metrics-consumer / snuba-eap-items-consumer 等从 Kafka 消费各类事件写入 ClickHouse
snuba-outcomes-consumer / snuba-outcomes-accepted-consumer / snuba-outcomes-billing-consumer事件接受/拒绝统计与计费口径数据
snuba-issue-occurrence-consumer / snuba-group-attributes-consumer / snuba-replays-consumer / snuba-profiling-* (3 个)会话回放、剖析、问题产生等数据链消费
snuba-subscription-consumer-events / -transactions / -metrics / -eap-items(4 个)订阅查询消费者(支撑告警规则实时评估)
snuba-replacer数据替换服务(隐私字段处理)

5.4 事件摄取消费器(7 个)

服务职责
ingest-occurrences / ingest-monitors / ingest-feedback-events问题产生/监控项/用户反馈摄取
attachments-consumer / events-consumer / transactions-consumer / metrics-consumer附件与事件主链路消费

5.5 后台处理链(5 个)

服务职责
post-process-forwarder-errors / -issue-platform / -transactions(3 个)事件后处理:分组、标记、通知触发
process-spans性能跨度预处理

5.6 任务与调度(3 个)

服务职责
taskbroker后台任务队列代理(26.x 新架构,取代旧版 worker)
taskworker后台任务执行器(并发数由 SENTRY_TASKWORKER_CONCURRENCY 控制)
taskscheduler任务调度器(周期任务投递)

5.7 辅助与维护(5 个)

服务职责
symbolicator / symbolicator-cleanup符号化与符号缓存清理
vroomProfiling 数据处理
uptime-checker / uptime-resultsUptime 拨测与结果回写
monitors-clock-tick / monitors-clock-tasks(2 个)监控项(Cron 检测)时钟驱动

5.8 清理任务(3 个)

服务职责
sentry-cleanup每日定时清理过期事件(按 SENTRY_EVENT_RETENTION_DAYS)
snuba-cleanup(随 errors-only 之外默认启用)Snuba/ClickHouse 过期数据清理
snuba-subscription-consumer-*(含在 5.3 计数内)—

💡 说明:以上分类合计即 53 个服务。docker compose config --services | sort 输出(实测): attachments-consumer clickhouse events-consumer ingest-feedback-events ingest-monitors ingest-occurrences kafka launchpad-taskworker memcached metrics-consumer monitors-clock-tasks monitors-clock-tick nginx pgbouncer post-process-forwarder-errors post-process-forwarder-issue-platform post-process-forwarder-transactions postgres process-spans redis relay seaweedfs sentry-cleanup smtp snuba-api snuba-eap-items-consumer snuba-errors-consumer snuba-group-attributes-consumer snuba-issue-occurrence-consumer snuba-metrics-consumer snuba-outcomes-accepted-consumer snuba-outcomes-billing-consumer snuba-outcomes-consumer snuba-profiling-functions-consumer snuba-profiling-profile-chunks-consumer snuba-profiling-profiles-consumer snuba-replacer snuba-replays-consumer snuba-subscription-consumer-eap-items snuba-subscription-consumer-events snuba-subscription-consumer-metrics snuba-subscription-consumer-transactions snuba-transactions-consumer symbolicator symbolicator-cleanup taskbroker taskscheduler taskworker transactions-consumer uptime-checker uptime-results vroom web

⚠️ 注意:26.10.0 已没有名为 worker 的服务(旧版后台任务服务)。重启后台任务要用 taskworker/taskbroker/taskscheduler,写惯老版本运维脚本的同学需要更新命令(实测 docker compose restart worker 报错 no such service: worker)。

六、端口说明

6.1 对外端口

整个编排只发布一个对外端口(nginx),其余 52 个服务全部仅在内网互通:

docker port sentry-self-hosted-nginx-1

实测回显:

80/tcp -> 0.0.0.0:9000
80/tcp -> [::]:9000

nginx 把宿主机 9000 端口映射到其 80 端口,映射规则写在 docker-compose.yml:"${SENTRY_BIND}:80"。

6.2 内部端口速查(实测 compose 配置)

服务端口协议
web9000HTTP
relay3000HTTP
snuba-api1218HTTP
symbolicator3021HTTP
vroom8085HTTP
taskbroker3902gRPC
postgres / pgbouncer5432TCP
redis6379TCP
kafka9092TCP
clickhouse9000(内部)TCP/HTTP
seaweedfs8333(S3 API)HTTP
smtp25SMTP

6.3 修改对外端口实测

sed -i 's/^SENTRY_BIND=9000/SENTRY_BIND=9001/' .env
docker compose up -d
docker port sentry-self-hosted-nginx-1
curl -s -o /dev/null -w '%{http_code}\n' http://127.0.0.1:9001/auth/login/

实测回显:

 Container sentry-self-hosted-nginx-1  Recreate
 Container sentry-self-hosted-nginx-1  Started
80/tcp -> 0.0.0.0:9001
80/tcp -> [::]:9001
200

改回 SENTRY_BIND=9000 再执行 docker compose up -d 即还原(实测同样只重建 nginx,秒级完成)。

七、数据卷说明

7.1 数据卷清单

编排共声明 16 个数据卷(实测 docker volume ls),前缀均为项目名 sentry-self-hosted_:

数据卷挂载点(服务内)用途
sentry-data/dataSentry 主数据目录(文件存储挂载点)
sentry-postgres/var/lib/postgresql/dataPostgreSQL 全部元数据
sentry-redis/dataValkey 持久化
sentry-kafka/var/lib/kafka/dataKafka 消息日志
sentry-clickhouse/var/lib/clickhouseClickHouse 事件明细数据
sentry-seaweedfs/data对象存储(原始事件/附件/剖析数据)
sentry-symbolicator/data符号文件缓存
sentry-vroom/data剖析数据处理目录
sentry-taskbroker/data任务队列持久化
sentry-relay-cache/work (relay)Relay 缓冲与凭证
sentry-smtp/var/spool/exim4邮件队列(实测投递失败会冻结在这里)
sentry-geoip/geoipGeoIP 离线库
sentry-certificates/usr/local/share/ca-certificates自定义 CA 证书
sentry-nginx-cache 等—剩余为运行时缓存卷

7.2 初装磁盘占用实测

du -sh /var/lib/docker/volumes/sentry-self-hosted_* | sort -rh | head -8

实测回显(初装完成后约 15 分钟,已写入少量测试事件):

104.2M  /var/lib/docker/volumes/sentry-self-hosted_postgres
5.2M    /var/lib/docker/volumes/sentry-self-hosted_clickhouse
2.9M    /var/lib/docker/volumes/sentry-self-hosted_taskbroker
2.2M    /var/lib/docker/volumes/sentry-self-hosted_kafka
276.4M  /var/lib/docker/volumes/sentry-self-hosted_vroom
1.5M    /var/lib/docker/volumes/sentry-self-hosted_symbolicator
1.4M    /var/lib/docker/volumes/sentry-self-hosted_seaweedfs
1.1M    /var/lib/docker/volumes/sentry-self-hosted_sentry-data

初装总体很小(约 400 MB 级),磁盘大头在组件镜像(约 8 GB)与后续事件增长量(ClickHouse/Kafka/SeaweedFS)。

7.3 备份视角

  • 必备份卷:sentry-postgres(全部元数据)、sentry-clickhouse、sentry-kafka、sentry-seaweedfs(原始事件)。
  • PostgreSQL 建议用 pg_dump 逻辑备份而非直接拷贝卷(实例运行中拷贝数据目录有崩溃风险),方法见《Sentry 26.10.0 进阶实战与运维》。

八、资源要求与实测占用

8.1 官方资源校验线

install.sh 实测校验(不达标直接退出):

配置模式内存下限CPU 下限
默认(feature-complete)14000 MB4 核
errors-only7000 MB2 核

8.2 实测内存占用

12 核 / 42 GB 内存宿主机,全栈稳定运行后 docker stats --no-stream 实测(内存占用前 15 名):

sentry-self-hosted-taskworker-1         1.337GiB / 31.42GiB   1.51%
sentry-self-hosted-web-1                927.6MiB / 31.42GiB   0.75%
sentry-self-hosted-kafka-1              606.1MiB / 31.42GiB   0.62%
sentry-self-hosted-clickhouse-1         272.4MiB / 31.42GiB   0.68%
sentry-self-hosted-postgres-1           162.1MiB / 31.42GiB   0.00%
sentry-self-hosted-vroom-1              134.9MiB / 31.42GiB   0.75%
sentry-self-hosted-snuba-transactions-consumer-1  87.2MiB / 31.42GiB  0.14%
sentry-self-hosted-snuba-api-1          82.5MiB / 31.42GiB    0.11%
sentry-self-hosted-relay-1              62.9MiB / 31.42GiB    0.05%
sentry-self-hosted-snuba-subscription-consumer-transactions-1  54.6MiB  0.14%
sentry-self-hosted-uptime-checker-1     53.9MiB / 31.42GiB    0.10%
sentry-self-hosted-snuba-subscription-consumer-eap-items-1  49.8MiB  0.13%
sentry-self-hosted-ingest-monitors-1    49.1MiB / 31.42GiB    0.13%
sentry-self-hosted-snuba-errors-consumer-1  48.7MiB / 31.42GiB  0.16%
sentry-self-hosted-taskbroker-1         46.6MiB / 31.42GiB    0.04%

53 个服务合计实测 14.9 GiB——与官方 14 GB 下限吻合,即官方要求是按实际占用反推的。规划生产资源时建议至少 16 GB 内存留出增长空间。

8.3 各档资源配置建议

场景内存CPU磁盘说明
体验/演示14 GB4 核50 GB官方下限,仅小流量验证
小团队生产(errors-only)8 GB2 核50 GB裁掉性能/Uptime 功能
中小团队生产(全量)16 GB8 核200 GB月百万级事件规模
大规模32 GB+16 核+1 TB+Kafka/ClickHouse 可扩为多节点集群(需改造 compose)

九、环境变量(.env)逐项说明

安装脚本从样例生成的 .env(实测内容):

COMPOSE_PROJECT_NAME=sentry-self-hosted
COMPOSE_PROFILES=feature-complete
SENTRY_EVENT_RETENTION_DAYS=90
LAUNCHPAD_RPC_SHARED_SECRET=supersecret
SENTRY_BIND=9000
SENTRY_TASKWORKER_CONCURRENCY=4
SENTRY_IMAGE=ghcr.io/getsentry/sentry:26.10.0
SNUBA_IMAGE=ghcr.io/getsentry/snuba:26.10.0
RELAY_IMAGE=ghcr.io/getsentry/relay:26.10.0
SYMBOLICATOR_IMAGE=ghcr.io/getsentry/symbolicator:26.10.0
TASKBROKER_IMAGE=ghcr.io/getsentry/taskbroker:26.10.0
VROOM_IMAGE=ghcr.io/getsentry/vroom:26.10.0
UPTIME_CHECKER_IMAGE=ghcr.io/getsentry/uptime-checker:26.10.0
LAUNCHPAD_IMAGE=ghcr.io/getsentry/launchpad:26.10.0
HEALTHCHECK_INTERVAL=60s
HEALTHCHECK_TIMEOUT=10s
HEALTHCHECK_RETRIES=10
HEALTHCHECK_START_PERIOD=40s
SENTRY_KAFKA_MAX_POLL_INTERVAL_MS=120000
SENTRY_MAIL_HOST=
STATSD_ADDR=

逐项说明:

变量默认值说明
COMPOSE_PROJECT_NAMEsentry-self-hosted编排项目名,决定服务/网络/数据卷前缀
COMPOSE_PROFILESfeature-complete功能档位,可选 errors-only 仅错误监控
SENTRY_EVENT_RETENTION_DAYS90事件保留天数,清理任务据此删除过期数据
LAUNCHPAD_RPC_SHARED_SECRET安装时生成Launchpad 内部 RPC 共享密钥
SENTRY_BIND9000对外端口(nginx 发布端口),改动需 docker compose up -d 重建
SENTRY_TASKWORKER_CONCURRENCY4taskworker 执行并发数,内存紧张可调小
SENTRY_IMAGE 等 7 个镜像变量对应版本 tag锁定组件镜像版本,升级时由官方同步更新
HEALTHCHECK_INTERVAL 等 4 项60s/10s/10/40s全部服务的健康检查节奏
SENTRY_KAFKA_MAX_POLL_INTERVAL_MS120000Kafka 消费者最大轮询间隔,低配机器消费不过来时可调大
SENTRY_MAIL_HOST空出站邮件的 HELO 域名(对应 mail.from),空则邮件中继拒收
STATSD_ADDR空统计指标上报地址(如 127.0.0.1:8125),空则关闭

十、配置文件挂载与功能档位

10.1 挂载进服务的数据

docker-compose.yml 为 web/taskworker 等服务挂载了仓库内 5 个目录/文件,编排与配置解耦:

仓库内路径挂载点用途
sentry/config.yml/etc/sentry/config.ymlSentry 新式选项(邮件、URL 前缀等,YAML)
sentry/sentry.conf.py/etc/sentry/sentry.conf.pyDjango 层配置(数据库连接等,Python)
relay/config.yml/work/config.ymlRelay 代理配置
symbolicator/config.yml/etc/symbolicator/config.yml符号化配置
certificates//usr/local/share/ca-certificates私有 CA 证书(企业代理环境)
geoip//geoipGeoIP 离线库
uds//var/run/sentryRelay 与 web 的域套接字

10.2 errors-only 功能档位

资源受限或只需要错误追踪时,编辑 .env:

COMPOSE_PROFILES=errors-only

然后重新拉起编排。效果(官方设计 + 实测校验脚本数据):裁掉 profiling(vroom)、Uptime(uptime-checker/uptime-results)、monitors 时钟等非错误链路服务,服务数量大幅减少,内存下限从 14 GB 降到 7 GB。与全量模式的对比见第二章与第八章。

十一、常用编排命令

cd /root/sentry
docker compose ps                     # 查看全部服务状态
docker compose logs --tail=50 web     # 看某个服务最近日志
docker compose logs -f taskworker     # 实时跟踪后台任务日志
docker compose restart web            # 重启单服务(依赖 nginx 会一并重启)
docker compose stop                   # 全部停止(保留数据卷)
docker compose up -d                  # 全部启动/应用配置变更
docker compose down                   # 停止并删除网络(数据卷保留)
docker compose down --volumes         # 彻底删除(含数据卷,不可恢复!)

实测 docker compose restart web 回显(输出节选):

 Container sentry-self-hosted-web-1  Restarting
 Container sentry-self-hosted-web-1  Started
 Container sentry-self-hosted-nginx-1  Restarting
 Container sentry-self-hosted-nginx-1  Started

实测 down 后 up -d 重启(输出节选):

===DOWN===
 Container sentry-self-hosted-symbolicator-1 Removed
 Network sentry-self-hosted_default Removing
 Network sentry-self-hosted_default Removed
===UP===
 Container sentry-self-hosted-nginx-1 Starting
 Container sentry-self-hosted-nginx-1 Started

重启后验证数据完好(实测):

web-after-restart HTTP 200
groups-still: 4

十二、常见问题(FAQ)

Q1:docker compose restart worker 报 no such service: worker? 26.10.0 后台任务架构改为 taskbroker/taskworker/taskscheduler,老版 worker 服务已移除。按职责分别重启 taskworker、taskbroker、taskscheduler 或各 ingest-*/post-process-forwarder-* 服务。

Q2:为什么只有 9000 一个对外端口?需要暴露 Kafka/ClickHouse 给外部吗? 不需要,也不建议。事件上报与 UI 都走 nginx 入口;Kafka/ClickHouse 是内部数据管道,直接暴露有安全风险。如果要做集群化拆分,官方部署形态仍以单 compose 为基线,多节点需自行拆分网络规划。

Q3:内存不够,能不能只跑一部分服务? 可以,用 errors-only 档位(COMPOSE_PROFILES=errors-only),下限 7 GB。不建议手工注释服务——会导致事件管线断链且升级时合并困难。

Q4:某服务一直 unhealthy 怎么定位?

docker compose ps | grep -v healthy
docker compose logs --tail=100 <服务名>

常见原因:内存不足被 OOM(dmesg | grep -i oom)、Kafka 未就绪导致消费器反复重连(启动初期属正常,等健康检查通过即可)。

Q5:改了 .env / config.yml 后没生效? .env 改动需 docker compose up -d(部分变量如镜像 tag 会触发重建);sentry/config.yml 与 sentry/sentry.conf.py 是挂载进服务进程的,需 docker compose restart web taskworker(或涉及到的服务)重载进程才生效。

十三、参考链接