将 Laravel 应用部署到 Laravel Forge
将 Laravel 应用与加密的 .env.vault 文件部署到 Laravel Forge。
在此指南中找到完整的GitHub 代码示例。
初始设置
安装Laravel 并创建一个新的 Laravel 项目。
composer create-project laravel/laravel yourapp
编辑 resources/views/welcome.blade.php
。
resources/views/welcome.blade.php
Hello {{ env('HELLO') }}.
将它提交到代码并推送到GitHub。
git commit -am "Initial setup"
git push
接下来,在Laravel Forge 上创建你的项目。
Laravel Forge 设置
连接你的提供商(如果你还没有这样做)。在这里,我将连接Digital Ocean。
接下来,转到服务器页面 并点击 创建服务器
。
Laravel Forge 将用它需要的一切引导该服务器。请等待几分钟完成。
最后,将该服务器连接到你在GitHub 上的 Laravel 应用程序。
点击 安装仓库
。Laravel Forge 将把你的应用程序安装到你的服务器。这需要几分钟,你可能需要刷新页面。
接下来,转到你的应用程序的仪表板并点击 立即部署
。
部署完成后,你可以访问服务器的 IP 地址。(我在 Laravel Forge 的仪表板中找不到它。我必须去 Digital Ocean 并查看 Droplet。)
你的浏览器可能会警告你 IP 地址很危险,但你可以跳过它直接访问它。
你的应用程序会显示 'Hello .'
,因为它还没有访问环境变量的方法。接下来就来解决这个问题。
安装 dotenv-vault-laravel
在你的 composer.json
文件中引入dotenv-vault-laravel
。
composer require davidcochrum/dotenv-vault-laravel
composer.json
...
"require": {
"davidcochrum/dotenv-vault-laravel": "^1.1",
...
}
...
在你的 .env
文件末尾添加 HELLO=World
。
.env
...
HELLO="World"
尝试在本地运行它。
php artisan serve
INFO Server running on [http://127.0.0.1:8000]
它应该显示 Hello World
。
太好了!现在 ENV
具有你在 .env
文件中定义的键和值。这涵盖了本地开发。接下来我们解决生产问题。
构建 .env.vault
推送你最新的 .env
文件更改并编辑你的生产密钥。 了解更多关于同步 .env
文件的信息
npx dotenv-vault@latest new
npx dotenv-vault@latest push
npx dotenv-vault@latest open production
设置所有这些密钥以匹配你在 Laravel Forge 中的密钥。
使用完整编辑模式功能一次性粘贴所有内容。
最后,添加密钥 HELLO
。将值设置为 production
。
然后构建你的加密 .env.vault
文件。
npx dotenv-vault@latest build
它的内容应该类似于以下内容。
.env.vault
#/-------------------.env.vault---------------------/
#/ cloud-agnostic vaulting standard /
#/ [how it works](https://dotenv.org/env-vault) /
#/--------------------------------------------------/
# development
DOTENV_VAULT_DEVELOPMENT="/HqNgQWsf6Oh6XB9pI/CGkdgCe6d4/vWZHgP50RRoDTzkzPQk/xOaQs="
DOTENV_VAULT_DEVELOPMENT_VERSION=2
# production
DOTENV_VAULT_PRODUCTION="x26PuIKQ/xZ5eKrYomKngM+dO/9v1vxhwslE/zjHdg3l+H6q6PheB5GVDVIbZg=="
DOTENV_VAULT_PRODUCTION_VERSION=2
设置 DOTENV_KEY
获取你的生产 DOTENV_KEY
。
npx dotenv-vault@latest keys production
# outputs: dotenv://:[email protected]/vault/.env.vault?environment=production
使用 UI 在Laravel Forge 上设置 DOTENV_KEY
。
你可以删除所有其他环境变量,因为它们现在以加密的方式存在于你的 .env.vault
文件中。
部署
将这些更改安全地提交到代码并部署。
就是这样!在部署时,你的 .env.vault
文件将被解密,其生产密钥将被注入为环境变量,恰逢其时。
当你在日志中看到 从加密的 .env.vault 加载 env
时,你就知道操作成功了。如果 DOTENV_KEY
未设置(例如,在你的本地机器上开发时),它将回退到标准 phpdotenv 功能。
你成功使用新的 .env.vault 标准来加密和部署你的密钥。这比将你的密钥散布在多个第三方平台和工具中要安全得多。无论何时你需要添加或更改密钥,只需重新构建你的 .env.vault 文件并重新部署。