告别存储难题:使用 Laravel Rados Gateway S3 扩展轻松管理对象存储

我们的项目是一个快速发展的在线教育平台,需要存储大量的课程视频、课件和用户上传的资料。起初,我们使用的是传统的 s3 服务,但随着用户数量的增加,存储成本和访问延迟逐渐成为瓶颈。这时,我们了解到 ceph rados gateway,一个高性能、可扩展且成本效益高的 s3 兼容对象存储。

然而,将 Rados Gateway 集成到 laravel 中却并非一帆风顺。Laravel 的原生 S3 驱动程序无法直接与 Rados Gateway 兼容。我们需要找到一种方法来桥接两者之间的差异。在一番搜索后,我找到了 exula/laravel-storage-rados-s3 这个扩展库,它完美地解决了这个问题。

这个库基于 League Flysystem 的 S3 适配器,并对其进行了扩展,使其能够轻松地指向 Rados Gateway。安装过程非常简单,只需要使用 composer

composer require exula/laravel-storage-rados-s3

Laravel 5.5 及以上版本会自动发现这个服务提供商。对于更早的版本,需要在 config/app.php 中手动注册服务提供商:

'providers' => [    // ...    ExulaCephCephStorageServiceProvider::class,]

接下来,我们需要在 config/filesystems.php 中配置一个新的磁盘驱动器,指向我们的 Rados Gateway:

'ceph' => [    'base_url' => env('CEPH_BASE_URL', 'xxxxxxxxx'),    'driver' => 'ceph',    'key' => env('CEPH_Access_KEY', 'xxxxxxx'),    'secret' => env('CEPH_SECRET_KEY', 'xxxxxxx'),    'region' => '',    'bucket' => env('CEPH_BUCKET', 'test'),    'version' => env('CEPH_VERSION', 'latest'),    'ACL' => env('CEPH_ACL', 'private'),    'visibility' => env('CEPH_VISIBILITY', 'private')],

最后,在 .env 文件中配置相应的环境变量,例如 CEPH_BASE_URL、CEPH_ACCESS_KEY、CEPH_SECRET_KEY 等。

配置完成后,我们就可以像使用其他 Laravel 存储驱动程序一样使用 ceph 磁盘了。例如,上传文件:

Storage::disk('ceph')->put('myfile.txt', 'File contents');

下载文件:

$contents = Storage::disk('ceph')->get('myfile.txt');

exula/laravel-storage-rados-s3 库极大地简化了我们在 Laravel 中使用 Rados Gateway 的过程。它不仅解决了兼容性问题,还提供了一种便捷的方式来管理对象存储,提高了开发效率。通过使用这个库,我们成功地将存储成本降低了 50%,并且显著提升了文件的访问速度。 这使得我们的平台能够更好地应对日益增长的用户需求,并为未来的扩展提供了坚实的基础。 如果你也面临着类似的存储挑战,我强烈推荐你尝试一下这个库。

© 版权声明
THE END
喜欢就支持一下吧
点赞5 分享