Laravel v9.32.0 发布了两个新的 Artisan 命令:env:encrypt
和 env:decrypt
。
这些命令可以将应用程序的环境文件的加密副本安全地存储在源代码控制中,使其成为应用程序的一个组成部分。
这样做具有以下好处
- 在部署过程中解密和加载环境文件
- 在团队的开发人员之间共享本地环境
- 自动更新 CI 环境
Artisan “env:encrypt” 命令
首先,我们来了解一下 env:encrypt
命令。此命令读取环境文件并加密其内容。然后,将加密的内容写入一个以 .encrypted
为后缀的新环境中。
默认情况下,env:encrypt
命令将在应用程序的根目录中查找 .env
文件,并使用一个随机生成的较长的密钥对其进行加密。例如,执行以下命令将生成一个名为 .env.encrypted
的加密文件。
php artisan env:encrypt
该命令的输出显示用于加密文件的加密密钥,你应将其存储在安全的密码管理器中,因为解密文件时需要它。
当然,该命令还提供了一些选项,让你可以控制要使用的密钥和密码以及要加密的环境。要了解这些选项,请执行 php artisan help env:encrypt
命令。
Artisan “env:decrypt” 命令
env:decrypt
命令解密加密的环境文件,并将其写回其典型位置。必须通过 --key
选项向命令提供解密密钥
php artisan env:decrypt --key="3UVsEgGVK36XN82KKeyLFMhvosbZN1aF"
还可以通过在服务器或构建环境中定义 LARAVEL_ENV_ENCRYPTION_KEY
环境变量来提供密钥。如果定义了此环境变量,env:decrypt
命令将使用其值作为解密密钥。
要了解有关这些命令及其提供的其他选项的更多信息,你可以查阅 Laravel 文档。
与 Laravel Vapor 集成
Laravel Vapor 是一个无服务器 PHP 平台,在 AWS Lambda 上运行。Lambda 的一个限制是与给定函数关联的环境变量数量受限 - 4 KB 的硬限制。
对于超出此限制的项目,Vapor 提供了一种添加环境变量的辅助方法:秘密。在底层,秘密利用 AWS Systems Manager Parameter Store。当 Vapor 运行时启动时,秘密将通过 Parameter Store API 拉取并注入到环境中。
虽然秘密提供了一种添加额外环境变量的好方法,但它们会产生额外的 AWS 计费费用。对环境变量和秘密的限制使 Vapor 成为环境加密的主要候选者。
今天,我们很高兴地宣布内置支持!
要开始对 Laravel Vapor 使用加密的环境变量,你必须首先确保运行的 Laravel 版本 >= v9.32.0,Vapor Core 版本 >= v2.24.0。
接下来,确保你的项目包含由 .env.encrypted
命令生成的加密环境文件。如果你计划部署到生产环境,请在项目根目录创建一个名为 .env.production
的文件,并将所有生产环境变量添加到此文件。确保此文件未包含在源代码管理中。接下来,运行以下命令
php artisan env:encrypt --env=production
命令输出将显示用于加密文件的密钥。你应该将此密钥存储在安全的密码管理器中。
运行 env:encrypt
命令后,你将在项目根目录找到一个名为 .env.production.encrypted
的生产环境文件的加密等效项。
最后,你需要在运行时启动时为 Vapor 提供解密文件的密钥。登录到 Vapor UI 并导航到项目的 production
环境。单击屏幕右上角的菜单选项,然后选择“编辑环境变量”。在后续的模态窗口中,添加密钥 LARAVEL_ENV_ENCRYPTION_KEY
,并将值设置为 env:encrypt
命令显示的加密密钥
LARAVEL_ENV_ENCRYPTION_KEY=base64:UR9bH745sqGV62phOAVuxC8/MNh7PzjuB4DbHDn7w2c=
你准备好了!在你的下一次部署期间,Vapor 将查找加密的环境文件,并尝试使用环境中设置的密钥对其进行解密,然后将解密后的变量加载到运行时。
你可以在 Vapor 文档 中找到有关此新功能的更多信息。
我们希望你喜欢这个新添加到 Vapor 的功能,它现在就可以使用!
如果你不熟悉 Vapor,立即注册,并使用我们的沙盒计划免费开始使用。