Caution
This version upgrades Postgres 14 to 18. If you are very concerned about your data, make sure to take a snapshot of your server before upgrading!
Postgres 18 Upgrade
We've finally moved off our very old Postgres 14 and onto Postgres 18. This upgrade includes a breaking change in how Postgres data is stored. See docker-library/postgres#1259 for the details.
If you ever encountered a problem, come to Discord for direct help.
Going Distroless
Distroless images are even more minimal (in terms of image size and included packages) than debian:slim, and in some cases than Alpine. They contain only the application and its runtime dependencies, with no OS shell or package manager. That leaves far less to flag when you scan with Trivy or similar tools. They’re also smaller, which means faster image downloads and less disk space used on your host.
Sentry's RFC process is how this work got started. Alex, our security engineer, submitted an RFC for distroless, and the changes below follow from it:
- Sentry runs as the
sentryuser directly. Containers no longer start as root and drop privileges throughgosu. This removes a moving part, and there's no root process to worry about (self-hosted#4535). - Sentry and Snuba share a healthcheck approach. Both now use a Python script for healthchecks (self-hosted#4539). We've confirmed these work on our self-hosted-lol setup, as shown here.
- The base image moved from Debian 12 to Debian 13 (sentry#126031). The size and CVE comparison between the two is in the PR comments.
- We started building a
-distrolessimage variant (sentry#126030). For a comparison against the standard Debian 13 image, see this comment.
We ran a quick test of the distroless variant from a throwaway branch. That branch sidestepped a few minor bash entrypoint issues we haven’t settled on yet, and the run itself had no problems. The distroless sentry image isn’t the default yet, so you’ll need to opt in via :nightly-distroless to use it.
Here’s where each service stands:
- Relay and Symbolicator: distroless since 2025.
- Snuba: distroless.
- Vroom: distroless starting with the next release, 26.11.0.
- Launchpad, Taskbroker, Uptime-checker, and Sentry: in progress.
Experimental Features to Try
organizations:attribute-managementenables the Settings > Attributes browser and editor page.organizations:relay-automatic-json-expansionandorganizations:explore-automatic-json-expansion-uicontrol the expansion config. The flag names don't say much, but they let you expand JSON logs, which is worth a look.
Other Notable Things
- The login page has a new design. Enjoy it.
- Log search now supports regular expressions. See the changelog entry.
- We no longer build the
jqimage ourselves. We use the official one now (self-hosted#4547). - Breaking change: Vroom's
SENTRY_BUCKET_PROFILEShas changed. If you use external storage (S3-compatible or GCS), update your configuration before upgrading.
We're always happy to chat about setups, upgrades, or whatever's giving you trouble. Come find us on Discord.
New Features ✨
- (ci) Replace Codecov with Coverage Action by @aldy505 in #4530
- Use prebuilt jqlang/jq image by @aldy505 in #4547
Bug Fixes 🐛
Vroom
- Breaking change on SENTRY_BUCKET_PROFILES by @aldy505 in #4555
- Run the healthcheck without a shell by @oioki in #4534
Other
- (external-kafka) Refresh patches so they apply to master again by @oioki in #4553
- (healthcheck) Let Docker enforce HEALTHCHECK_TIMEOUT in check_http.py by @oioki in #4546
- (seaweedfs) Use compose mounts in migrate by @aminvakil in #4531
- (tests) Expect React login page in integration tests by @oioki in #4551
Documentation 📚
Internal Changes 🔧
Deps
- Bump edoburu/pgbouncer from v1.25.2-p0 to v1.26.0-p0 by @dependabot in #4549
- Bump postgres 18 by @aminvakil in #4538
- Bump astral-sh/setup-uv from 10.1.0 to 10.2.0 by @dependabot in #4533
- Bump astral-sh/setup-uv from 10.0.1 to 10.1.0 by @dependabot in #4509
- Bump anyio from 4.11.0 to 4.14.2 by @dependabot in #4523
- Bump soupsieve from 2.8.4 to 2.9 by @dependabot in #4522
- Bump confluentinc/cp-kafka from 7.6.13 to 7.6.14 by @dependabot in #4519
- Bump nginx from 1.31.5-alpine to 1.31.6-alpine by @dependabot in #4517
Sentry
- Exec the sentry image's Python entrypoint by @oioki in #4536
- Prepare for a non-root sentry image by @oioki in #4535
Other
- (healthcheck) Share one python3 HTTP healthcheck for sentry web and snuba api by @oioki in #4539
- (install) Read the JS SDK loader registry with json.tool instead of cat by @oioki in #4540
- (integration) Check the enhance-image marker with python instead of bash by @oioki in #4541
- (profiles) Drop the sentry-vroom volume migration by @oioki in #4552
- (vroom) Remove ensure-correct-permissions-profiles-dir.sh by @oioki in #4554
Other
- Migrate fast-revert workflow to GitHub App token by @joshuarli in #4497