axazara / bankai
这是一个用于在项目间实现流畅且一致部署过程的Laravel Envoy部署包。
Requires
- php: ^8.1
- laravel/envoy: ^2.0
Requires (Dev)
- axazara/php-cs: ^0.1
- illuminate/contracts: ^9.0 || ^10.0 || ^11.0
- insolita/unused-scanner: ^2.4
- larastan/larastan: ^2.6
- nunomaduro/collision: ^6.0
- orchestra/testbench: ^7.29
- phpstan/extension-installer: ^1.3
- phpstan/phpstan-deprecation-rules: ^1.1
- phpstan/phpstan-phpunit: ^1.3
- phpunit/phpunit: ^9.6 || ^10.0 || ^11.0
- roave/security-advisories: dev-latest
- spatie/laravel-ray: ^1.32
This package is auto-updated.
Last update: 2024-09-14 18:47:47 UTC
README
Bankai为使用Envoy在Laravel应用程序中实现零停机部署提供了一个简洁的解决方案。本指南涵盖了安装、配置和部署过程,包括示例和详细说明。
要求
- PHP 8.1或更高版本
- Laravel 9.x, 10.x, 11.x
安装
首先,通过Composer将Bankai集成到您的Laravel项目中
composer require axazara/bankai --dev
配置
安装后,使用以下命令初始化Bankai
php artisan bankai:install
这将
- 将
bankai.php
发布到您的配置目录中。 - 将
Envoy.blade.php
添加到项目的根目录。
根据项目的需求自定义bankai.php
。
示例配置(bankai.php
)
return [ // General settings for the deployment 'settings' => [ 'repository' => 'your-repository', // Specify the Git repository URL 'slack_webhook' => 'https://hooks.slack.com/services/your-webhook', // Slack webhook URL, leave empty to disable 'slack_channel' => '#deployment', // Slack channel for notifications ], // Define environments such as staging, production 'environments' => [ 'staging' => [ 'ssh_host' => 'your-host', // SSH host for the server 'ssh_user' => 'your-user', // SSH user for deployment 'url' => 'your-app-url-here', // Application URL 'branch' => 'main', // Branch to deploy 'path' => '', // Path to the deployment directory 'php' => 'php', // PHP binary to use 'migration' => false, // Set true to run migrations 'seeder' => false, // Set true to run seeders 'maintenance' => false, // Set true to enable maintenance mode 'composer' => 'composer', // Composer binary to use 'composer_options' => '', // Additional options for Composer 'octane' => [ 'install' => false, // Set true if using Laravel Octane 'reload' => false, // Set true to reload Octane servers 'server' => 'swoole', // Octane server type (e.g., Swoole) ], 'horizon' => [ 'terminate' => true, // Set true to terminate Horizon after deployment ], 'queue' => [ 'restart' => false, // Set true to restart queue workers ], ], ], ];
PS:目前,Bankai与Laravel octane的FrankenPHP不兼容。
示例配置(Envoy.blade.php
)
@include('vendor/autoload.php') @setup define('LARAVEL_START', microtime(true)); $app = require_once __DIR__.'/bootstrap/app.php'; $kernel = $app->make(Illuminate\Contracts\Console\Kernel::class); $kernel->bootstrap(); try { $config = new AxaZara\Bankai\DeploymentConfig($env); } catch (Exception $e) { echo $e->getMessage(); exit(1); } extract($config->extractVariables()); @endsetup @import('vendor/axazara/bankai/src/Envoy.blade.php'); @task("run:after_deploy") cd "{{ $releasePath }}" @endtask @task("run:after_rollback") cd "{{ $currentRelease }}" @endtask
部署步骤
步骤 1:准备部署目录
设置您的部署环境
vendor/bin/envoy run setup --env={Your Environment}
创建三个关键目录
- 发布:存放所有部署。
- 共享:用于共享资源,如
.env
文件。 - 备份:存储发布备份。
- 当前:指向当前发布的符号链接。
- 您的应用程序密钥生成并存储在
shared/.env
PS:这是一个一次性设置,通常在本地机器上执行。
步骤 2:执行部署
使用以下命令进行部署
vendor/bin/envoy run deploy --env={Your Environment}
PS:这可以从本地机器或CI/CD管道运行。在Axa Zara,我们通过Gitlab CI/CD在每次合并后自动将应用程序部署到staging
或release
分支。
步骤 3:部署后任务
在Envoy.blade.php
中添加任务以执行部署后的操作:这些任务在部署完成后执行。
示例
@task("run:after_deploy") cd {{ $releasePath }} php artisan jwt:secret --force @endtask
在您的任务中使用以下变量
$releasePath
是正在进行的发布目录的路径。$php
是PHP二进制文件的路径。$composer
是Composer二进制文件的路径。
步骤 4:配置您的Web服务器
您可以将Web服务器配置为从current/public
目录提供应用程序。例如,如果您使用Laravel Forge,则应将网站目录设置为current/public
。 current/public
将始终指向最新的发布。
回滚
vendor/bin/envoy run deploy:rollback --env={Your Environment}
如有需要,您可以快速回滚到以前的发布
回滚后任务
@task("run:after_rollback") cd {{ $currentRelease }} @endtask
您可以在Envoy.blade.php
中运行任务
- 您可以在任务中使用以下变量
$php
是PHP二进制文件的路径。$composer
是Composer二进制文件的路径。
$currentRelease
是当前发布目录的路径。
- 其他命令
- 列出发布:
vendor/bin/envoy run releases --env=foo
列出备份:vendor/bin/envoy run backups --env=foo
- 零停机部署机制
- 新发布准备:Bankai在“发布”目录中创建一个新的发布。
- 符号链接切换:指向当前版本的符号链接立即切换到新发布。
- 共享资源:通过共享目录和文件保持部署的一致性。
- 回滚:如有需要,可以快速回滚到以前的发布。
维护:部署后,可以清理旧发布。
Bankai 支持Sentry集成以跟踪发布。如果启用,Bankai将在每次部署后自动在Sentry中创建一个新的发布版本。要启用Sentry集成,请将以下内容添加到 bankai.php
(配置文件)中:
'sentry' => [ 'enabled' => false, 'organization' => 'your-organization', 'project' => 'your-project', 'token' => 'your-token', 'version' => null // If null, the release will be the current release name, otherwise it will be the value of this key ],
sentry.enabled
:设置为true
以启用Sentry集成。sentry.organization
:您的Sentry组织。sentry.project
:您的Sentry项目。sentry.token
:您的Sentry认证令牌。了解更多信息 请点击这里。sentry.version
:您的Sentry发布版本。默认为当前发布名称。
贡献
欢迎贡献。
安全漏洞
如果您在此软件包中发现安全漏洞,请通过hello@axazara.com向Axa Zara Security发送电子邮件。所有安全漏洞都将得到及时处理。
许可
此项目是开源软件,根据MIT许可证许可。