axazara/bankai

这是一个用于在项目间实现流畅且一致部署过程的Laravel Envoy部署包。

dev-main 2024-07-14 18:31 UTC

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在每次合并后自动将应用程序部署到stagingrelease分支。

步骤 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/publiccurrent/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

  1. 零停机部署机制
  2. 新发布准备:Bankai在“发布”目录中创建一个新的发布。
  3. 符号链接切换:指向当前版本的符号链接立即切换到新发布。
  4. 共享资源:通过共享目录和文件保持部署的一致性。
  5. 回滚:如有需要,可以快速回滚到以前的发布。

维护:部署后,可以清理旧发布。

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许可证许可。