如何在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
相关产品推荐
相关产品推荐

