Flagsmith 配置参数详解

Flagsmith v2.287.0 环境变量体系详解:数据库、核心应用、访问控制、安全反代、邮件、任务处理器、观测与前端面板九大类参数的取值/默认值/生产建议,附参数速查表与误配排障,依据 2026-10-28 官方文档清单实查。

FlagsmithDjango特性开关自托管2026/10/28

Flagsmith 配置参数详解

目标:系统梳理 Flagsmith v2.287.0 自托管部署的环境变量体系——数据库、应用核心、访问控制、安全反代、邮件、任务处理器、可观测与前端面板九大类参数的取值、默认值与生产建议,并给出参数速查表与典型误配排障。核心结论依据官方文档 API 侧环境变量清单(docs.flagsmith.com/deployment/hosting/locally-api)与官方 Compose 编排实查(2026-10-28),部分行为结合本系列部署/运维篇实测交叉验证。

一、环境信息

项值
取证版本Flagsmith v2.287.0(官方统一镜像)
参数清单来源官方文档「Deployment → Hosting → API」环境变量章节(2026-10-28 实查)
编排事实来源官方仓库 main 分支 docker-compose.yml / docker-compose.flags-only.yml(2026-10-28 实查)
交叉验证本系列《Flagsmith Docker Compose 部署实战》实测环境(PostgreSQL 15.5 + 统一镜像三服务)
适用形态Docker Compose / 裸统一镜像 / Helm Chart(K8s 场景同一变量经 values 注入)

本篇为参数与配置篇:环境变量在 Compose 中属官方编排事实,正文按此边界表述;运行行为类结论凡涉及实测均在文中注明「实测」。

二、配置体系概览

Flagsmith 的配置入口有三层,优先级从高到低:

  1. 环境变量(推荐主通道):官方镜像完全经环境变量注入配置,无内置配置文件;Compose/Helm 的本质都是组织这批变量。
  2. Django settings 模块:变量最终落到 app/settings/<env>.py,可用 DJANGO_SETTINGS_MODULE 指定(如 app.settings.production),仅深度定制场景才动。
  3. Django Admin / 控制台:运行期业务数据(开关、分段、成员)走 API/控制台,不属于部署配置范畴。

变量组织方式(官方 Compose 做法):用 YAML 锚点 x-flagsmith-env 定义一份变量集,三个 Flagsmith 服务(API、迁移任务、任务处理器)共用 <<: *flagsmith-env 合并注入,避免漂移。统一镜像中 API 与前端控制台同服务,API 变量与前端变量在同一处注入;若采用 DISABLE_FLAGSMITH_UI 只跑 API,前端变量不再需要。

💡 技术拓展:环境变量生效的三种机制值得区分——

机制代表变量修改后生效方式
进程启动读取DATABASE_URL、DJANGO_SECRET_KEY重启服务进程
Django 运行时 settingsDJANGO_ALLOWED_HOSTS、DJANGO_SECURE_SSL_REDIRECT重启(settings 在进程启动时装载)
数据库列结构SEGMENT_CONDITION_VALUE_LIMIT官方明确仅限新装实例设置,运行中实例禁改

排障时先判断变量属于哪类,能省掉大量「改了不生效」的无效重启。

三、数据库参数

数据库是唯一强依赖(PostgreSQL),连接配置两条路线二选一:

路线一:URL 整串(推荐,官方 Compose 默认)

变量必设性说明
DATABASE_URL必需标准格式连接串 postgresql://user:password@host:port/db_name;官方文档示例为 postgres:// scheme
REPLICA_DATABASE_URLS可选逗号分隔的只读副本列表,读流量分发用
REPLICA_DATABASE_URLS_DELIMITER可选副本列表分隔符,默认 ,(密码含逗号时换其他字符)

路线二:分量式(仅在未提供 DATABASE_URL 时生效,有 URL 则整串优先)

变量说明
DJANGO_DB_HOST / DJANGO_DB_PORT主机与端口
DJANGO_DB_NAME / DJANGO_DB_USER / DJANGO_DB_PASSWORD库名/用户/密码

