尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Sentry 自托管 Docker 镜像如何通过 SENTRY_* 环境变量配置数据库、Redis 与邮件

Sentry 自托管 Docker 镜像如何通过 SENTRY_* 环境变量配置数据库、Redis 与邮件 Sentry 自托管 Docker 镜像如何通过 SENTRY_* 环境变量配置数据库、Redis 与邮件【免费下载链接】sentryDeveloper-first error tracking and performance monitoring项目地址: https://gitcode.com/GitHub_Trending/sen/sentry如果你用 Sentry 仓库self-hosted/目录构建的 Docker 镜像自托管部署 Sentry数据库PostgreSQL、缓存Redis和邮件SMTP都不写在配置里而是全部通过SENTRY_*前缀的环境变量注入。这篇文章基于 self-hosted/sentry.conf.py、self-hosted/Dockerfile 和 self-hosted/docker-entrypoint.sh 的源码说明这些环境变量分别对应哪些配置项、缺省值是什么、缺了会怎样报错以及如何在docker run时把它们传进去。环境变量如何生效镜像在构建时把self-hosted/sentry.conf.py复制到/etc/sentry/并设置SENTRY_CONF/etc/sentry见 Dockerfile 中ENV SENTRY_CONF/etc/sentry与COPY ./self-hosted/sentry.conf.py ... $SENTRY_CONF/两行。sentry.conf.py内部通过os.environ读取环境变量因此你不需要改镜像里的任何文件只需在启动容器时用-e传入对应的SENTRY_*变量即可。该配置文件的头部注释列出了官方支持的 Docker 环境变量清单SENTRY_POSTGRES_HOST / SENTRY_POSTGRES_PORT SENTRY_DB_NAME / SENTRY_DB_USER / SENTRY_DB_PASSWORD SENTRY_REDIS_HOST / SENTRY_REDIS_PASSWORD / SENTRY_REDIS_PORT / SENTRY_REDIS_DB SENTRY_MEMCACHED_HOST / SENTRY_MEMCACHED_PORT SENTRY_FILESTORE_DIR SENTRY_SERVER_EMAIL SENTRY_EMAIL_HOST / SENTRY_EMAIL_PORT / SENTRY_EMAIL_USER / SENTRY_EMAIL_PASSWORD SENTRY_EMAIL_USE_TLS / SENTRY_EMAIL_USE_SSL SENTRY_ENABLE_EMAIL_REPLIES / SENTRY_SMTP_HOSTNAME SENTRY_MAILGUN_API_KEY SENTRY_SINGLE_ORGANIZATION SENTRY_SECRET_KEY另外有两个必须知道的前提行为Redis 是硬性要求。如果SENTRY_REDIS_HOST未设置且镜像也检测不到链接进来的 redis 容器配置加载时会直接抛出Error: REDIS_PORT_6379_TCP_ADDR (or SENTRY_REDIS_HOST) is undefined, did you forget to --link a redis container?容器起不来。SENTRY_SECRET_KEY也是硬性要求。未设置时抛出Error: SENTRY_SECRET_KEY is undefined, run generate-secret-key and set to -e SENTRY_SECRET_KEY。密钥长度少于 32 个字符时还会打印一段 CAUTION 警告建议用generate-secret-key重新生成。注意更改该值会使所有现有 session 失效。配置 PostgreSQLsentry.conf.py中的数据库配置逻辑是只要设置了SENTRY_POSTGRES_HOST或检测到POSTGRES_PORT_5432_TCP_ADDR时回退为容器名postgres就会生成DATABASES配置引擎固定为sentry.db.postgres。各变量的取值与回退链如下环境变量配置项未设置时的回退值SENTRY_POSTGRES_HOSTHOST检测POSTGRES_PORT_5432_TCP_ADDR有则用postgres否则不配置数据库SENTRY_POSTGRES_PORTPORT空字符串SENTRY_DB_NAMENAMEPOSTGRES_ENV_POSTGRES_USER再回退postgresSENTRY_DB_USERUSERPOSTGRES_ENV_POSTGRES_USER再回退postgresSENTRY_DB_PASSWORDPASSWORDPOSTGRES_ENV_POSTGRES_PASSWORD再回退空字符串也就是说如果你的 Postgres 容器没有通过POSTGRES_ENV_*暴露默认用户信息建议把SENTRY_DB_NAME、SENTRY_DB_USER、SENTRY_DB_PASSWORD、SENTRY_POSTGRES_HOST四个变量都显式传齐。配置 RedisRedis 用于 buffers、quotas、TSDB、缓存、限流、digests 等组件对应sentry.conf.py中SENTRY_BUFFER、SENTRY_QUOTAS、SENTRY_TSDB等配置取值逻辑SENTRY_REDIS_HOST主机名。未设置时回退检测REDIS_PORT_6379_TCP_ADDR有则用redis两者都没有则抛出前文所述的启动异常SENTRY_REDIS_PASSWORD密码缺省为空字符串SENTRY_REDIS_PORT端口缺省6379SENTRY_REDIS_DB库编号缺省0。最终写入SENTRY_OPTIONS[redis.clusters][default]。另外SENTRY_MEMCACHED_HOST/SENTRY_MEMCACHED_PORT缺省端口11211是可选的设置了才启用 memcached 缓存后端不设置不影响启动。配置邮件SMTP邮件行为由是否设置SENTRY_EMAIL_HOST决定设置了SENTRY_EMAIL_HOST或检测到SMTP_PORT_25_TCP_ADDR时回退为smtpmail.backend置为smtp并使用以下变量SENTRY_EMAIL_PASSWORDSMTP 密码缺省空字符串SENTRY_EMAIL_USERSMTP 用户名缺省空字符串SENTRY_EMAIL_PORT端口缺省25SENTRY_EMAIL_USE_TLS启用 TLS缺省FalseSENTRY_EMAIL_USE_SSL启用 SSL缺省False。两者都没设置mail.backend会被置为dummy即邮件功能静默禁用——容器不会报错但 Sentry 不会发出任何邮件。如果你期望收到告警邮件却没收到先检查是否传了SENTRY_EMAIL_HOST。与回复转发相关的变量SENTRY_SERVER_EMAIL发件地址mail.from缺省rootlocalhostSENTRY_ENABLE_EMAIL_REPLIES启用邮件回复缺省False启用后回复域名取自SENTRY_SMTP_HOSTNAME缺省空字符串SENTRY_MAILGUN_API_KEY如果你用 Mailgun 收信设置此 key 后mail.enable-replies会强制为True无需再设SENTRY_ENABLE_EMAIL_REPLIES。在 docker run 中传参配置齐备后用-e把变量传给容器。下面的示例中镜像名:标签替换为你实际构建或拉取的自托管 Sentry 镜像由 self-hosted/Dockerfile 构建其余尖括号值替换为你环境中的真实值docker run -d \ -v /opt/sentry-data:/data \ -p 9000:9000 \ -e SENTRY_SECRET_KEYgenerate-secret-key 的输出至少 32 字符 \ -e SENTRY_POSTGRES_HOSTPostgres 主机名 \ -e SENTRY_POSTGRES_PORT5432 \ -e SENTRY_DB_NAME数据库名 \ -e SENTRY_DB_USER数据库用户 \ -e SENTRY_DB_PASSWORD数据库密码 \ -e SENTRY_REDIS_HOSTRedis 主机名 \ -e SENTRY_REDIS_PORT6379 \ -e SENTRY_REDIS_DB0 \ -e SENTRY_EMAIL_HOSTSMTP 主机 \ -e SENTRY_EMAIL_PORTSMTP 端口 \ -e SENTRY_EMAIL_USERSMTP 用户名 \ -e SENTRY_EMAIL_PASSWORDSMTP 密码 \ -e SENTRY_EMAIL_USE_TLStrue \ -e SENTRY_SERVER_EMAIL发件地址 \ 镜像名:标签几点说明均来自源文件镜像默认CMD [run, web]docker-entrypoint.sh 会自动把sentry前缀补上并以sentry用户运行如果以 root 进入容器entrypoint 会chown挂载的/data目录给sentry用户。因此-v挂一个持久化目录到/data是镜像声明的VOLUME /data的用途。Web 服务绑定0.0.0.0:9000SENTRY_WEB_HOST/SENTRY_WEB_PORTDockerfile 中EXPOSE 9000端口映射按 9000 配置。generate-secret-key是镜像内置的 sentry 命令entrypoint 会把已知的 sentry 子命令自动加上sentry前缀执行可用docker run --rm 镜像名:标签 generate-secret-key生成密钥。启动后的判断与限制看启动报错本文涉及的硬性失败只有两个都在配置加载阶段抛出——缺 Redis 配置抛REDIS_PORT_6379_TCP_ADDR (or SENTRY_REDIS_HOST) is undefined缺SENTRY_SECRET_KEY抛SENTRY_SECRET_KEY is undefined。看到这两条异常信息直接补齐对应环境变量。看服务端口配置无误时容器运行sentry run web对外提供 9000 端口服务可在宿主机访问该端口确认 Web 端已起来。邮件被静默禁用如前所述没有SENTRY_EMAIL_HOST时后端是dummy而非报错这是唯一需要靠人工核对环境变量来发现的静默分支。单组织优化SENTRY_SINGLE_ORGANIZATION缺省为TrueBool(env(...), True)即默认按单组织部署做 UI 优化如多组织部署需显式传false。配置完成后的下一步动作在仓库中未另行展开如需接入 SDK 上报或接入其他自托管组件请参考官方自托管文档self-hosted/Dockerfile 的镜像 label 指向develop.sentry.dev/self-hosted。【免费下载链接】sentryDeveloper-first error tracking and performance monitoring项目地址: https://gitcode.com/GitHub_Trending/sen/sentry创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表