Shhh 3.2.4 配置参数详解
目标:讲透 Shhh 3.2.4 的全部配置面:10 个环境变量(6 必填 4 可选)的取值与默认值、创建秘密的校验参数(口令强度/有效期档位/尝试次数/长度上限),关键行为附实测回显与排障速查。
Shhh 3.2.4 配置参数详解
目标:讲透 Shhh 3.2.4 的全部配置面——10 个环境变量(6 必填 4 可选)的取值、默认值与实测行为,加上创建秘密时的校验参数(口令强度、有效期档位、尝试次数、长度上限),并给出参数缺失/非法时的诊断路径。全部行为结论均有 2026-10-26/27 实测回显支撑;部署前置见 《Shhh 3.2.4 Ubuntu 22.04 源码部署指南》,参数速查可配合 《Shhh 3.2.4 Docker Compose 部署指南》 使用。
一、环境信息
| 项目 | 值 |
|---|---|
| 软件版本 | Shhh 3.2.4(官方 2025-10-22 发布) |
| 配置载体 | 纯环境变量(无配置文件,无命令行参数) |
| 配置定义位置 | 仓库 shhh/config.py + 官方 README「Environment variables」节(2026-10-26 溯源) |
| 行为实测日期 | 2026-10-26 ~ 2026-10-27 |
二、配置体系总览
Shhh 没有 YAML/TOML 配置文件,所有服务级配置都通过环境变量注入,启动时由 shhh/config.py 按 FLASK_ENV 的值加载对应配置类。理解三点即可掌握全貌:
FLASK_ENV是总开关:决定加载哪套配置(合法值仅 5 个),缺失或拼错程序直接拒绝启动(实测见第七节排障)。- 数据库连接五件套必填:
DB_HOST / DB_PORT / DB_USER / DB_PASSWORD / DB_NAME / DB_ENGINE,其中DB_PORT有默认值 5432。 SHHH_*前缀是行为微调:共 4 个可选变量,控制链接域名、秘密长度上限、数据库重试策略。
三、必填环境变量逐项详解
3.1 FLASK_ENV —— 运行环境选择
| 属性 | 值 |
|---|---|
| 合法值 | testing / dev-local / dev-docker / heroku / production |
| 生产建议 | production |
| 缺失行为 | 拒绝启动:RuntimeError: env=None specified in FLASK_ENV is not supported(实测) |
五个取值的实际差异(溯源自 shhh/config.py,2026-10-26):production 与其余环境的差别主要在关闭 DEBUG 输出;dev-docker/dev-local 面向开发调试;heroku 额外支持从 DATABASE_URL 组装数据库连接(Heroku 一键部署形态专用)。自托管生产固定用 production。
3.2 数据库连接五件套
| 变量 | 必填 | 默认值 | 说明 |
|---|---|---|---|
DB_HOST | 是 | 无 | 数据库主机名或 IP;同机部署用 127.0.0.1 |
DB_PORT | 否 | 5432 | 端口(写法上建议显式赋值并加引号,避免被解析成数值型) |
DB_USER | 是 | 无 | 数据库用户 |
DB_PASSWORD | 是 | 无 | 数据库口令(明文落环境变量,注意文件权限收紧) |
DB_NAME | 是 | 无 | 数据库名 |
DB_ENGINE | 是 | 无 | SQLAlchemy 连接串引擎前缀 |
DB_ENGINE 的两种官方支持写法(README 原文示例):
| 数据库 | DB_ENGINE 写法 | 需配套的数据库侧变量 |
|---|---|---|
| PostgreSQL | postgresql+psycopg2 | POSTGRES_USER / POSTGRES_PASSWORD / POSTGRES_DB |
| MySQL | mysql+pymysql | MYSQL_USER / MYSQL_PASSWORD / MYSQL_DATABASE |
💡
POSTGRES_*/MYSQL_*三件套不是 Shhh 本体读的,而是数据库服务自己的初始化变量(首次启动建库建用户用)。两边取值必须一致(README 特别注明 matchDB_USER/DB_PASSWORD/DB_NAME),否则会出现「数据库初始化成 A,应用却连 B」的启动失败。
选型上 PostgreSQL 是官方主路径(官方在线形态与 Heroku 部署均固定 PostgreSQL),MySQL 为等价可选项;两者的 Shhh 侧行为无差别,差别只在运维生态。
四、可选环境变量逐项详解(附实测)
4.1 SHHH_HOST —— 自定义分享链接域名
| 属性 | 值 |
|---|---|
| 默认行为 | 用请求的 request.url_root 作为链接前缀 |
| 典型场景 | 反向代理/自定义域名场景下,生成的链接前缀与对外域名一致 |
实测:设置 SHHH_HOST=https://shhh.example.com 后创建一条秘密(有效期 1d),返回的 link 字段:
{"response":{"details":"Secret successfully created.","expires_on":"October 28, 2026 at 00:19 UTC","external_id":"cH8qfBWWsnebKcYv9AIJ","link":"https://shhh.example.com/secret/cH8qfBWWsnebKcYv9AIJ","status":"created"}}
HTTP_STATUS:201
链接前缀随 SHHH_HOST 变化,external_id 不受影响。不设该变量时,前缀跟随访问所用的 host(如 http://127.0.0.1:8081/secret/...)。
4.2 SHHH_SECRET_MAX_LENGTH —— 秘密长度上限
| 属性 | 值 |
|---|---|
| 默认值 | 250(字符) |
| 实测(默认值) | 提交 251 字符 → HTTP 422 + "The secret should not exceed 250 characters.";250 字符成功创建 |
| 实测(调低为 50) | 提交 51 字符 → HTTP 422 + "The secret should not exceed 50 characters." |
两段实测回显:
{"response":{"details":"The secret should not exceed 250 characters.","status":"error"}}
{"response":{"details":"The secret should not exceed 50 characters.","status":"error"}}
该变量是「一口调小以收紧业务边界」的典型入口:单位是字符(非字节),调大超过 250 属于放宽官方默认,需自行评估数据库字段容量与安全边界。
4.3 SHHH_DB_LIVENESS_RETRY_COUNT / SHHH_DB_LIVENESS_SLEEP_INTERVAL —— 数据库重试策略
| 变量 | 默认值 | 说明(溯源自官方 README) |
|---|---|---|
SHHH_DB_LIVENESS_RETRY_COUNT | 5 | 读写操作前尝试连接数据库的最大次数 |
SHHH_DB_LIVENESS_SLEEP_INTERVAL | 1(秒) | 每次重试之间的间隔秒数 |
设计动机:数据库短暂不可达或休眠时(README 举例 Heroku 免费套餐常见的休眠唤醒),应用先重试再放弃,避免偶发抖动直接变成用户可见报错。自托管持久数据库形态下保持默认即可;若数据库与 Shhh 跨网络且有抖动,可适当调大这两个值。
五、创建秘密时的校验参数(API 侧默认值)
严格说这组不是环境变量,而是每次创建秘密时提交的参数与内建校验规则,与 SHHH_SECRET_MAX_LENGTH 联动,归在本篇做总账(逐请求回显见姊妹篇 《Shhh 3.2.4 API 使用详解》):
| 参数 | 必填 | 合法值 | 默认值 | 校验失败实测回显(HTTP 422) |
|---|---|---|---|---|
passphrase | 是 | ≥8 字符,含至少 1 个数字、1 个大写字母 | 无(必填) | "Sorry, your passphrase is too weak. It needs minimum 8 characters, with 1 number and 1 uppercase." |
secret | 是 | ≤ SHHH_SECRET_MAX_LENGTH(默认 250) | 无(必填) | "The secret should not exceed 250 characters." |
expire | 否 | 10m / 30m / 1h / 3h / 6h / 1d / 2d / 3d / 5d / 7d | 3d | "Must be one of: 10m, 30m, 1h, 3h, 6h, 1d, 2d, 3d, 5d, 7d." |
tries | 否 | 3 / 5 / 10 | 5 | 见 API 篇实测 |
弱口令拒绝的完整实测回显(提交 q1w2e3r4,无大写):
{"response":{"details":"Sorry, your passphrase is too weak. It needs minimum 8 characters, with 1 number and 1 uppercase.","status":"error"}}
两条选型提示:
expire上限 7 天是产品语义:Shhh 的定位是「临时信封」,没有长期保存选项;需要更久的分享场景请改用密码管理器共享。tries是防暴力破解闸门:链接泄露后,攻击者最多只有 3/5/10 次机会猜口令,用尽即销毁——所以口令分发渠道本身也要可靠(链接与口令分渠道发送)。
六、参数速查表(可直接抄进部署清单)
# --- 必填 ---
FLASK_ENV=production
DB_HOST=127.0.0.1
DB_PORT=5432
DB_USER=shhh
DB_PASSWORD=<强口令>
DB_NAME=shhh
DB_ENGINE=postgresql+psycopg2
# --- 可选 ---
# SHHH_HOST=https://shhh.example.com # 自定义分享链接域名
# SHHH_SECRET_MAX_LENGTH=250 # 秘密长度上限(默认 250)
# SHHH_DB_LIVENESS_RETRY_COUNT=5 # 数据库重试次数(默认 5)
# SHHH_DB_LIVENESS_SLEEP_INTERVAL=1 # 数据库重试间隔秒数(默认 1)
七、排障速查:参数错了会怎样
| 现象 | 根因变量 | 修复 |
|---|---|---|
启动即退出,日志 RuntimeError: env=None specified in FLASK_ENV is not supported | FLASK_ENV 缺失 | 补 FLASK_ENV=production(实测复现于迁移任务场景) |
| 连接数据库失败/超时 | DB_HOST/DB_PORT/DB_USER/DB_PASSWORD 任一错误 | 先用数据库客户端验证连接串,再逐项核对 |
| 数据库建出来的库名/用户与应用连的对不上 | POSTGRES_*(或 MYSQL_*)与 DB_* 不一致 | 两边取值保持一致(见 3.2 提示) |
| 对外分享链接域名不对(显示内网地址或代理地址) | 未设 SHHH_HOST | 设置对外域名(见 4.1 实测) |
合法内容被拒 should not exceed N characters | SHHH_SECRET_MAX_LENGTH 被调小 | 按业务需要调回(见 4.2 实测) |
八、参考链接
- 官方 README 环境变量章节:https://github.com/smallwat3r/shhh#environment-variables
- 配置源码:https://github.com/smallwat3r/shhh/blob/master/shhh/config.py
- 3.2.4 发布页:https://github.com/smallwat3r/shhh/releases/tag/3.2.4
- 本专栏姊妹篇:《Shhh 3.2.4 Ubuntu 22.04 源码部署指南》、《Shhh 3.2.4 Docker Compose 部署指南》、《Shhh 3.2.4 介绍与选型指南》、《Shhh 3.2.4 API 使用详解》