配套的分析数据落库参数:

变量默认说明
USE_POSTGRES_FOR_ANALYTICS'true'(官方 Compose 显式设置)API 调用与开关分析数据写 PostgreSQL;官方 Compose 注释原话「Store API and Flag Analytics data in Postgres」
ENABLE_API_USAGE_TRACKINGTrue关闭后组织设置的 Usage 页无数据;高流量场景为控制库膨胀可关
USE_CACHE_FOR_USAGE_DATAtrue用量统计走进程内缓存
API_USAGE_CACHE_SECONDS60用量缓存刷写周期(秒)
INFLUXDB_URL / INFLUXDB_TOKEN / INFLUXDB_ORG无可选:分析数据改发 InfluxDB 时三件套齐配
GA_TABLE_ID无从 Google Analytics 视图查组织用量(SaaS 遗留通道,自托管一般不用)

生产建议:连接串与 POSTGRES_PASSWORD(数据库镜像初始化)必须一致,这是部署篇 Q 类问题的高发点;数据库凭据不要与 DJANGO_SECRET_KEY 混用同一强度策略——前者换库要同步编排,后者只求长随机。

四、核心应用参数

变量默认说明与建议
DJANGO_SECRET_KEY未设时随机生成Django 会话/加密基钥。官方 WARNING 原话:多实例部署必须共享同一固定值,否则会话互不识别。生产用 50 位以上随机串,经 Secret 注入
ENVIRONMENT'local'运行环境标记(local/dev/staging/production),官方 Compose 设 production;影响日志与部分行为分支
DJANGO_SETTINGS_MODULE镜像默认settings 模块路径,如 app.settings.production;仅深度定制需要
LOG_LEVEL平台默认DEBUG/INFO/WARNING/ERROR/CRITICAL
LOG_FORMATgenericgeneric(纯文本)或 json(采集器友好)
GUNICORN_WORKERS / GUNICORN_THREADS / GUNICORN_TIMEOUT镜像默认(2 worker + 2 thread 基线)Web 工作进程数/每 worker 线程数/请求超时秒数(官方 Docker 文档「Environment Variables」章节列明)
GUNICORN_CMD_ARGS无Gunicorn 原生命令行参数,覆盖平台默认值(配 --worker-class 等高级项时用)
ACCESS_LOG_LOCATION未设(默认丢弃访问日志)设 - 输出到 stdout,或文件路径落盘
ACCESS_LOG_FORMATGunicorn 默认访问日志格式串
FLAGSMITH_DOMAIN无实例对外域名/端口(如 flagsmith.example.com),用于构造邮件链接等绝对地址;官方 Compose 示例 localhost:8000
DISABLE_FLAGSMITH_UIFalse设 True 关闭统一镜像内的控制台渲染,纯 API 实例用
ENABLE_GZIP_COMPRESSIONFalseDjango 层 gzip 压缩开关
REQUIRE_AUTHENTICATION_FOR_API_DOCS未设设 True 后 API 文档页需账号认证访问
GOOGLE_ANALYTICS_KEY无控制台 GA 埋点(自托管一般不需要)
APPLICATION_INSIGHTS_CONNECTION_STRING / OPENCENSUS_SAMPLING_RATE无Azure App Insights / OpenCensus 链路追踪遥测

实测交叉验证:部署篇实测镜像内 Gunicorn 23.0.0 启动 4 个 worker,PROMETHEUS_ENABLED='true' 时启动日志出现 Prometheus metrics server started on port 9100,与上表行为一致。

五、访问控制与注册参数

控制「谁能注册、谁能建组织、谁能进 Admin」:

