Content Delivery Network (CDN) Package for Laravel
Requires
- php: >=5.5.0
- aws/aws-sdk-php: ~3.0
- illuminate/config: ^6.2
- illuminate/support: ^6.2
- symfony/console: 2.*|3.*
- symfony/finder: 2.*|3.*
Requires (Dev)
- mockery/mockery: 0.9.3
- phpunit/phpunit: ~4.0
This package is not auto-updated.
Last update: 2024-12-19 18:22:20 UTC
README
Content Delivery Network Package for Laravel
The package provides the developer the ability to upload his assets (or any public file) to a CDN with a single artisan command. And then it allows him to switch between the local and the online version of the files.
Laravel Support
- For Laravel 5.1 use the latest realease (
master
). - For Laravel 4.2 use the realease
v1.0.1
Last suport for L 4.2
Highlights
- Amazon Web Services - S3
- Artisan command to upload content to CDN
- Simple Facade to access CDN assets
Installation
Via Composer
Require vinelab/cdn
in your project:
composer require vinelab/cdn:*
Since this is a Laravel package we need to register the service provider:
Add the service provider to config/app.php
:
'providers' => array( //... Vinelab\Cdn\CdnServiceProvider::class, ),
Configuration
Set the Credentials in the .env
file.
Note: you must have an .env
file at the project root, to hold your sensitive information.
AWS_ACCESS_KEY_ID= AWS_SECRET_ACCESS_KEY=
Publish the package config file:
php artisan vendor:publish vinelab/cdn
You can find it at config/cdn.php
Default Provider
'default' => 'AwsS3',
CDN Provider Configuration
'aws' => [ 's3' => [ 'version' => 'latest', 'region' => '', 'buckets' => [ 'my-backup-bucket' => '*', ] ] ],
Multiple Buckets
'buckets' => [ 'my-default-bucket' => '*', // 'js-bucket' => ['public/js'], // 'css-bucket' => ['public/css'], // ... ]
Files & Directories
Include:
Specify directories, extensions, files and patterns to be uploaded.
'include' => [ 'directories' => ['public/dist'], 'extensions' => ['.js', '.css', '.yxz'], 'patterns' => ['**/*.coffee'], ],
Exclude:
Specify what to be ignored.
'exclude' => [ 'directories' => ['public/uploads'], 'files' => [''], 'extensions' => ['.TODO', '.txt'], 'patterns' => ['src/*', '.idea/*'], 'hidden' => true, // ignore hidden files ],
URL
Set the CDN URL:
'url' => 'https://s3.amazonaws.com',
HTTP
Set the HTTP parameters:
'http' => '['verify' => path-to-your-pem-certificate-file]',
Bypass
To load your LOCAL assets for testing or during development, set the bypass
option to true
:
'bypass' => true,
Cloudfront Support
'cloudfront' => [ 'use' => false, 'cdn_url' => '' ],
Other Configurations
'acl' => 'public-read', 'metadata' => [ ], 'expires' => gmdate("D, d M Y H:i:s T", strtotime("+5 years")), 'cache-control' => 'max-age=2628000',
You can always refer to the AWS S3 Documentation for more details: aws-sdk-php
Usage
Push
Upload assets to CDN
php artisan cdn:push
Empty
Delete assets from CDN
php artisan cdn:empty
Load Assets
Use the facade Cdn
to call the Cdn::asset()
function.
Note: the asset
works the same as the Laravel asset
it start looking for assets in the public/
directory:
{{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
Note: the elixir
works the same as the Laravel elixir
it loads the manifest.json file from build folder and choose the correct file revision generated by 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
To use a file from outside the public/
directory, anywhere in app/
use the Cdn::path()
function:
{{Cdn::path('private/something/file.txt')}} // example result: https://css-bucket.s3.amazonaws.com/private/something/file.txt
Test
To run the tests, run the following command from the project folder.
$ ./vendor/bin/phpunit
Support
Contributing
Please see CONTRIBUTING for details.
Security
If you discover any security related issues, please email mahmoud@vinelab.com instead of using the issue tracker.
Credits
License
The MIT License (MIT). Please see License File for more information.