利用环境变量超级加速 Laravel Forge 部署

2022 年 6 月 24 日#forge

除了供应服务器和创建网站之外,Laravel Forge 还可以做更多的事情,包括将代码部署到您的网站。

当您为您的网站安装一个存储库时,Forge 会自动创建一个部署脚本,该脚本会在您每次部署网站时执行。部署脚本是 Bash 代码,它告诉 Forge 如何部署您的网站、安装 Composer 依赖项、构建前端资产并重新加载 PHP-FPM 进程。

使用环境变量的最大好处之一是,您可以在任何时候轻松更改网站的 PHP 版本,而无需更改您的部署脚本。例如,通过使用 $FORGE_PHP 环境变量而不是直接调用 php 二进制文件,Forge 将自动为您使用正确的 PHP 版本。

Laravel 网站的默认部署脚本看起来像这样

cd $FORGE_SITE_PATH

git pull origin $FORGE_SITE_BRANCH
$FORGE_COMPOSER install --no-interaction --prefer-dist --optimize-autoloader

( flock -w 10 9 || exit 1
    echo 'Restarting FPM...'; sudo -S service $FORGE_PHP_FPM reload ) 9>/tmp/fpmlock

if [ -f artisan ]; then
    $FORGE_PHP artisan migrate --force
fi

正如您所看到的,默认部署脚本已经利用了在部署时注入到进程中的某些 环境变量

Forge 的内置环境变量可以快速识别,因为它们都以 $FORGE_ 为前缀。

Forge 并不止步于此。您还可以在通过部署触发器 URL 部署时注入您自己的环境变量。如果我们采用我们的部署触发器 URL

https://forge.laravel.net.cn/servers/687/sites/1234/deploy/http?token=XXXX

我们可以将其他查询参数附加到 URL,它们将自动转换为环境变量。例如,如果我们附加 &env=staging,Forge 将注入一个 $FORGE_VAR_ENV 变量,该变量的值为 "staging"。利用其他环境变量,我们可以根据部署的启动方式微调我们的部署脚本的作用。

那么,我们可以利用环境变量做哪些很酷的事情呢?

防止部署“wip”提交

if [ $FORGE_DEPLOY_MESSAGE =~ "wip" ]; then
    echo "The current code is a work in progress. Exiting..."
    exit 1
fi

防止通过 Forge 仪表盘触发的部署

if [ $FORGE_MANUAL_DEPLOY -eq 1 ]; then
    echo "Manual deployments are not allowed. Exiting..."
    exit 1
fi

通知 Bugsnag 发布

此示例要求您使用 Laravel Bugsnag 包

$FORGE_PHP artisan bugsnag:release \
  --repository "https://github.com/laravel/laravel.com" \
  --revision "${FORGE_DEPLOY_COMMIT}" \
  --builder "${FORGE_DEPLOY_AUTHOR}"

如果您没有 Forge 帐户,现在是 注册 的好时机!Forge 允许您轻松创建和管理 PHP 服务器,其中包括 MySQL、Redis、Memcached、数据库备份以及运行强大、现代的 Laravel 应用程序所需的一切。

作者:James Brooks

Laravel 工程团队负责人,构建 ForgeVaporEnvoyer

TwitterGitHub我的博客 上找到我。

关注 RSS Feed