vidwan / tenant-buckets
自动为租户配置 AWS S3 存储桶。
Requires
- php: ^8.0
- aws/aws-sdk-php: ~3.0
- stancl/tenancy: ^3.4
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.0
- pestphp/pest: ^1.20
- spatie/ray: ^1.28
This package is auto-updated.
Last update: 2024-08-30 01:51:11 UTC
README
自动为每个租户配置 AWS S3 存储桶。它是 stancl/tenancy 的扩展。有关更多详细信息,请参阅 TenancyForLaravel。
概念
概念很简单,即在租户注册时自动为租户提供一个新的 AWS S3 存储桶,并在中央数据库的租户表和数据列(在 tenant_bucket
下)中更新它。然后使用引导程序在租户上下文中运行时更新配置中的存储桶(filesystems.disks.s3.bucket
),然后在中央上下文中恢复它。
路线图
- 自动创建存储桶
- 在租户引导程序中选择创建的存储桶。
- 当租户被删除时删除存储桶。
- 使用 Amazon S3 服务进行测试。
注意:我还没有在 生产环境 中测试此包或使用真实的 AWS S3 存储桶。我只是在 开发环境 中使用 MinIO 进行了测试。测试后,我将更新此信息。在此之前,如果您已测试,请随时提交 PR。
安装
您可以通过 composer 安装此包。
composer require vidwan/tenant-buckets
用法
1. 文件系统配置设置
确保您的 S3 配置具有以下所有键/值对
文件: config/filesystems.php
's3' => [ 'driver' => 's3', 'key' => env('AWS_ACCESS_KEY_ID'), 'secret' => env('AWS_SECRET_ACCESS_KEY'), 'region' => env('AWS_DEFAULT_REGION'), 'bucket' => env('AWS_BUCKET'), 'url' => env('AWS_URL'), 'endpoint' => env('AWS_ENDPOINT'), 'use_path_style_endpoint' => env('AWS_USE_PATH_STYLE_ENDPOINT', false), ],
使用 Minio 进行开发?请确保更新您的
.env
,添加AWS_USE_PATH_STYLE_ENDPOINT=true
2. 租户配置
租户配置中有两部分需要处理。
部分 a。
将 TenantBucketBootstrapper::class
添加到租户配置文件中的 bootstrappers
。
Vidwan\TenantBuckets\Bootstrappers\TenantBucketBootstrapper::class
文件: config/tenancy.php
'bootstrappers' => [ // Tenancy Bootstrappers Vidwan\TenantBuckets\Bootstrappers\TenantBucketBootstrapper::class, ],
部分 b。
确保在 tenancy.filesystem.disks
配置中注释掉 s3
,否则它将与租户本身冲突。
文件: config/tenancy.php
'filesystem' => [ 'suffix_base' => 'tenant', 'disks' => [ 'local', 'public', // 's3', // Make sure this stays commented ], ],
3. 作业管道
将 Vidwan\TenantBuckets\Jobs\CreateTenantBucket
和 Vidwan\TenantBuckets\Jobs\DeleteTenantBucket
添加到 JobPipeline::make()
。如名称所示,前者在租户创建时创建一个新的存储桶,后者在删除租户时删除它。
文件: app/Providers/TenancyServiceProviders.php
use Vidwan\TenantBuckets\Jobs\CreateTenantBucket; use Vidwan\TenantBuckets\Jobs\DeleteTenantBucket; ... public function events() { return [ // Tenant events ... Events\TenantCreated::class => [ JobPipeline::make([ Jobs\CreateDatabase::class, Jobs\MigrateDatabase::class, Jobs\SeedDatabase::class, // Your own jobs to prepare the tenant. // Provision API keys, create S3 buckets, anything you want! CreateTenantBucket::class, // <-- Place it Here ])->send(function (Events\TenantCreated $event) { return $event->tenant; })->shouldBeQueued(false), ], ... Events\DeletingTenant::class => [ JobPipeline::make([ DeleteTenantBucket::class, // <-- Place it Here ])->send(function (Events\DeletingTenant $event) { return $event->tenant; })->shouldBeQueued(false), ], ... ]; }
加油! 🥳
测试
composer test
变更日志
有关最近更改的详细信息,请参阅 CHANGELOG。
贡献
有关详细信息,请参阅 CONTRIBUTING。
安全漏洞
有关如何报告安全漏洞的详细信息,请参阅 我们的安全策略。
致谢
许可证
MIT 许可证(MIT)。有关更多信息,请参阅 许可证文件。