mad-web/laravel-initializer

此包已被放弃,不再维护。作者建议使用qruto/laravel-flora包代替。

初始化应用程序的便捷方式

3.4.0 2022-02-17 15:05 UTC

This package is auto-updated.

Last update: 2023-03-07 18:17:22 UTC


README

⚠️ 仓库已归档,新版本在Qruto组织下维护。新版本已发布 🎉 查看详情qruto/laravel-flora。找到升级指南,了解如何从旧版本切换。

🇺🇦 🤝 如果您能支持我,我将非常感激!

logo.png

初始化应用程序的便捷方式。

Latest Stable Version Build Status Code Style Status Code Coverage Status Quality Score Quality Score Software License

demo.png

简介

我们都知道,每个应用程序都应该包含readme文件和包含操作列表的安装部分,以便准备应用程序工作。

典型说明

  • 安装依赖项
  • 运行迁移
  • 发布资产
  • 编译应用程序资产
  • 为调度器创建cron作业
  • 等等。

一些操作您应该在每次应用程序更新(composer update、git pull...)或分支更改(git checkout)时执行,以准备应用程序工作。

Laravel Initializer 允许您声明这些过程,并通过简单的 app:installapp:update artisan 命令运行它,这些命令根据当前环境运行预定义的操作链。

app:update 命令还可以简化您在Forge、Envoy.blade.php、laravel-deployer、bash 脚本等中的部署脚本。

使用 Laravel Initializer,您可以将这两个过程都保留在源代码控制中。

将应用程序初始化过程的知识放到正确的位置

安装

通过 Composer

composer require mad-web/laravel-initializer

然后发布初始化类

php artisan vendor:publish --tag=initializers

它将在 app 目录中创建 InstallUpdate 类,这些类包含根据不同环境的不同方法的 localproduction 方法。这些方法应该返回具有特定安装或更新过程的运行器链。

您可以覆盖存储当前环境值的配置键,发布配置文件并设置 env_config_key 值。

php artisan vendor:publish --provider="MadWeb\Initializer\InitializerServiceProvider" --tag=config

默认情况下,laravel 将此值设置为 app.env,在大多数情况下您不需要覆盖此值。

用法

app:installapp:update 命令的用法相同,只是 app:install 使用 Install 类,而 app:update 使用 Update 类。

安装类内容

namespace App;

use MadWeb\Initializer\Contracts\Runner;

class Install
{
    public function production(Runner $run)
    {
        $run->external('composer', 'install', '--no-dev', '--prefer-dist', '--optimize-autoloader')
            ->artisan('key:generate')
            ->artisan('migrate', ['--force' => true])
            ->artisan('storage:link')
//            ->dispatch(new MakeCronTask)
            ->external('npm', 'install', '--production')
            ->external('npm', 'run', 'production')
            ->artisan('route:cache')
            ->artisan('config:cache')
            ->artisan('event:cache');
    }

    public function local(Runner $run)
    {
        $run->external('composer', 'install')
            ->artisan('key:generate')
            ->artisan('migrate')
            ->artisan('storage:link')
            ->external('npm', 'install')
            ->external('npm', 'run', 'development');
    }
}

更新类内容

namespace App;

use MadWeb\Initializer\Contracts\Runner;

class Update
{
    public function production(Runner $run)
    {
        $run->external('composer', 'install', '--no-dev', '--prefer-dist', '--optimize-autoloader')
            ->external('npm', 'install', '--production')
            ->external('npm', 'run', 'production')
            ->artisan('route:cache')
            ->artisan('config:cache')
            ->artisan('event:cache')
            ->artisan('migrate', ['--force' => true])
            ->artisan('cache:clear')
            ->artisan('queue:restart'); // ->artisan('horizon:terminate');
    }

    public function local(Runner $run)
    {
        $run->external('composer', 'install')
            ->external('npm', 'install')
            ->external('npm', 'run', 'development')
            ->artisan('migrate')
            ->artisan('cache:clear');
    }
}

您可以为具有与您的环境相同的名称的任何其他方法添加方法,例如 staging,并定义不同的操作。

如果您需要单独运行具有root权限的操作,可以定义一个符合以下约定的方法

namespace App;

use MadWeb\Initializer\Contracts\Runner;
use MadWeb\Initializer\Jobs\Supervisor\MakeQueueSupervisorConfig;
use MadWeb\Initializer\Jobs\Supervisor\MakeSocketSupervisorConfig;

class Install
{
    public function production(Runner $run) { ... }

    public function productionRoot(Runner $run)
    {
        $run->dispatch(new MakeQueueSupervisorConfig)
            ->dispatch(new MakeSocketSupervisorConfig)
            ->external('supervisorctl', 'reread')
            ->external('supervisorctl', 'update');
    }
}

通过传递 "root" 选项运行它

artisan app:install --root

使用详细模式查看运行操作的详细信息

php artisan app:update -v

您可以在构造函数中注入来自服务容器的任何服务

class Update
{
    public function __construct(Filesystem $storage)
    {
        $this->storage = $storage;
    }
    // ...
}

如果您想将配置类从 app 目录移动到其他位置,请在 AppServiceProvider 中重新绑定服务容器中的 app.installerapp.updater 键。

$this->app->bind('app.installer', \AnotherNamespace\Install::class);
$this->app->bind('app.updater', \AnotherNamespace\Update::class);

运行器API(可运行的操作)

