mad-web / laravel-initializer
Requires
- php: ^7.2.5 || ^8.0
- illuminate/bus: ^6.0 || ^7.0 || ^8.0 || ^9.0
- illuminate/config: ^6.0 || ^7.0 || ^8.0 || ^9.0
- illuminate/console: ^6.0 || ^7.0 || ^8.0 || ^9.0
- illuminate/container: ^6.0 || ^7.0 || ^8.0 || ^9.0
- illuminate/support: ^6.0 || ^7.0 || ^8.0 || ^9.0
- nunomaduro/laravel-console-task: ^1.5
- symfony/process: ^4.4.11 || ^5.0.9 || ^6.0.3
Requires (Dev)
- mockery/mockery: ^1.3
- orchestra/testbench: ^4.0 || ^5.0 || ^6.0 || ^7.0
- phpunit/phpunit: ^9.3
Suggests
- laravel/framework: Required to use additional MakeCronTask, MakeEchoServerConfig and MakeSupervisorConfig Jobs.
README
⚠️ 仓库已归档,新版本在Qruto组织下维护。新版本已发布 🎉 查看详情qruto/laravel-flora。找到升级指南,了解如何从旧版本切换。
🇺🇦 🤝 如果您能支持我,我将非常感激!
初始化应用程序的便捷方式。
简介
我们都知道,每个应用程序都应该包含readme文件和包含操作列表的安装部分,以便准备应用程序工作。
典型说明
- 安装依赖项
- 运行迁移
- 发布资产
- 编译应用程序资产
- 为调度器创建cron作业
- 等等。
一些操作您应该在每次应用程序更新(composer update、git pull...)或分支更改(git checkout)时执行,以准备应用程序工作。
Laravel Initializer 允许您声明这些过程,并通过简单的 app:install
和 app: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
目录中创建 Install
和 Update
类,这些类包含根据不同环境的不同方法的 local
和 production
方法。这些方法应该返回具有特定安装或更新过程的运行器链。
您可以覆盖存储当前环境值的配置键,发布配置文件并设置 env_config_key
值。
php artisan vendor:publish --provider="MadWeb\Initializer\InitializerServiceProvider" --tag=config
默认情况下,laravel 将此值设置为 app.env
,在大多数情况下您不需要覆盖此值。
用法
app:install
和 app: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.installer
和 app.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
贡献
请参阅 CONTRIBUTING 和 CONDUCT 以获取详细信息。
安全
如果您发现任何与安全相关的问题,请通过电子邮件 madweb.dev@gmail.com 而不是使用问题跟踪器来报告。
致谢
感谢 Nuno Maduro 提供了 laravel-console-task 软件包,它提供了美观的任务输出。
许可
MIT 许可证(MIT)。请参阅 许可文件 以获取更多信息。