变量默认说明与建议
ALLOW_REGISTRATION_WITHOUT_INVITETrue设 False/0 后新用户只能经邮件邀请进入
PREVENT_SIGNUP未设设 'true' 完全关闭注册入口(官方 Compose 注释示例)
USER_CREATE_PERMISSIONS'rest_framework.permissions.AllowAny'用户创建接口的 DRF/Djoser 权限列表(逗号分隔);自托管封闭场景官方建议值 'djoser.permissions.CurrentUserOrAdmin'
ENABLE_EMAIL_ACTIVATIONFalse注册后需邮件激活
RESTRICT_ORG_CREATE_TO_SUPERUSERS未设仅超管可创建组织(多租户收敛用)
DEFAULT_ORG_STORE_TRAITS_VALUE无新组织默认不持久化 traits(数据敏感场景)
ALLOW_ADMIN_INITIATION_VIA_CLI未设启用 bootstrap 管理命令(一键建默认超管+组织+项目)
ADMIN_EMAIL / ORGANISATION_NAME / PROJECT_NAME无bootstrap 命令配套:默认超管邮箱/默认组织名/默认项目名
ENABLE_ADMIN_ACCESS_USER_PASS未设允许用户名密码登录 Django Admin(默认 Admin 走 SSO 通道)
ALLOWED_ADMIN_IP_ADDRESSES未设逗号分隔 IP 白名单,仅限名单访问 Django Admin
USE_X_FORWARDED_HOSTFalse反代场景以 X-Forwarded-Host 替代 Host 头(仅在反代确实设置该头时开启)

实测交叉验证:本系列运维篇实测 bootstrap 命令依赖上述三件套变量(ADMIN_EMAIL/ORGANISATION_NAME/PROJECT_NAME),缺任一即 Error: Missing argument——与官方「先开 ALLOW_ADMIN_INITIATION_VIA_CLI 再跑命令」的链路一致。

六、安全与反代参数

变量默认说明与建议
DJANGO_ALLOWED_HOSTS无(官方 Compose 示例 '*')Host 头白名单,逗号分隔。生产必须收紧为实际域名,否则 Django 对不匹配 Host 直接拒绝
DJANGO_CSRF_TRUSTED_ORIGINS无允许发起 POST/PUT 的跨域来源列表;控制台与 API 不同域(拆分部署)时必配
SECURE_PROXY_SSL_HEADER_NAMEHTTP_X_FORWARDED_PROTO反代 TLS 卸载场景告诉 Django 哪个头代表真实协议
SECURE_PROXY_SSL_HEADER_VALUEhttps同上,头的取值
DJANGO_SECURE_SSL_REDIRECTFalse强制 HTTP→HTTPS 跳转(经反代终止 TLS 时配合上两项)
DJANGO_SECURE_SSL_HOSTNone强制重定向目标主机
DJANGO_SECURE_REFERRER_POLICYsame-originReferrer-Policy 头
DJANGO_SECURE_REDIRECT_EXEMPT[]免跳转路径列表
FLAGSMITH_CORS_EXTRA_ALLOW_HEADERS'sentry-trace,'跨域额外放行的请求头(逗号分隔)
AXES_FAILURE_LIMIT10登录失败锁定阈值(内置 django-axes 防爆破)
AXES_ONLY_USER_FAILURESTrue仅按用户名锁定(官方镜像默认;镜像启动日志会伴随 axes.W004/W006 两条告警,属上游默认配置,见部署篇 Q8)

实测交叉验证:部署篇实测用 curl 模拟 Django Admin 登录被 CSRF 拦截(403 Forbidden — CSRF cookie not set),根因即本组 DJANGO_CSRF_TRUSTED_ORIGINS/CSRF 中间件的安全默认;浏览器访问不受影响。

七、邮件参数

官方文档明确:不配邮件平台也能完整运行——邀请用户可用邀请链接完成(邮件仅是补充通道)。核心三选一:

变量说明
EMAIL_BACKEND后端类:django.core.mail.backends.smtp.EmailBackend(通用 SMTP)/ sgbackend.SendGridBackend / django_ses.SESBackend
SENDER_EMAIL发件人地址

