Releases: getsentry/self-hosted
25.10.0
TL;DR: Symbolicator migrated to distroless images for better security. We've completed the Celery replacement by removing cron and worker containers, and consolidated Snuba consumers into the Event Analytics Platform dataset. No configuration changes required.
Symbolicator Now Uses Distroless Images
We've migrated Symbolicator from Debian to distroless base images. These streamlined containers strip away unnecessary components like package managers, shells, and other OS distribution elements – enhancing security by reducing the attack surface.
Container Consolidation & Dataset Migration
Following last month's announcement, we've now removed the cron and worker containers entirely – taskbroker and taskworker handle everything. We've published comprehensive scaling documentation to help you optimize these services for your workload.
We've also retired the snuba-spans consumer in favor of three focused replacements: process-spans, process-segments, and snuba-eap-items-consumer. This consolidation routes most products (errors, spans, uptime monitoring, and logs) into the Event Analytics Platform (EAP) dataset – making cross-product correlation faster and more efficient.
Other Notable Changes
- Reference architectures: We've added a new Reference Architectures section to the documentation to help you plan and scale your deployment.
- Enhanced data scrubbing: Relay now automatically scrubs
otpandtwo_factoras sensitive values (PR #5250). - Trace waterfall cleanup: We've removed the "No instrumentation" placeholder from trace waterfalls (PR #101408).
- Pre-release features: Looking to experiment? Check out Native OTLP Ingestion (#3830) and Trace Metrics (#3993) – both available for early testing on self-hosted instances.
Questions or need to discuss these changes? Join us on Sentry's Discord! We're always happy to help and discuss your setup.
Various fixes & improvements
- fix: geoip standalone script should check on CONTAINER_ENGINE variable first (#3982) by @aldy505
- fix: missing
-dirflag for seaweedfs (#3991) by @aldy505 - Remove symbolicator volume once (#3994) by @aminvakil
- Remove symbolicator external volume (#3992) by @aminvakil
- chore(spans): Remove old snuba-spans consumer (#3989) by @jjbayer
- Bump redis 6.2.20-alpine (#3988) by @aminvakil
- ref: add
continue-on-errorfor codecov action on self-hosted integration tests (#3978) by @aldy505 - ref: use dedicated
healthcheckcommand for symbolicator & remove cron forsymbolicator-cleanup(#3979) by @aldy505 - fix(actions): include arch and compose_profiles information on cache keys (#3974) by @aldy505
- ref: Remove proxy_next_upstream directives (#3973) by @aminvakil
- fix: Unset the proxy when performing the seaweedfs health check (#3959) by @SteppingHat
- fix: logic error in s3 install script (#3965) by @kodebach
- Fix swap allocation in integration test (#3972) by @aminvakil
- chore(tasks) Remove reference to celery (#3962) by @markstory
- Respect uppercase proxy variables (#3949) by @aminvakil
- chore(tasks): Remove the worker and cron containers (#3946) by @markstory
- fix: install behind a proxy (#3944) by @moroine
25.9.0
Caution
Skip this, and go straight to 25.10.0 instead!
Logs is Now Available for Self-Hosted! 🪵🪵
Logs is now available for self-hosted deployments! To properly enable it on your instance, you'll need to update your sentry.conf.py to match the example one – this step is essential for functionality.
ClickHouse Upgrade to 25.3
We've upgraded ClickHouse to 25.3, which should resolve that persistent connection closed prematurely error from Snuba consumers. We've confirmed it was a ClickHouse issue rather than Snuba's. As a standard precaution, please ensure you back up your server before upgrading – it's always the right move.
Updated Memory Requirements
We've had to increase the minimum requirements to 16 GB of swap file. That brings us to 32 GB total memory (16 GB physical RAM + 16 GB swap). If you're handling significant traffic though, you're likely already running well above these specifications.
PGBouncer Integration
We've integrated PGBouncer into the Docker Compose stack to better manage Postgres connections. The install script will handle your sentry.conf.py updates automatically. For non-interactive-TTY users, please set the environment variable SKIP_USER_PROMPT=1.
SeaweedFS for Nodestore (Opt-in)
We're introducing SeaweedFS with its S3-compatible API for storing Nodestore data. This is opt-in, and you'll see a prompt during installation, similar to PGBouncer.
For context: Nodestore manages raw events data, which can become substantial with high event volumes. Previously, self-hosted deployments stored this in Postgres (which we acknowledge wasn't ideal), while SaaS uses Google BigTable. We believe SeaweedFS provides a practical middle-ground solution.
Good news: you won't lose your existing event details from Postgres until the retention period passes, and there's no need to migrate your Nodestore data from Postgres to S3. We've included write_through, read_through, and delete_through options for passing operations to Nodestore data in Postgres – these default to True for new installations. After 90 days, we recommend setting these options to False. Learn more: https://github.com/stayallive/sentry-nodestore-s3#installation
Enhanced Security Defaults
SENTRY_DISALLOWED_IPS in sentry.conf.py now includes more secure defaults. This enhancement prevents Sentry from making outbound connections to private/internal IPs in integration and webhook requests. If your integrations or webhooks require access to internal addresses, you can safely override this setting.
Taskbroker & Taskworker Replace Celery
Taskbroker & taskworker are now enabled to replace Celery – eliminating the outdated RabbitMQ and reducing Redis memory consumption. Please remove any options disabling taskbroker in your sentry.conf.py. Next month, we'll be retiring the cron and worker containers as planned.
Other Notable Changes
- New feature flags: We've added several new feature flags to
sentry.conf.example.py– please ensure these are included in yoursentry.conf.py. Some of these flags indicate we're transitioning the Insights page to use theeapdataset instead of the legacymetricsdataset. - Air-gapped support: For air-gapped environments, please add
SENTRY_AIR_GAP = Trueto yoursentry.conf.pyconfiguration. This ensures no unwanted outgoing HTTP calls are made to external services. - Vroom script fix: We've corrected an oversight in the Vroom
chmodscript that affected errors-only users. We've now properly addederrors-onlyto the integration test matrix for both AMD64 and ARM64, ensuring full coverage going forward. - Dependency updates: We've updated patch versions for self-hosted dependencies (Postgres, Redis, and Kafka). Nginx received a minor version bump to the latest stable release, which maintains full compatibility.
Questions or need to discuss these changes? Join us on Sentry's Discord! We're always happy to help and discuss your setup.
Various fixes & improvements
- fix: able to setup nodestore multiple times (#3940) by @aldy505
- build(deps): bump actions/create-github-app-token from 2.1.1 to 2.1.4 (#3936) by @dependabot
- docs: provide information for SENTRY_AIR_GAP flag on Django config file (#3935) by @aldy505
- feat: Use S3 node store with seaweedfs (#3498) by @BYK
- feat(tasks): Remove taskworker option override and add worker healthcheck (#3933) by @markstory
- feat: install script to migrate sentry.conf.py config to use pgbouncer (#3898) by @aldy505
- chore(deps): bump clickhouse to 25.3 (#3878) by @aldy505
- feat: enable
issue-viewsflag (#3922) by @aldy505 - feat: query against
eapdataset instead ofmetricsdataset for spans (#3923) by @aldy505 - build(deps): bump actions/setup-python from 5 to 6 (#3927) by @dependabot
- Add restart policy to pgbouncer service (#3925) by @frederikspang
- fix(tests): skip logs event test for errors-only (#3915) by @aldy505
- Improve nginx depends_on policy (#3914) by @aminvakil
- test: run errors-only integration tests (#3910) by @aldy505
- feat: enable Logs feature (#3912) by @aldy505
- fix: ensuring vroom permission should be skipped on errors-only (#3911) by @aldy505
- chore(deps): bump patches version (#3879) by @aldy505
- Revert "increase postgres max_connections above 100 connections (#2740)" (#3899) by @aminvakil
- Add pgbouncer (#3884) by @frederikspang
- chore: resolve GHA code scanning alerts (#3889) by @aldy505
- fix(enhancement): search for permissions on docker container instead of host and combine it in one command for performance enhancement (#3890) by @LvckyAPI
- build(deps): bump actions/create-github-app-token from 2.1.0 to 2.1.1 (#3885) by @dependabot
- build(deps): bump actions/checkout from 4 to 5 (#3883) by @dependabot
25.8.0
Important
If you have .env.custom or other custom .env files, make sure to adjust your image value to ghcr.io/getsentry/{project} instead of getsentry/{project}. We're no longer publishing Docker images to DockerHub and will be moving to GitHub Container Registry.
We're excited to see so many new contributors bringing their excellent work to this release! Here's what's new:
Default Disallowed IPs
SENTRY_DISALLOWED_IPS defaults will be changed in the next self-hosted release. These defaults are commented out right now here: getsentry/sentry@4c4eec3, but will be adopted in 25.9.0.
Podman support
We finally addressed that 5 years old issue requesting Podman support. Since podman compose has become quite compatible with docker compose, we decided it was time to make this happen. To use it, simply run the install script with CONTAINER_ENGINE_PODMAN=1 ./install.sh. If you successfully get self-hosted Sentry running with Podman, we'd love to hear about it on our Discord!
Healthchecks for Sentry containers
Previously, only databases and web containers had healthchecks, which wasn't ideal. We've now added healthchecks to most containers, so you can easily spot which ones are having issues without digging through logs one by one. Just make sure your docker-compose.yml is updated to take advantage of this improvement.
Various configuration changes
We made several configuration changes that should improve your experience. In docker-compose.yml, we added some missing containers related to snuba-subscriptions-generic-metrics, which fixes the issue where metrics alerts weren't triggering properly (see issue #3838).
In sentry.conf.py, we reorganized the feature flags and added the missing organizations:profiling-view flag to ensure profiling works correctly in the web UI. One important change: make sure you have SENTRY_OPTIONS["taskworker.enabled"] = False so your jobs continue running on Celery. We're planning to transition to Taskbroker next month, which will also remove the cron and worker containers, reducing the load on Redis (or RabbitMQ) queues.
Other notable changes
- We bumped the minimum bash version to 4.4.0. If you're running CentOS 7, you'll need to either upgrade your distribution or upgrade bash (though the latter is more challenging).
- The
chowncommand for thesentry-vroomvolume used to take an unnecessarily long time. We've optimized it to check ownership first before executing the command, making it much faster. - New available preview feature: Native OTLP ingestion! See issue #3830.
- The sentry image is no longer being published on DockerHub. As mentioned in release notes for 25.7.0, we're going to remove workflows to push images to DockerHub in the upcoming months.
For questions or discussion about these changes, join us on Sentry's Discord! We're always happy to chat.
Various fixes & improvements
- feat: Relay healthcheck (#3875) by @aldy505
- fix: setup swapfile only if runner architecture is X64 or X86 (#3876) by @aldy505
- Set minimum bash version to 4.4.0 (#3873) by @aminvakil
- fix: adjust file healthcheck durations (#3874) by @mzglinski
- feat: healthchecks for sentry components (#3859) by @mzglinski
- fix(eap): Fix dataset parameter to target spans (#3866) by @phacops
- build(deps): bump actions/create-github-app-token from 2.0.6 to 2.1.0 (#3865) by @dependabot
- fix(scripts): use
envto findbashinterpreter (#3861) by @Zaczero - fix(scripts): every known flags should be shifted before executing the sentry command (#3831) by @aldy505
- fix: uptime checker image should be bumped to the tagged release (#3858) by @aldy505
- fix(enhancement): ensure correct ownership check before setting permissions of profiles (#3855) by @LvckyAPI
- chore(features): cleanup feature flags grouped by its' category (#3843) by @aldy505
- fix: add schedulers for generic metrics subscriptions (#3847) by @mzglinski
- feat: Continue using celery in self-hosted for now (#3845) by @markstory
- feat(features): add
profiling-viewflag (#3837) by @aldy505 - Potential fix for code scanning alert no. 12: Workflow does not contain permissions (#3822) by @aldy505
- docs: clearly state that
system.internal-url-prefixshouldn't be changed (#3829) by @aldy505 - feat(install): Adds support for podman(compose) (#3673) by @DuncanConroy
- fix(action): missing project directory path for failure inspection (#3825) by @aldy505
- Cleanup unused feature flags (#3820) by @doc-sheet
- feat: inspect docker compose failure on self-hosted e2e action (#3817) by @aldy505
25.7.0
Important
Action Required: Update Your Configuration Files!
To make sure you're getting all these new goodies and everything runs smoothly, please remember to update your .env (or .env.custom, if any), docker-compose.yml, and sentry/sentry.conf.py files to their latest versions. Don't miss any feature flags or additional configurations!
Want to know what changed? Read on.
Uptime Monitoring: Available for Self-Hosted
Our Uptime Monitoring feature is now available for self-hosted Sentry. You can monitor endpoints using private IP addresses by setting UPTIME_CHECKER_ALLOW_INTERNAL_IPS environment variable to "true," and don't forget to configure the necessary feature flags in your sentry.conf.py file. This adds a ton of flexibility for monitoring your internal services.
New Containers for Event Analytics Platform
We're introducing new containers related to our Event Analytics Platform. This unifies the storage backend for all Sentry features—errors, traces, logs, and uptimes—under one "platform". This makes correlating events and gaining a clear overview of your services much simpler & accurate. These containers also power the new Logs and Trace Explorer features.
DockerHub to GitHub Container Registry Migration
We are transitioning our default Docker image registry from DockerHub to GitHub Container Registry. You will see some changes on the .env file. We'll continue pushing new images to DockerHub for a short period, but new pushes will cease in the coming months. We recommend adjusting your configurations to this new standard soon.
Trace Details Link Fixes
Good news: unclickable links in performance details from the last release (you might know GitHub issues #3729 and #3758) have been fixed upstream. As a bonus, the trace-view-v1 flag has also been removed. You can check out the related pull request here.
For further discussion or questions, head over to the Sentry's Discord! We're always there to chat.
Various fixes & improvements
- feat: Swap
trace-view-v1feature flag withvisibility-explore-view(#3801) by @aldy505 - fix: set harakiri Django option to 30s (#3792) by @aldy505
- feat(images):Cutover images to ghcr (#3800) by @hubertdeng123
- docs: encourage community patches (#3794) by @aldy505
- feat: run EAP-related containers (#3778) by @aldy505
- feat(uptime): Enable uptime in self-hosted (#3787) by @evanpurkhiser
- feat: make
system.secret-keyconfigurable from environment variables (#3783) by @aldy505 - ci: run tests on arm64 (#3750) by @aldy505
25.6.2
Bug Fix
This release brings a PostgreSQL migration failure raised from this issue, it was fixed on this PR on sentry.
If you are coming from 25.5.1, you might want to skip 25.6.0 and 25.6.1, and upgrade directly to this version.
This release also brings in a fix on how Docker images are being pushed to DockerHub, mainly for ARM64 users out there:
snuba,vroom, andtaskbrokerimages now have thelinux/arm64platform support on thelatestand CalVer (YY.MM.xx) tag. Previously there was an error of copying the Docker image.symbolicator'snightlytags are now back (PR that fixed this: getsentry/symbolicator#1716)
Various fixes & improvements
- fix: Increase timeout for flakey test (#3781) by @tobias-wilfert
- chore: provide detailed note for sentry endpoint settings (#3780) by @aldy505
25.6.1
Caution
You should skip this release and go directly to the next release (v25.6.2)
Bug Fix
- This release includes a patch that fixes #3766
Various fixes & improvements
- fix(taskworker) Remove num-brokers (#3769) by @markstory
- feat: enable customization sentry DSN endpoint (#3747) by @yildizozgur
- ref(js-assets): Simplify how we call nginx container (#3761) by @BYK
- Revert "fix(vroom): Explicitly set PROFILES_DIR for upcoming change" (#3760) by @hubertdeng123
- fix(vroom): Explicitly set PROFILES_DIR for upcoming change (#3759) by @BYK
25.6.0
Caution
You should skip this release and go directly to the next release (v25.6.2)
New Updates
-
Self-hosted Sentry now supports ARM64 on Linux, so there's no need to run on forks anymore. The install.sh script should run smoothly on ARM64 machines. Feel free to give feedback on #1585
-
Some containers have been added to Docker Compose files, and the SMTP container is swapped with one that's ARM64-compatible and much more powerful—you can even use it as an AWS SES relay! Further details are available in the documentation: https://gitlab.com/egos-tech/smtp
-
Taskbroker is a new service (written in Rust) that aims to replace Celery, which is backed by Redis PubSub. In the next release, Taskbroker will fully replace Celery, taking over the roles of the worker and cron containers.
-
There are some feature flag changes, as we've cleaned up some, and enabled Continuous Profiling. Please ensure your
sentry.conf.py is updated to reflect the changes found insentry.conf.example.py. You can view the file differences using:diff -u sentry/sentry.conf.example.py sentry/sentry.conf.py. -
Limited by DockerHub image pulls? Replace your image name by prefixing it with
ghcr.io. For example,getsentry/sentry:nightlybecomesghcr.io/getsentry/sentry:nightly. It is hosted on GitHub Container Registry.
Various fixes & improvements
- enable shell linter for more scripts (#3748) by @doc-sheet
- feat: migrate to arm64-compatible smtp image (#3746) by @ezhevita
- Introduce patches with external kafka (#3521) by @aldy505
- add shellcheck action to lint bash scripts (#3710) by @doc-sheet
- tests: Install version 2.x of Python SDK (#3745) by @sentrivana
- feat(features): enable continuous profiling (#3742) by @aldy505
- feat: Add taskbroker + worker + scheduler (#3738) by @markstory
- fix(profiles): Run the profile chunks consumer (#3739) by @phacops
- chore: prune removed feature flags on main repository (#3731) by @aldy505
- remove index workaround (#3730) by @asottile-sentry
- Make usage of Python SDK future proof (#3714) by @antonpirker
25.5.1
Important
This release is a hard stop as we've squashed database migrations in sentry. Users must upgrade to 25.5.1 before proceeding to future versions.
Various fixes & improvements
- Add missing lib script to sentry-admin.sh (#3693) by @djakielski
- chore: cleanup obsolete feature flags (#3701) by @doc-sheet
25.5.0
Various fixes & improvements
- build(deps): bump actions/create-github-app-token from 2.0.2 to 2.0.6 (#3690) by @dependabot
- Resolve datetime deprecation warnings (#3686) by @emmanuel-ferdman
- ref: remove SENTRY_USE_BIG_INTS (always True) (#3687) by @asottile-sentry
25.4.0
Stand-alone Docker Compose Fixes
By: @aminvakil (#3658, #3654)
Various fixes & improvements
- chore(relay): specify spool.enveloppe.max_backpressure_memory_percent configuration for handling relay's failing healthcheck (#3635) by @aldy505
- build(deps): bump actions/create-github-app-token from 1.12.0 to 2.0.2 (#3649) by @dependabot
- build(deps): bump actions/create-github-app-token from 1.11.7 to 1.12.0 (#3639) by @dependabot
- Minimum requirements for 'errors-only' profile (#3634) by @madest92
- build(deps): bump actions/create-github-app-token from 1.11.6 to 1.11.7 (#3632) by @dependabot
- feat(sentry): add dynamic sampling feature to config (#3631) by @aldy505
- docs(config): add example config for Google Auth (#3623) by @junsung-cho
- fix: js-sdk directory/file permission should be set correctly (#3616) by @aldy505
- feat(features): enable session replay canvas (#3619) by @aldy505