jetcod / laravel-cdn
为 Laravel 的内容分发网络 (CDN) 包
Requires
- php: ^8.0
- aws/aws-sdk-php: ^3.9
- illuminate/config: ^9.0|^10.0|^11.0
- illuminate/support: ^9.0|^10.0|^11.0
- laravel/framework: ^9.0|^10.0|^11.0
- symfony/console: ^6.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.52
- mockery/mockery: ^1.6
- orchestra/testbench: ^7.0|^8.0|^9.0
- phpstan/phpstan: ^1.10
- phpunit/phpunit: ^9.0|^10.0|^11.0
- dev-master
- v4.2.2
- v4.2.1
- v4.2.0
- v4.1.0
- v4.0.0
- v3.1.0
- v3.0.0
- v2.0.8
- v2.0.7
- v2.0.6
- v2.0.5
- v2.0.4
- 2.0.3
- 2.0.2
- 2.0.1
- 2.0.0
- v1.0.3
- v1.0.2
- v1.0.1
- v1.0.0
- dev-4-feature-request-versioning-support-for-s3-uploads
- dev-issue-1-throwing-exception-while-uploading-files-to-an-empty-bucket
- dev-update-package-info
- dev-development
This package is not auto-updated.
Last update: 2024-09-19 19:14:35 UTC
README
Laravel 的内容分发网络包
该包提供了开发者使用 artisan 命令上传其资产(或任何公共文件)到 CDN 的能力。然后允许他们切换文件的本地和在线版本。
从 publiux/laravelcdn 分支
此项目已从 https://github.com/publiux/laravelcdn 分支。所有原始工作的信用归功于那里。
Laravel 支持
- 此分支支持 PHP 8.1+ 和 Laravel 8+。
- 支持包自动发现。
亮点
- Amazon Web Services (AWS) - S3
- DigitalOcean (DO) - Spaces
- 上传内容到 CDN 的 artisan 命令
- 访问 CDN 资产的简单 Facade
问题
- 此包是否是 Laravel FileSystem 的替代品,并且它们可以一起使用吗?
- 不是的,该包在 Laravel 4 中引入,其主要目的是通过从 CDN 加载它们到视图页面来管理您的 CDN 资产,并且可以轻松地在您的本地和 CDN 版本的文件之间切换。此外,它还允许您在指定资产目录和规则后使用单个命令上传所有资产。FileSystem 在 Laravel 5 中引入,旨在简化从 CDN 加载/上传文件的操作。它可以像此包一样用于从 CDN 加载资产,但由于它期望您逐个上传文件,因此将资产上传到 CDN 更困难。因此,此包仍然不是 Laravel FileSystem 的替代品,并且它们可以一起使用。
安装
通过 Composer
在您的项目中要求 jetcod/laravelcdn
composer require "jetcod/laravelcdn"
'providers' => array( //... Publiux\laravelcdn\CdnServiceProvider::class, ),
'aliases' => array( //... 'CDN' => Publiux\laravelcdn\Facades\CdnFacadeAccessor::class ),
环境配置
可以通过编辑 config/app.php 文件来配置此包。或者,您可以在 '.env' 文件中将许多这些选项设置为环境变量。
AWS 凭据
在 .env 文件中设置您的 AWS 凭据和其他设置。
注意:您应该在项目根目录中始终有一个 .env 文件,以保存您的敏感信息。通常不应将此文件提交到您的 VCS。
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
用法
您可以将您的资产推送到CDN,也可以使用以下命令将资产“清空”。
推送
只有更改过的资产会被推送到CDN。(谢谢)
上传资产到CDN
php artisan cdn:push
您可以在cdn.php配置文件中指定文件夹上传前缀。您的资产将被上传到S3上的该文件夹。
清空
从CDN删除资产
php artisan cdn:empty
注意:这将删除您的整个桶。如果您在推送资产时指定了上传文件夹,这可能不是您想要的。
加载资产
使用CDN外观调用CDN::asset()函数。
注意:与Laravel的asset一样,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
注意:与Laravel的elixir一样,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
注意:与Laravel 5.4的mix一样,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
测试
要运行测试,请在项目文件夹中运行以下命令。
$ composer test
支持
请通过GitHub请求支持或提交问题。
贡献
有关详细信息,请参阅CONTRIBUTING。
安全相关的问题
如果您发现任何安全相关的问题,请通过publiux@gmail.com发送电子邮件,而不是使用问题跟踪器以获得更快的响应。您应该同时打开一个问题。
致谢
- Hamid Ghorashi(分叉者)
- Raul Ruiz(分叉者)
- Mahmoud Zalt(原始开发者)
- Filipe Garcia(在分叉之前贡献,未获得认可的重复上传验证拉取请求)
- 原始项目的贡献者
- 此分叉的所有贡献者
许可
MIT许可证(MIT)。有关更多信息,请参阅许可文件。