SMTP 后端配套:EMAIL_HOST(默认 localhost)、EMAIL_PORT(默认 587)、EMAIL_USE_TLS(默认 True)、EMAIL_HOST_USER / EMAIL_HOST_PASSWORD。官方 Compose 注释给出的完整示例即此组合(mail.example.com + 587 + TLS)。

SendGrid 配套:SENDGRID_API_KEY。AWS SES 配套:AWS_SES_REGION_NAME(默认 us-east-1)、AWS_SES_REGION_ENDPOINT。

⚠️ 官方特别提示(原文要点):邮件模板里的链接域名取自 Django django_site 表记录,FLAGSMITH_DOMAIN 只影响平台自身生成的地址——邮件链接打不开时先查 django_site 表记录是否指向你的真实域名。

八、任务处理器与性能参数

变量取值说明与建议
TASK_RUN_METHODSEPARATE_THREAD(默认)/ SYNCHRONOUSLY / TASK_PROCESSOR官方 Compose 注释原话列出三值。默认在进程内线程执行异步任务;TASK_PROCESSOR 交给独立任务处理器服务(生产多实例推荐);SYNCHRONOUSLY 在请求线程同步执行(仅小规模)
SEGMENT_CONDITION_VALUE_LIMIT1000(0–2000000)分段条件值字节上限。官方 WARNING:该值改的是数据库列长,仅限新装实例设置,运行中禁改;调大可能影响未来向 SaaS 迁移导入
SEGMENT_RULES_CONDITIONS_EXPLICIT_ORDERING_ENABLEDFalse强制分段条件按主键升序求值;官方警告改动可能影响既有分段求值结果
PROMETHEUS_ENABLEDFalse开启 /metrics(容器内 :9100),官方 Compose 设 'true'
PROMETHEUS_HISTOGRAM_BUCKETS客户端默认直方图桶,如 "0.5,0.6,1.0,Inf"
REPLICA_DATABASE_URLS 系列无见第三章(读写分离)

实测交叉验证:部署篇编排采用 TASK_RUN_METHOD=TASK_PROCESSOR + 独立 run-task-processor 服务,实测组织/项目/环境创建产生的后台任务由其消化,任务表 total tasks: 7 且无 FAILED 积压——多实例生产形态按此配。

九、观测与集成参数

变量说明
SENTRY_SDK_DSNSentry 错误上报 DSN
SENTRY_TRACE_SAMPLE_RATE追踪采样率,默认 1.0
OAUTH_CLIENT_ID / OAUTH_CLIENT_SECRETGoogle OAuth 凭据,用于 Django Admin 的 SSO 登录(django-admin-sso 通道);官方 Compose 注释提示:开启 OAuth 还需「Flagsmith on Flagsmith」层面配置,仅设变量不生效
GOOGLE_SERVICE_ACCOUNT读组织用量的 Google 服务账号 JSON(需 analytics.readonly 权限)
APPLICATION_INSIGHTS_CONNECTION_STRING / OPENCENSUS_SAMPLING_RATE见第四章表

自托管最小集建议:SENTRY_SDK_DSN(可选)+ PROMETHEUS_ENABLED + 反代访问日志即可覆盖绝大多数排障需要,遥测类变量在合规敏感环境应保持默认关闭。

十、前端面板参数

统一镜像下控制台(React SPA)由后端容器直接伺服,相关变量:

变量说明
API_URL控制台调用的 REST API 地址(官方 Docker 文档「Access Flagsmith Remotely」原话:配置 dashboard 环境变量 API_URL 告知控制台 API 位置)。统一镜像默认同源 /api/v1/;仅当控制台与 API 拆分部署时需要显式设置
FLAGSMITH_FRONTEND_* 系列前端静态资源与品牌定制变量(官方前端变量清单 docs.flagsmith.com/deployment/hosting/locally-frontend),常规部署不动
DISABLE_FLAGSMITH_UI见第四章(关闭内置面板,纯 API 实例)

