lanos / vapor-tenant-buckets-new
为租户自动配置 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-27 16:04:24 UTC
README
为每个租户自动配置 AWS S3 存储桶。这是 stancl/tenancy 的扩展。更多详情请参阅 TenancyForLaravel。
致谢
这是 vidwanco/tenant-buckets 包的修改版,改为在 Laravel Vapor 上运行。根据 Vapor 的要求,应用了一个简单的修复来正确注入 AWS 凭据。
此外,对于较大的文件,Vapor 必须使用预签名 URL 并通过前端前置加载文件,因此已进行更改,以便在每个存储桶创建时启用正确的 CORS 策略。
概念
概念很简单。它是在租户注册时自动为租户提供一个新的 AWS S3 存储桶,并在中央数据库的租户表和数据列下的 tenant_bucket
更新相同。然后使用引导程序在租户上下文中的运行时更新配置 filesystems.disks.s3.bucket
,然后将其还原到中央上下文。
路线图
如果提供的更改合并到原始包中,则此存储库可能会停止使用,此时我们建议使用原始包。
注意: 我尚未在 生产环境 下或使用真实的 AWS S3 存储桶测试此包。我仅在 开发环境 下使用 MinIO 进行了测试。在 AWS S3 存储桶上进行测试后,我将更新此内容,并增加一个关于使用
aws-sdk-php
创建存储桶的 AWS IAM 策略设置的附加部分。在此之前,如果您已进行测试,请提交 PR。
安装
您可以通过 composer 安装此包
composer require lanos/vapor-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. 任务管道
在 JobPipeline::make()
中添加 Vidwan\TenantBuckets\Jobs\CreateTenantBucket
文件: app/Providers/TenancyServiceProviders.php
use Vidwan\TenantBuckets\Jobs\CreateTenantBucket; ... 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), ], ... ]; }
干杯! 🥳
测试
composer test
变更日志
请参阅 CHANGELOG 以获取有关最近更改的更多信息。
贡献
请参阅 CONTRIBUTING 以获取详细信息。
安全漏洞
请参阅 我们的安全策略 了解如何报告安全漏洞。
致谢
许可
MIT 许可证 (MIT)。有关更多信息,请参阅 许可文件。