kamal envify

评估 .env.erb(当使用 -d staging 时为 .env.staging.erb -> .env.staging),创建 .env,并将包含运行时机密的 env 文件推送到服务器。

您可以使用此功能在外部管理机密,而无需通过存储库。 .env 用于构建机密和运行时机密。

如果你想自己管理 .env 文件,则可以使用 kamal env push 推送运行时机密(参见 kamal env)。

1Password 作为机密存储

如果你正在使用 1Password 等集中式机密存储,则可以创建 .env.erb 作为模板来查找机密。.env.erb 文件的示例

<% if (session_token = `op signin --account my-one-password-account --raw`.strip) != "" %># Generated by kamal envify
GITHUB_TOKEN=<%= `gh config get -h github.com oauth_token`.strip %>
KAMAL_REGISTRY_PASSWORD=<%= `op read "op://Vault/Docker Hub/password" -n --session  #{session_token}` %>
RAILS_MASTER_KEY=<%= `op read "op://Vault/My App/RAILS_MASTER_SECRET" -n --session #{session_token}` %>
MYSQL_ROOT_PASSWORD=<%= `op read "op://Vault/My App/MYSQL_ROOT_PASSWORD" -n --session #{session_token}` %>
<% else raise ArgumentError, "Session token missing" end %>

该模板可以安全地检入 git。然后,每个人在部署应用程序时都可以在首次为应用程序进行设置或更改密码后,运行 kamal envify 来获取正确的 .env 文件。

如果你需要为不同的目的地设置单独的 env 变量,则可以使用 .env.destination.erb 将其设置为该模板,该模板将在使用 kamal envify -d staging 运行时生成 .env.staging

注意:如果你使用 1Password 进行生物识别,则可以在示例中删除 session_token 相关部分,并仅调用 op read op://Vault/Docker Hub/password -n

Bitwarden 作为机密存储

如果你正在使用类似 bitwarden 的开源机密存储,则可以创建 .env.erb 作为模板来查找机密。

你可以将 SOME_SECRET 存储在 bitwarden 保险库的安全注释中

$ bw list items --search SOME_SECRET | jq
? Master password: [hidden]
[
  {
    "object": "item",
    "id": "123123123-1232-4224-222f-234234234234",
    "organizationId": null,
    "folderId": null,
    "type": 2,
    "reprompt": 0,
    "name": "SOME_SECRET",
    "notes": "yyy",
    "favorite": false,
    "secureNote": {
      "type": 0
    },
    "collectionIds": [],
    "revisionDate": "2023-02-28T23:54:47.868Z",
    "creationDate": "2022-11-07T03:16:05.828Z",
    "deletedDate": null
  }
]

… 从上面的 json 中提取 SOME_SECRETid 并用于下面的 erb

示例 .env.erb 文件

<% if (session_token=`bw unlock --raw`.strip) != "" %># Generated by kamal envify
SOME_SECRET=<%= `bw get notes 123123123-1232-4224-222f-234234234234 --session #{session_token}` %>
<% else raise ArgumentError, "session_token token missing" end %>

那么,每位部署该应用程序的人都可以运行 kamal envify,并且 kamal 将生成 .env