$run
    ->artisan('command', ['argument' => 'argument_value', '-param' => 'param_value', '--option' => 'option_value', ...]) // Artisan command
    ->external('command', 'argument', '-param', 'param_value', '--option=option_value', ...) // Any external command by arguments
    ->external('command argument -param param_value --option=option_value') // Any external command by string
    ->callable(function ($arg) {}, $arg) // Callable function (like for call_user_func)
    ->dispatch(new JobClass) // Dispatch job task
    ->dispatchNow(new JobClass) // Dispatch job task without queue
    ->publish(ServiceProvider::class) // Publish single service provider assets
    ->publish([
        ServiceProvider::class,
        AnotherServiceProvider::class,
    ]) // Publish multiple packages assets
    ->publish([ServiceProvider::class => 'public']) // Publish package assets with tag
    ->publish([ServiceProvider::class => ['public', 'assets']]) // Publish package assets with multiple tags
    ->publishForce(ServiceProvider::class) // Force publish, works in any variations
    ->publishTag('public') // Publish specific tag
    ->publishTag(['public', 'assets']) // Publish multiple tags
    ->publishTagForce('public') // Force publish tags

Laravel Nova

如果您使用 Laravel Nova,请记住每次更新时发布 Nova 资产。

// Update class
$run
    ...
    ->artisan('nova:publish')
    // or
    ->publishTag('nova-assets')

有用的作业

Laravel初始化器提供了一些有用的作业,以便使您的应用程序初始化更加容易。

创建定时任务以安排任务

要启用 Laravel Scheduling,请将 MakeCronTask 作业添加到运行器链中,以创建应用程序的cron任务。

$run
    ...
    ->dispatch(new \MadWeb\Initializer\Jobs\MakeCronTask)

此作业将添加

* * * * * cd /path-to-your-project && php artisan schedule:run >> /dev/null 2>&1

到crontab列表。

创建laravel-echo-server.json配置文件

如果您使用 Laravel Echo Server 在应用程序中广播事件,请将 MakeEchoServerConfig 作业添加到运行器链中,以创建配置文件。

$run
    ...
    ->dispatch(new \MadWeb\Initializer\Jobs\MakeEchoServerConfig);

它将使用 laravel-echo-server 的默认选项创建配置文件,并从您的laravel应用程序配置中填充值。

您可以通过将数组传递给作业构造函数来覆盖默认值。在 broadcasting.php 配置中创建额外的 laravel-echo-server 配置值是一种好的做法。

/*
|--------------------------------------------------------------------------
| Laravel Echo server configurations
|--------------------------------------------------------------------------
|
| Here you may define all of laravel echo server options
|
*/
'server' => [
    'authEndpoint' => '/broadcasting/auth',
    'port' => env('SOCKET_PORT', '6001'),
    'sslCertPath' => env('SSL_CERT', ''),
    'sslKeyPath' => env('SSL_PATH', '')
],

然后,将这些值传递给 MakeEchoServerConfig 作业构造函数。

$run
    ...
    ->dispatch(new \MadWeb\Initializer\Jobs\MakeEchoServerConfig(config('broadcasting.server')));

为队列创建supervisor配置文件

此作业为队列工作者创建supervisor配置文件。将 MakeQueueSupervisorConfig 作业添加到运行器链中。

$run
    ...
    ->dispatch(new \MadWeb\Initializer\Jobs\Supervisor\MakeQueueSupervisorConfig);

默认情况下,此作业将使用命令 php artisan queue:work --sleep=3 --tries=3/etc/supervisor/conf.d/ 文件夹中创建配置文件,文件名遵循以下约定 your-application-name-queue.conf

如果您想覆盖默认选项,将其传递给作业构造函数。例如,如果您想使用 Laravel Horizon 而不是默认队列工作者。

$run
    ...
    ->dispatch(new \MadWeb\Initializer\Jobs\Supervisor\MakeQueueSupervisorConfig([
        'command' => 'php artisan horizon',
    ]));

为laravel echo server创建supervisor配置文件

MakeQueueSupervisorConfig 作业类似,您可以使用 MakeSocketSupervisorConfig 创建启动laravel echo服务器的supervisor配置文件。与 MakeQueueSupervisorConfig 的区别是命令 node ./node_modules/.bin/laravel-echo-server start 以及配置文件名为 your-application-name-socket.conf

这两个配置文件都将日志文件保存到 your-app-path/storage/logs

一键安装

要运行 php artisan app:install 命令,您首先应该安装composer依赖项。将应用程序通过一个命令安装将是一种很好的做法。我们提供了一个很好的方法来实现这种行为。

app-install 脚本添加到 composer.json 中的 scripts 部分。

"scripts": {
    "app-install": [
        "@composer install",
        "@php artisan app:install"
    ],
}

然后,您可以仅运行

composer app-install

以初始化您的应用程序。

如果您的应用程序具有需要root权限的操作,并且您使用基于Unix的系统,请将以下命令添加到您的运行器链中

public function production(Runner $run)
{
    $run->artisan(...)
        ...
        ->external('sudo', 'php', 'artisan', 'app:install', '--root');
}

public function productionRoot(Runner $run) { ... }

安全更新

当从源代码管理中拉取最新更改,并在某个 服务提供商 中使用当前未安装的软件包的功能时,您将遇到错误。为防止此类问题,您应该首先运行 composer install,为了简化此过程,您可以定义 app-update 脚本。

"scripts": {
    "app-update": [
        "@composer install",
        "@php artisan app:update"
    ],
},

然后您可以运行

composer app-update

升级

请参阅 UPGRADING 以获取详细信息。

变更日志

请参阅 CHANGELOG 以了解最近有哪些更改。

测试

composer test

贡献

请参阅 CONTRIBUTINGCONDUCT 以获取详细信息。

安全

如果您发现任何与安全相关的问题,请通过电子邮件 madweb.dev@gmail.com 而不是使用问题跟踪器来报告。

致谢

感谢 Nuno Maduro 提供了 laravel-console-task 软件包,它提供了美观的任务输出。

许可

MIT 许可证(MIT)。请参阅 许可文件 以获取更多信息。