形态 / laravel-自动部署
为您的Laravel项目添加一键部署功能
Requires
- php: >=5.6.0
- adambrett/shell-wrapper: ~0.6
- illuminate/support: 5.1.*
Requires (Dev)
- mockery/mockery: 0.9.*
- orchestra/testbench: ~3.1
- phpunit/phpunit: ~4.0
- satooshi/php-coveralls: dev-master
- scrutinizer/ocular: ~1.1
This package is not auto-updated.
Last update: 2020-01-24 16:02:56 UTC
README
警告!2015-12-03
此包非常新,尚未经过全面测试。请自行承担风险使用!
在我对其进行了更多测试之后,我将移除此警告。请随意尝试,但我强烈建议在测试或预发布环境中进行。我期待您的反馈。请在此处提交问题。
此包将为您的Laravel 5.1项目添加一键部署功能。这意味着,每次您将更改推送到项目的GitHub仓库时,都会向您的服务器发送一个安全的通知,从而启动一系列命令来
- 创建项目数据库的快照
- 在现有的旁边创建一个新的部署文件夹
- 从GitHub仓库将最新的提交拉取到您的服务器
- 将最新的
.env
文件复制过来 - 运行
composer self-update && composer update
- 运行
npm update
- 运行
php artisan migrate
- 初始化数据库
- 将新的部署目录链接到您的webroot
- 记录所有更改并发送电子邮件通知
- 如有错误,则中止并回滚任何更改
- 立即执行上述所有操作,或者(将来)在设定的时间,比如凌晨2点,当时可能没有人使用您的应用
换句话说,它将自动执行您通常在将更改部署到实时网站时手动执行的步骤。大多数步骤是可配置的,其中一些是可选的。想法是创建一个或多个自动部署脚本,以适应您项目的各种场景。
安装
先决条件
此包旨在与Laravel 5.1一起使用,并且尚未与其他版本进行过测试。它只在Ubuntu 14.04 (Trusty)/Nginx配置中进行过测试。强烈建议您为您的网站设置SSL证书,以便GitHub可以安全地发送请求。如果您没有SSL证书,您可以在Let's Encrypt免费获取一个!通过在设置webhook时点击“禁用SSL验证”按钮,您还可以使用GitHub webhooks使用自签名证书。尽管如此,从已注册的CA获取SSL证书是非常推荐的。由于它们现在是免费的,您真的没有理由不这样做!
步骤1:修改composer.json
您有两种选择。第一种选择是打开项目根目录中的composer.json
文件,并在您的require
数组中添加以下内容
"morphatic/laravel-auto-deploy": "dev-master"
完成此操作后,打开终端会话(命令提示符),导航到项目根目录,并输入composer update
。这将安装包到您的vendor文件夹。
第二种方法是打开终端会话,导航到项目的根目录,然后输入以下命令:
composer require "morphatic/laravel-auto-deploy=dev-master"
如果一切顺利,post-install-cmd
应该会在你的 config/
目录中创建一个 auto-deploy.php
文件。它还应修改你的 .env
文件,为环境变量添加两个唯一的随机密钥。**绝对不要将这些密钥发布在公开位置!如果你这样做,会增加恶意代理随意触发网站部署的风险**。完成此操作后,你的终端上应该会显示一条信息,其中包含了你在 第 4 步 创建 GitHub webhook 所需要的信息。你可能想在关闭或清除终端之前完成此步骤。
第 2 步:将 ServiceProvider
添加到 config/app.php
在你的代码编辑器中打开 config/app.php
文件,并将以下内容添加到 'providers'
数组中
Morphatic\AutoDeploy\AutoDeployServiceProvider::class,
第 3 步:修改 App\Http\Middleware\VerifyCsrfToken
打开文件 app/Http/Middleware/VerifyCsrfToken.php
。为了使此包正常工作,你必须告诉 Laravel 不要尝试验证触发部署的 webhook 请求的 CSRF 令牌。在不将密钥发布在公开位置的情况下安全地执行此操作的唯一方法是重写 VerifyCsrfToken
类的 __construct()
方法。在类内部添加以下代码
public function __construct(Illuminate\Contracts\Encryption\Encrypter $encrypter)
{
parent::__construct($encrypter);
$this->except[] = config('auto-deploy.route');
}
如果这个类中已经有了一个 __construct()
方法,只需确保添加到类的第二行,该行将秘密 URL 添加到 CSRF 令牌验证排除的 URL 列表中。这行代码看起来像
$this->except[] = config('auto-deploy.route');
第 4 步:在 GitHub 上设置 webhook
前往你的 GitHub 仓库主页,点击“设置” > “Webhooks & services”,然后在 Webhooks 框中点击“添加 webhook”按钮。将出现一个类似于下面图片所示的表单。你应该使用在 第 1 步 终端中显示的“Payload URL”和“Secret”填写此表单。如果你已经关闭或清除了终端,你可以通过打开终端会话、导航到项目根目录并运行 php artisan deploy:info
重新显示此信息。
请注意,**强烈建议**你将 Payload URL 设置为通过 SSL(即使用 https
)与你的网站通信。即使使用自签名证书并点击“禁用 SSL 验证”按钮,也比在网络上发送未加密的数据要好。
在表单的下半部分,你会被问及“你希望触发此 webhook 的哪些事件?”支持的事件是 Push、Create 和 Release。当然,你也可以选择其他事件,但由这些事件触发的发送到你的网站的任何请求都将被此包忽略。
如果你要部署的服务器是 预发布 服务器,那么你可能想订阅 Push 事件。如果是 生产 服务器,你可能只想订阅 Release 事件。这取决于你。我们将在下一步配置服务器如何响应对 webhook 请求。
第 5 步:配置你的部署
在您喜欢的代码编辑器中打开 config/auto-deploy.php
文件。滚动到 'events'
数组,并根据您的部署环境需求添加或编辑它们。该文件中应有足够的文档来帮助您进行必要的更改。
步骤 6:测试
不言而喻,您应该在将此用于任何接近生产环境之前,在非关键环境中进行测试。祝您好运!
许可和免责声明
版权所有 (c) 2015 Morgan C. Benton,本软件包遵循 MIT 许可协议