abdullahfaqeir / laravelcdn
Laravel 的内容分发网络 (CDN) 包
Requires
- php: >=8.2
- aws/aws-sdk-php: ~3.2
- illuminate/config: ^8|^9|^10
- illuminate/support: ^8|^9|^10
- laravel/framework: ^8|^9|^10
- symfony/console: ^5|^6|^7
- symfony/finder: ^5|^6|^7
Requires (Dev)
- mockery/mockery: ^1.5.0
- phpunit/phpunit: ^9.0|^10.0
README
Laravel 的内容分发网络包
该包为开发者提供通过单个 artisan 命令将他们的资源(或任何公共文件)上传到 CDN 的能力。然后允许他们切换文件的本地和在线版本。
从 Vinelab/cdn 分支
此项目是从 https://github.com/Vinelab/cdn 分支出来的。所有原创工作的荣誉都归那里。
Laravel 支持
- 此分支支持 Laravel 8 及以上版本。
- 支持包自动发现。
- 如果您需要使用 Laravel 8 以下的版本,请使用此包的 ~3 版本。
- Laravel 8 及以上版本应使用此包的 ~4 版本。
亮点
- 亚马逊云服务 (AWS) - S3
- 数字海洋 (DO) - Spaces
- Artisan 命令用于上传内容到 CDN
- 简单的 Facade 用于访问 CDN 资源
问题
- 这个包是 Laravel FileSystem 的替代品吗?它们可以一起使用吗?
- 不是的,此包是在 Laravel 4 中引入的,其主要目的是通过从 CDN 加载到视图页面来管理您的 CDN 资源,并轻松地在本地和 CDN 版本的文件之间切换。同时,它允许您在指定资源目录和规则后,通过单个命令上传所有资源。FileSystem 是在 Laravel 5 中引入的,它旨在简化文件从/到 CDN 的加载/上传。它可以像此包一样用于从 CDN 加载资源,但上传资源到 CDN 较为困难,因为它期望您逐个上传文件。因此,此包仍不是 Laravel FileSystem 的替代品,它们可以一起使用。
安装
通过 Composer
在您的项目中需要 abdullahfaqeir/laravelcdn
composer require "abdullahfaqeir/laravelcdn:~5.0"
如果您正在使用 Laravel 5.4 或以下版本,您需要注册服务提供者
Laravel 5.4 及以下版本:将服务提供者和外观添加到 config/app.php
'providers' => array( //... AbdullahFaqeir\LaravelCDN\CdnServiceProvider::class, ),
'aliases' => array( //... 'CDN' => AbdullahFaqeir\LaravelCDN\Facades\CdnFacadeAccessor::class ),
如果您正在使用 Laravel 5.5,则无需注册服务提供者,因为此包会自动发现。
发布包配置文件
php artisan vendor:publish --provider 'AbdullahFaqeir\LaravelCDN\CdnServiceProvider'
环境配置
可以通过编辑 config/app.php 文件来配置此包。或者,您可以在 .env 文件中设置许多这些选项。
AWS 凭据
在 .env 文件中设置您的 AWS 凭据和其他设置。
注意:您应该在项目根目录中始终有一个 .env 文件来保存您的敏感信息。通常不应将此文件提交到您的版本控制系统中。
AWS_ACCESS_KEY_ID= AWS_SECRET_ACCESS_KEY=
CDN URL
设置 CDN URL
'url' => env('CDN_Url', 'https://s3.amazonaws.com'),
您可以在 .env 文件中按照以下方式更改此设置
CDN_Url=
绕过
为了在测试或开发期间加载本地资源,将 bypass
选项设置为 true
'bypass' => env('CDN_Bypass', false),
您可以在 .env 文件中按照以下方式更改此设置
CDN_Bypass=
Cloudfront 支持
'cloudfront' => [ 'use' => env('CDN_UseCloudFront', false), 'cdn_url' => env('CDN_CloudFrontUrl', false) ],
您可以在 .env 文件中按照以下方式更改此设置
CDN_UseCloudFront= CDN_CloudFrontUrl=
默认 CDN 提供商
目前,唯一可用的 CDN 提供商是 AwsS3。尽管如此,由于 DO 本地支持 AWS API,您可以通过提供端点来利用它,请参阅 cdn.php 配置文件以获取更多信息。此选项不能在 .env 中设置。
'default' => 'AwsS3',
CDN 提供商配置
'aws' => [ 's3' => [ 'version' => 'latest', 'region' => '', 'endpoint' => '', // For DO Spaces 'buckets' => [ 'my-backup-bucket' => '*', ] ] ],
多个存储桶
'buckets' => [ 'my-default-bucket' => '*', // 'js-bucket' => ['public/js'], // 'css-bucket' => ['public/css'], // ... ]
文件与目录
包含
指定要上传的目录、扩展名、文件和模式。
'include' => [ 'directories' => ['public/dist'], 'extensions' => ['.js', '.css', '.yxz'], 'patterns' => ['**/*.coffee'], ],
排除
指定要忽略的内容。
'exclude' => [ 'directories' => ['public/uploads'], 'files' => [''], 'extensions' => ['.TODO', '.txt'], 'patterns' => ['src/*', '.idea/*'], 'hidden' => true, // ignore hidden files ],
其他配置
'acl' => 'public-read', 'metadata' => [ ], 'expires' => gmdate("D, d M Y H:i:s T", strtotime("+5 years")), 'cache-control' => 'max-age=2628000',
您始终可以参考AWS S3文档以获取更多详细信息:[aws-sdk-php](http://docs.aws.amazon.com/aws-sdk-php/v3/guide/)(外部链接)
用法
您可以使用以下命令将您的资源推送到您的CDN,并且您也可以清除您的资源。
推送到CDN
只有更改过的资源会被推送到CDN。(谢谢)
上传资源到CDN
php artisan cdn:push
您可以在cdn.php配置文件中指定文件夹上传前缀。您的资源将被上传到S3上的该文件夹。
清除
从CDN删除资源
php artisan cdn:empty
注意:这将擦除您的整个存储桶。如果您在推送资源时指定了上传文件夹,这可能不是您想要的。
加载资源
使用CDN
外观调用CDN::asset()
函数。
注意:asset
与Laravel的asset
功能相同,它从public/
目录开始查找资源。
{{CDN::asset('assets/js/main.js')}} // example result: https://js-bucket.s3.amazonaws.com/public/assets/js/main.js {{CDN::asset('assets/css/style.css')}} // example result: https://css-bucket.s3.amazonaws.com/public/assets/css/style.css
注意:elixir
与Laravel的elixir
功能相同,它从构建文件夹中加载manifest.json文件,并选择由gulp生成的正确文件版本。
{{CDN::elixir('assets/js/main.js')}} // example result: https://js-bucket.s3.amazonaws.com/public/build/assets/js/main-85cafe36ff.js {{CDN::elixir('assets/css/style.css')}} // example result: https://css-bucket.s3.amazonaws.com/public/build/assets/css/style-2d558139f2.css
注意:mix
与Laravel 5.4的mix
功能相同,它从public文件夹中加载mix-manifest.json文件,并选择由webpack生成的正确文件版本。
{{CDN::mix('/js/main.js')}} // example result: https://js-bucket.s3.amazonaws.com/public/js/main-85cafe36ff.js {{CDN::mix('/css/style.css')}} // example result: https://css-bucket.s3.amazonaws.com/public/css/style-2d558139f2.css
要从public/
目录外部的任何app/
位置使用文件,请使用CDN::path()
函数。
{{CDN::path('private/something/file.txt')}} // example result: https://css-bucket.s3.amazonaws.com/private/something/file.txt
测试
要从项目文件夹中运行测试,请运行以下命令。
$ ./vendor/bin/phpunit
支持
请通过[GitHub](https://github.com/abdullahfaqeir/LaravelCDN/issues)请求支持或提交问题(外部链接)。
贡献
有关详细信息,请参阅[CONTRIBUTING](https://github.com/abdullahfaqeir/LaravelCDN/blob/master/CONTRIBUTING.md)(外部链接)。
安全问题
如果您发现任何安全问题,请通过电子邮件[abdullahfaqeir@gmail.com](mailto:abdullahfaqeir@gmail.com)报告,而不是使用问题跟踪器,以获得更快的响应。您应同时打开一个问题。
鸣谢
- [Raul Ruiz](https://github.com/abdullahfaqeir)(分支者)
- [Mahmoud Zalt](https://github.com/Mahmoudz)(原始开发者)
- [Abdullah Al-Faqeir](https://github.com/abdullahfaqeir)(贡献者)
- [Filipe Garcia](https://github.com/filipegar)(分支前贡献,未经记录的重复上传验证拉取请求)
- 原始项目的贡献者
- 此分支的所有贡献者
许可证
MIT许可证(MIT)。有关更多信息,请参阅[许可证文件](https://github.com/abdullahfaqeir/LaravelCDN/blob/master/LICENSE)(外部链接)。
变更日志
v5.0.0
- 代码重构。
- 测试用例重构。
- 支持Laravel 9。
- 最低PHP版本为8.2
v2.0.5
- 添加了连接错误报告
v2.0.4
- 添加了对DigitalOcean Spaces的API支持
v2.0.3
- 添加了对上传文件夹前缀的支持
v2.0.2
- 更新了readme,以详细说明Laravel <5.5>的使用说明
v2.0.1
- 修复了composer.json中的拼写错误
v2.0.0
- 支持Laravel 5.5
v1.0.3
- 修复了无法使用无协议URL为CloudFront的情况。现在有效的URL以http、https或简单地以'//'开头。
v1.0.2
- 修复了从发布中意外遗漏了elixir函数的错误。
v1.0.1
- 允许使用环境值进行配置