You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Docker Swarm中部署并升级至最新版Sentry本地实例

Docker Swarm部署最新版Sentry简化方案

一、前置准备

  • 备份现有Sentry 9.1.2的PostgreSQL数据库、持久化文件存储及Redis数据
  • 确认Docker Swarm集群状态正常,节点资源充足
  • 提取旧版配置中的核心参数:SENTRY_SECRET_KEY、数据库连接信息等(若生成新密钥,可执行sentry config generate-secret-key)

二、Swarm栈部署配置

官方getsentry/sentry镜像可直接用于Swarm部署,以下是包含核心服务的简化栈配置,若已有外部依赖服务(PostgreSQL/Redis/Kafka等),可替换对应环境变量地址,删除栈内的依赖服务定义:

version: '3.8'

x-common-env: &common-env
  SENTRY_SECRET_KEY: 你的旧版密钥或新生成密钥
  SENTRY_POSTGRES_HOST: postgres
  SENTRY_POSTGRES_USER: sentry
  SENTRY_POSTGRES_PASSWORD: 你的PostgreSQL密码
  SENTRY_REDIS_HOST: redis
  SENTRY_KAFKA_HOSTS: kafka:9092
  SENTRY_DB_NAME: sentry

services:
  sentry-web:
    image: getsentry/sentry:latest
    command: run web
    environment: *common-env
    volumes:
      - sentry-data:/var/lib/sentry/files
    deploy:
      replicas: 2
      restart_policy:
        condition: on-failure
    networks:
      - sentry-net

  sentry-worker:
    image: getsentry/sentry:latest
    command: run worker
    environment: *common-env
    volumes:
      - sentry-data:/var/lib/sentry/files
    deploy:
      replicas: 3
      restart_policy:
        condition: on-failure
    networks:
      - sentry-net

  sentry-cron:
    image: getsentry/sentry:latest
    command: run cron
    environment: *common-env
    volumes:
      - sentry-data:/var/lib/sentry/files
    deploy:
      restart_policy:
        condition: on-failure
    networks:
      - sentry-net

  # 若已有外部PostgreSQL,可删除此服务
  postgres:
    image: postgres:14
    environment:
      POSTGRES_USER: sentry
      POSTGRES_PASSWORD: 你的PostgreSQL密码
      POSTGRES_DB: sentry
    volumes:
      - postgres-data:/var/lib/postgresql/data
    deploy:
      placement:
        constraints: [node.role == manager]
    networks:
      - sentry-net

  # 若已有外部Redis,可删除此服务
  redis:
    image: redis:6-alpine
    command: redis-server --appendonly yes
    volumes:
      - redis-data:/data
    deploy:
      placement:
        constraints: [node.role == manager]
    networks:
      - sentry-net

  # 若已有外部Kafka/ZooKeeper,可删除这两个服务
  kafka:
    image: confluentinc/cp-kafka:7.3.0
    environment:
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka:9092
      KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
    volumes:
      - kafka-data:/var/lib/kafka/data
    deploy:
      placement:
        constraints: [node.role == manager]
    networks:
      - sentry-net

  zookeeper:
    image: confluentinc/cp-zookeeper:7.3.0
    environment:
      ZOOKEEPER_CLIENT_PORT: 2181
    volumes:
      - zk-data:/var/lib/zookeeper/data
      - zk-log:/var/lib/zookeeper/log
    deploy:
      placement:
        constraints: [node.role == manager]
    networks:
      - sentry-net

volumes:
  sentry-data:
  postgres-data:
  redis-data:
  kafka-data:
  zk-data:
  zk-log:

networks:
  sentry-net:
    driver: overlay

三、数据库迁移(升级核心步骤)

由于从9.1.2跨度较大,需先执行数据库结构迁移:

# 启动临时容器执行迁移命令
docker service create --rm --name sentry-migrate \
  --env SENTRY_SECRET_KEY=你的密钥 \
  --env SENTRY_POSTGRES_HOST=postgres \
  --env SENTRY_POSTGRES_USER=sentry \
  --env SENTRY_POSTGRES_PASSWORD=你的PostgreSQL密码 \
  --env SENTRY_DB_NAME=sentry \
  --network sentry-net \
  getsentry/sentry:latest upgrade

迁移过程耗时较长,需确保数据库备份完整。

四、部署栈并验证

# 部署Sentry栈
docker stack deploy -c docker-compose.yml sentry

# 验证服务状态
docker stack services sentry

五、升级简化技巧

  • 复用旧版SENTRY_SECRET_KEY,避免用户会话失效
  • 升级时,先指定具体新版本镜像(如getsentry/sentry:24.7.0),重新部署栈后再次执行upgrade命令完成迁移
  • 若已有成熟的外部依赖服务,直接配置环境变量指向外部地址,无需在栈内部署,减少资源占用

内容的提问来源于stack exchange,提问作者Shaleen Bardar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 23:02:54