别再对你的秘密掉以轻心。改用 GitHub。
I’m happy to help translate the article, but I’ll need the full text you’d like translated. Could you please paste the content (excluding the source line you’ve already provided) here? Once I have the text, I’ll translate it into Simplified Chinese while preserving all formatting, markdown, code blocks, and URLs.
.env 问题
三个月前,我的一个朋友为一名承包商办理入职。
他通过私信把 .env 发给了对方——这是标准做法。两天后,承包商在公共仓库里推送了一条调试日志,日志里仍然泄露了其中一个密钥。
- 他们已经轮换密钥。客户没有察觉。
- 但该文件仍然保存在他的 Slack 存档中。
- 仍然保存在承包商的 Slack 存档中。
- 仍然缓存于两台电脑上。
- 五年后它仍会在那里。
这就是 .env 问题。大多数团队以同样的方式“解决”它:
| 方法 | 问题 |
|---|---|
| Slack 私信(明文永久保留在两个聊天存档中) | 泄露机密 |
| Notion 页面(任何能读取页面的人都能读取生产环境) | 泄露机密 |
| 1Password 保管库条目(可行,但会产生第二套 ACL 需要维护) | 额外的 ACL 开销 |
.env.example(使用假值,48 小时后即失效) | 数据陈旧 |
| “我会通过 Signal 发给你”(仍然是两部手机上的明文) | 泄露机密 |
我尝试了现有的工具:
- Doppler – 适合有预算的 50 人团队(
$21/用户/月+ 销售电话)。 - Infisical – 开源但感觉像是为 Kubernetes 设计的,面向 DevOps 团队。
- dotenvx – 巧妙的 Git 加密方案,但仍需在带外渠道共享加密密钥,且缺乏团队撤销机制。
我真正想要的
- 零新增账号,零新增 ACL。
- 如果 GitHub 已经允许你向仓库推送,那么你也应该能够拉取 env。
于是我构建了 boltenv。
- 撤销队友的 GitHub 访问权限 → 他们失去 env 访问权限。完成。
- GitHub 仓库权限即为访问列表。无需维护并行的用户系统。
快速开始
将你的 .env 推送(在你的机器上加密,仅密文离开)
npm i -g @boltenv.dev/cli
boltenv push
# ⚡ .env → org/app:development v1 (12 vars, permanent)队友拉取
boltenv pull
# ⚡ .env ← org/app:development (12 vars)就这么简单。无需邀请。无需 ACL 面板。无需“创建项目”。
第一次推送会在本地生成一个 AES‑256 密钥。服务器只会看到密文。你只需通过安全渠道一次将密钥分享给队友:
# 你
boltenv key export
# → dGhpcyBpcyBhIDMyIGJ5dGUga2V5...
# 队友
boltenv key import dGhpcyBpcyBhIDMyIGJ5dGUga2V5...之后,队友只需在任意机器上运行 boltenv pull。他们会通过 Device Flow(与 gh auth login 相同的用户体验)一次性登录 GitHub。
安全细节(三层独立防护)
| 层级 | 描述 |
|---|---|
| GitHub 权限检查 | 服务器使用用户的 GitHub 令牌调用 GET https://api.github.com/repos/{owner}/{repo}。如果 permissions.push 为 false 或令牌缺失,请求将在 任何数据传输之前 被拒绝。 |
| AES‑256‑GCM(NIST 标准) | • 密钥派生:HKDF‑SHA256(加密子密钥和 HMAC 子密钥分离) • IV:12 字节, 每次推送随机生成 • 认证标签:16 字节(防篡改检测) |
| 密钥管理 | 主密钥永不离开本机。存放在 ~/.boltenv/keys/{owner}/{repo}.key,权限为 0600。服务器保存密文并附带一个 16 字符的密钥指纹,以便提前捕获密钥不匹配。 |
环境映射
| 分支 | 环境 |
|---|---|
main, master | production |
staging | staging |
develop | development |
| 其他任何分支 | development |
您当前所在的分支决定了推送/拉取的目标环境。如有需要,可使用 -e production 强制覆盖。没有令人困惑的 “环境下拉框” 陷阱。
撤销访问 – 实际场景
| 今天 | 使用 boltenv |
|---|---|
| ✅ 从 GitHub 移除用户 | ✅ 从 GitHub 移除用户 → 他们无法再拉取任何 env |
| ❌ 将其从 Doppler/Infisical/Vault 中移除(手动,常被忘记) | ❌ 无需额外平台进行清理 |
| ❌ 轮换他们拥有访问权限的所有密钥(很少发生) | ❌ 没有自动轮换(可手动轮换) |
❌ 他们在 ~/projects/* 下的 .env 文件成为生产堆栈的博物馆展品 | ❌ 他们缓存的 .env 仍留在磁盘上(没有工具能修复),但他们无法获取新的文件或推送恶意内容 |
这并不是完美的安全模型——它对 小团队 来说是务实的。如果需要 HIPAA 级别的合规性,请使用 Vault。如果你们只有五个人在交付 SaaS,这就是合适的控制水平。
比较表
| 工具 | 每用户成本 | 新账户? | 加密 | ACL 来源 |
|---|---|---|---|---|
| Slack DMs | 免费 | 无 | 无 | “我信任你” |
| dotenvx | 免费 | 无 | git 中的 AES‑256 | 手动密钥共享 |
| Doppler | $21/月 | 是 | 服务器管理 | Doppler 用户 |
| Infisical | $8/月 | 是 | 服务器管理 | Infisical 用户 |
| 1Password Dev | $7.99/月(捆绑) | 是 | 1P 管理 | 1Password 用户 |
| boltenv | 免费 ≤ 3,之后 $4/月 | 无 | 客户端 AES‑256‑GCM | GitHub 仓库权限 |
在 CI/CD 中使用 boltenv(GitHub Actions)
- name: Pull env
env:
BOLTENV_TOKEN: ${{ secrets.GITHUB_TOKEN }} # any PAT with repo scope
BOLTENV_KEY: ${{ secrets.BOLTENV_KEY }} # base64 master key
run: |
npm i -g @boltenv.dev/cli
boltenv pull -e production -yBOLTENV_TOKEN在 GitHub Actions 中可使用secrets.GITHUB_TOKEN。BOLTENV_KEY是主密钥,作为单个仓库 secret 存储。- 二进制文件 (
boltenv) 即 SDK。
最小化本地使用
export BOLTENV_TOKEN=$GITHUB_TOKEN # any PAT with repo scope
export BOLTENV_KEY=
boltenv pull -y多个 .env 文件
大多数真实项目都有多个 env 文件(.env.backend、.env.frontend、.env.workers)。boltenv 会自动发现它们:
$ boltenv push
⚡ Found 3 env files:
.env.backend 18 vars
.env.frontend 9 vars
.env.workers 6 vars
3 files → org/app:development (permanent)Pull 会保留布局。将文件列表保存到 .boltenv.yaml 并提交——团队成员在拉取时会得到相同的集合,避免配置漂移。
Scope & Limitations (Honest Disclosure)
- No org‑level RBAC – repo permissions are the rules.
- No automated key rotation – rotating means everyone re‑imports.
- No HSM, no compliance certifications – pre‑SOC2 product.
- No native Coolify / Railway / Vercel sync yet – on the roadmap.
- Today you can do
boltenv pull --stdout --format dotenvand paste, or run boltenv on the VPS itself with the env‑var auth above.
- Today you can do
If any of those are deal‑breakers, boltenv isn’t for you – and that’s fine.
安装并开始使用
npm i -g @boltenv.dev/cli
cd your-project
boltenv push代码仓库:
网站:(如果不同,请替换为实际站点)
boltenv.dev
许可证: FSL-1.1-MIT
(免费供所有人使用,包括商业用途,且不竞争)
我很想了解哪些地方对你不起作用。请评论、提交 issue,或私信我——我会阅读每一条。
如果这帮你避免了一次 Slack 私信的 .env,那就是我们的全部目标。