将 Laravel 应用部署到 Laravel Forge

将 Laravel 应用与加密的 .env.vault 文件部署到 Laravel Forge。

初始设置

安装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 中的密钥。

使用完整编辑模式功能一次性粘贴所有内容。

www.dotenv.org

最后,添加密钥 HELLO。将值设置为 production

www.dotenv.org

然后构建你的加密 .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 功能。