From 1a3b6b61444e4afe93aee0224735eba735c9eb1c Mon Sep 17 00:00:00 2001 From: Vincent Vanwaelscappel Date: Mon, 24 Jul 2023 18:34:29 +0200 Subject: [PATCH] wait #6108 @3 --- .../supervisor/medialibrary-worker.conf | 11 ++ .../Controllers/Admin/StorageController.php | 6 + config/media-library.php | 173 +++++++++++++----- 3 files changed, 140 insertions(+), 50 deletions(-) create mode 100644 .docker/config/supervisor/medialibrary-worker.conf diff --git a/.docker/config/supervisor/medialibrary-worker.conf b/.docker/config/supervisor/medialibrary-worker.conf new file mode 100644 index 000000000..492bff15e --- /dev/null +++ b/.docker/config/supervisor/medialibrary-worker.conf @@ -0,0 +1,11 @@ +[program:medialibrary-worker] +process_name=%(program_name)s_%(process_num)02d +command=php /application/artisan queue:work --queue=medialibrary --timeout=0 +autostart=true +autorestart=true +user=toolbox +group=www-data +numprocs=12 +redirect_stderr=true +stdout_logfile=/proc/self/fd/2 +stopwaitsecs=3600 diff --git a/app/Http/Controllers/Admin/StorageController.php b/app/Http/Controllers/Admin/StorageController.php index 3ebdc02d9..06c2dd3f5 100644 --- a/app/Http/Controllers/Admin/StorageController.php +++ b/app/Http/Controllers/Admin/StorageController.php @@ -3,8 +3,10 @@ namespace App\Http\Controllers\Admin; use App\Http\Controllers\Controller; +use Cubist\Backpack\Facades\App; use Cubist\Backpack\Http\Controllers\Base\XSendFileController; use Cubist\Backpack\Magic\Models\CubistMagicAbstractModel; +use Illuminate\Support\Facades\Artisan; use Spatie\MediaLibrary\MediaCollections\Models\Media; class StorageController extends Controller @@ -25,6 +27,10 @@ class StorageController extends Controller abort(404); } $p = storage_path('app/public/') . $path; + if (!file_exists($p)) { + $cmd = 'media-library:regenerate --force --only-missing --ids=' . $mediaId; + Artisan::call($cmd); + } return XSendFileController::sendfile($p); } } diff --git a/config/media-library.php b/config/media-library.php index 40748bc11..f745f06ea 100644 --- a/config/media-library.php +++ b/config/media-library.php @@ -1,5 +1,7 @@ 1024 * 1024 * 1000, + 'max_file_size' => 1024 * 1024 * 1000, // 10MB + + /* + * This queue connection will be used to generate derived and responsive images. + * Leave empty to use the default queue connection. + */ + 'queue_connection_name' => 'sync', /* * This queue will be used to generate derived and responsive images. @@ -20,70 +28,53 @@ return [ */ 'queue_name' => '', + /* + * By default all conversions will be performed on a queue. + */ + 'queue_conversions_by_default' => env('QUEUE_CONVERSIONS_BY_DEFAULT', true), + /* * The fully qualified class name of the media model. */ 'media_model' => Spatie\MediaLibrary\MediaCollections\Models\Media::class, - 'remote' => [ /* - * Any extra headers that should be included when uploading media to - * a remote disk. Even though supported headers may vary between - * different drivers, a sensible default has been provided. + * The fully qualified class name of the model used for temporary uploads. * - * Supported by S3: CacheControl, Expires, StorageClass, - * ServerSideEncryption, Metadata, ACL, ContentEncoding + * This model is only used in Media Library Pro (https://medialibrary.pro) */ - 'extra_headers' => [ - 'CacheControl' => 'max-age=604800', - ], - ], - - 'responsive_images' => [ + 'temporary_upload_model' => Spatie\MediaLibraryPro\Models\TemporaryUpload::class, /* - * This class is responsible for calculating the target widths of the responsive - * images. By default we optimize for filesize and create variations that each are 20% - * smaller than the previous one. More info in the documentation. - * - * https://docs.spatie.be/laravel-medialibrary/v8/advanced-usage/generating-responsive-images + * When enabled, Media Library Pro will only process temporary uploads that were uploaded + * in the same session. You can opt to disable this for stateless usage of + * the pro components. */ - 'width_calculator' => Spatie\MediaLibrary\ResponsiveImages\WidthCalculator\FileSizeOptimizedWidthCalculator::class, + 'enable_temporary_uploads_session_affinity' => true, /* - * By default rendering media to a responsive image will add some javascript and a tiny placeholder. - * This ensures that the browser can already determine the correct layout. + * When enabled, Media Library pro will generate thumbnails for uploaded file. */ - 'use_tiny_placeholders' => true, - - /* - * This class will generate the tiny placeholder used for progressive image loading. By default - * the medialibrary will use a tiny blurred jpg image. - */ - 'tiny_placeholder_generator' => Spatie\MediaLibrary\ResponsiveImages\TinyPlaceholderGenerator\Blurred::class, - ], + 'generate_thumbnails_for_temporary_uploads' => true, /* - * When converting Media instances to response the medialibrary will add - * a `loading` attribute to the `img` tag. Here you can set the default - * value of that attribute. - * - * Possible values: 'auto', 'lazy' and 'eager, - * - * More info: https://css-tricks.com/native-lazy-loading/ + * This is the class that is responsible for naming generated files. */ - 'default_loading_attribute_value' => 'auto', + 'file_namer' => Spatie\MediaLibrary\Support\FileNamer\DefaultFileNamer::class, /* - * This is the class that is responsible for naming conversion files. By default, - * it will use the filename of the original and concatenate the conversion name to it. + * The class that contains the strategy for determining a media file's path. */ - 'conversion_file_namer' => \Spatie\MediaLibrary\Conversions\DefaultConversionFileNamer::class, + 'path_generator' => Spatie\MediaLibrary\Support\PathGenerator\DefaultPathGenerator::class, /* - * The class that contains the strategy for determining a media file's path. + * Here you can specify which path generator should be used for the given class. */ - 'path_generator' => Spatie\MediaLibrary\Support\PathGenerator\DefaultPathGenerator::class, + 'custom_path_generators' => [ + // Model::class => PathGenerator::class + // or + // 'model_morph_alias' => PathGenerator::class + ], /* * When urls to files get generated, this class will be called. Use the default @@ -91,6 +82,12 @@ return [ */ 'url_generator' => Spatie\MediaLibrary\Support\UrlGenerator\DefaultUrlGenerator::class, + /* + * Moves media on updating to keep path consistent. Enable it only with a custom + * PathGenerator that uses, for example, the media UUID. + */ + 'moves_media_on_update' => false, + /* * Whether to activate versioning when urls to files get generated. * When activated, this attaches a ?v=xx query string to the URL. @@ -104,6 +101,8 @@ return [ */ 'image_optimizers' => [ Spatie\ImageOptimizer\Optimizers\Jpegoptim::class => [ + '-m85', // set maximum quality to 85% + '--force', // ensure that progressive generation is always done also if a little bigger '--strip-all', // this strips out all text information such as comments and EXIF data '--all-progressive', // this will make sure the resulting image is a progressive one ], @@ -122,6 +121,12 @@ return [ '-b', // required parameter for this package '-O3', // this produces the slowest but best results ], + Spatie\ImageOptimizer\Optimizers\Cwebp::class => [ + '-m 6', // for the slowest compression method in order to get the best compression. + '-pass 10', // for maximizing the amount of analysis pass. + '-mt', // multithreading for some speed improvements. + '-q 90', //quality factor that brings the least noticeable changes. + ], ], /* @@ -135,6 +140,12 @@ return [ Spatie\MediaLibrary\Conversions\ImageGenerators\Video::class, ], + /* + * The path where to store temporary files while performing image conversions. + * If set to null, storage_path('media-library/temp') will be used. + */ + 'temporary_directory_path' => null, + /* * The engine that should perform the image conversions. * Should be either `gd` or `imagick`. @@ -149,18 +160,80 @@ return [ 'ffmpeg_path' => env('FFMPEG_PATH', '/usr/bin/ffmpeg'), 'ffprobe_path' => env('FFPROBE_PATH', '/usr/bin/ffprobe'), - /* - * The path where to store temporary files while performing image conversions. - * If set to null, storage_path('media-library/temp') will be used. - */ - 'temporary_directory_path' => null, - /* * Here you can override the class names of the jobs used by this package. Make sure * your custom jobs extend the ones provided by the package. */ 'jobs' => [ - 'perform_conversions' => \Spatie\MediaLibrary\Conversions\Jobs\PerformConversionsJob::class, - 'generate_responsive_images' => \Spatie\MediaLibrary\ResponsiveImages\Jobs\GenerateResponsiveImagesJob::class, + 'perform_conversions' => PerformConversionsJob::class, + 'generate_responsive_images' => Spatie\MediaLibrary\ResponsiveImages\Jobs\GenerateResponsiveImagesJob::class, + ], + + /* + * When using the addMediaFromUrl method you may want to replace the default downloader. + * This is particularly useful when the url of the image is behind a firewall and + * need to add additional flags, possibly using curl. + */ + 'media_downloader' => Spatie\MediaLibrary\Downloaders\DefaultDownloader::class, + + 'remote' => [ + /* + * Any extra headers that should be included when uploading media to + * a remote disk. Even though supported headers may vary between + * different drivers, a sensible default has been provided. + * + * Supported by S3: CacheControl, Expires, StorageClass, + * ServerSideEncryption, Metadata, ACL, ContentEncoding + */ + 'extra_headers' => [ + 'CacheControl' => 'max-age=604800', + ], + ], + + 'responsive_images' => [ + /* + * This class is responsible for calculating the target widths of the responsive + * images. By default we optimize for filesize and create variations that each are 30% + * smaller than the previous one. More info in the documentation. + * + * https://docs.spatie.be/laravel-medialibrary/v9/advanced-usage/generating-responsive-images + */ + 'width_calculator' => Spatie\MediaLibrary\ResponsiveImages\WidthCalculator\FileSizeOptimizedWidthCalculator::class, + + /* + * By default rendering media to a responsive image will add some javascript and a tiny placeholder. + * This ensures that the browser can already determine the correct layout. + */ + 'use_tiny_placeholders' => true, + + /* + * This class will generate the tiny placeholder used for progressive image loading. By default + * the media library will use a tiny blurred jpg image. + */ + 'tiny_placeholder_generator' => Spatie\MediaLibrary\ResponsiveImages\TinyPlaceholderGenerator\Blurred::class, ], + + /* + * When enabling this option, a route will be registered that will enable + * the Media Library Pro Vue and React components to move uploaded files + * in a S3 bucket to their right place. + */ + 'enable_vapor_uploads' => env('ENABLE_MEDIA_LIBRARY_VAPOR_UPLOADS', false), + + /* + * When converting Media instances to response the media library will add + * a `loading` attribute to the `img` tag. Here you can set the default + * value of that attribute. + * + * Possible values: 'lazy', 'eager', 'auto' or null if you don't want to set any loading instruction. + * + * More info: https://css-tricks.com/native-lazy-loading/ + */ + 'default_loading_attribute_value' => null, + + /* + * You can specify a prefix for that is used for storing all media. + * If you set this to `/my-subdir`, all your media will be stored in a `/my-subdir` directory. + */ + 'prefix' => env('MEDIA_PREFIX', ''), ]; -- 2.39.5