Laravel CDN Assets Manager
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 [email protected] instead of using the issue tracker.
Credits
License
The MIT License (MIT). Please see License File for more information.