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_SECRET
的 id
并用于下面的 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