外部 SDK 侧的地址配置不属于本表:各语言 SDK 以 flagsmith 或 environment_key 初始化时传自托管 API 地址(如 http://<host>:8142/api/v1/,部署篇 4.7 实测即此端点形态)。

十一、参数速查表

按「装完必查」优先级汇总(✅=建议生产必设,⚠️=按场景设置,—=保持默认):

变量生产建议一句话作用
DATABASE_URL✅唯一强依赖连接串
DJANGO_SECRET_KEY✅加密基钥,多实例共享固定值
DJANGO_ALLOWED_HOSTS✅Host 白名单,收紧域名
FLAGSMITH_DOMAIN✅对外域名,邮件/链接地址基准
ENVIRONMENT✅(production)运行环境标记
TASK_RUN_METHOD⚠️(多实例用 TASK_PROCESSOR)异步任务执行方式
USE_POSTGRES_FOR_ANALYTICS⚠️('true')分析数据落库
PROMETHEUS_ENABLED⚠️('true')指标端点
ALLOW_REGISTRATION_WITHOUT_INVITE⚠️(封闭设 False)邀请制注册
PREVENT_SIGNUP⚠️完全关注册
RESTRICT_ORG_CREATE_TO_SUPERUSERS⚠️组织创建收敛
EMAIL_BACKEND 等⚠️邮件通道(可不配)
DJANGO_CSRF_TRUSTED_ORIGINS⚠️(拆分部署必配)跨域写请求来源
SECURE_PROXY_SSL_HEADER_NAME/_VALUE⚠️(TLS 反代必配)反代真实协议头
GUNICORN_WORKERS/_THREADS/_TIMEOUT—Web 并发基线
LOG_LEVEL/LOG_FORMAT—日志级别/格式
SEGMENT_CONDITION_VALUE_LIMIT—(新装才可设)分段条件值上限
SENTRY_SDK_DSN—错误上报

十二、常见问题

Q1:多实例部署后用户频繁掉线/会话互不识别。 原因即官方 WARNING:未设共享 DJANGO_SECRET_KEY,各实例用各自随机值。解法:编排中显式设同一强随机值(部署篇 4.1 编排示例的写法),经 Secret 注入而非明文入仓。

Q2:访问报 Invalid HTTP_HOST header / 控制台打不开。 原因:DJANGO_ALLOWED_HOSTS 未含实际访问域名(或仍为官方示例 '*' 被安全基线纠正后遗漏)。解法:设为逗号分隔的真实域名清单并重启;经反代还需核对 USE_X_FORWARDED_HOST 与 SECURE_PROXY_SSL_HEADER_* 两项。

Q3:设了 TASK_PROCESSOR 但异步任务不执行/积压。 原因:只改了 TASK_RUN_METHOD 没起任务处理器服务(该方式必须配套 run-task-processor 常驻进程,官方 Compose 注释原话「only needed if TASK_RUN_METHOD set to TASK_PROCESSOR」)。解法:编排中补 task-processor 服务(部署篇 4.1 模板),或临时退回默认 SEPARATE_THREAD。

Q4:注册接口拒绝 q1w2e3r4 等弱密码。 行为:注册/建用户接口返回 {'password': ["This password is too common."]}(部署篇实测回显)。这属 Django 内置校验,无对应环境变量可关;脚本化初始化请直接用强口令(示例 Q1w2e3r4@2026)。

Q5:邀请邮件里的链接域名不对。 原因与解法见第七章官方提示:链接域名取自 django_site 表而非 FLAGSMITH_DOMAIN,用 Django Admin 的 Sites 记录改成真实域名。

Q6:改了 SEGMENT_CONDITION_VALUE_LIMIT 后升级报错/数据异常。 原因:官方明确该值变更数据库列长,仅限新装实例设置。解法:运行中实例保持默认 1000,确需扩容走官方支持通道评估。

Q7:控制台跨域调用 API 被拒(拆分部署)。 解法:DJANGO_CSRF_TRUSTED_ORIGINS 加控制台来源、FLAGSMITH_CORS_EXTRA_ALLOW_HEADERS 按需补自定义头,并把 API_URL 指到 API 真实地址(第十章)。

十三、参考链接