Raise all file upload limits to 50MB across the stack

PHP (docker/php.ini via conf.d — loaded automatically, no -c flag needed):
  upload_max_filesize 2M -> 50M
  post_max_size       8M -> 55M

Nginx: client_max_body_size 25M -> 55M

Livewire (config/livewire.php published):
  temporary_file_upload rules max 12MB -> 50MB (max:51200)

Laravel validation rules (all in KB):
  profile photo:        5120 (5MB)  -> 51200 (50MB)
  posts image:          5120 (5MB)  -> 51200 (50MB)
  anuncios image:       5120 (5MB)  -> 51200 (50MB)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-05-09 08:12:33 -06:00
parent 56f4e3b226
commit 9851c887ec
8 changed files with 198 additions and 8 deletions
+1 -1
View File
@@ -17,7 +17,7 @@ RUN mkdir -p storage/framework/{sessions,views,cache} \
RUN php artisan storage:link RUN php artisan storage:link
RUN printf "upload_max_filesize=20M\npost_max_size=25M\n" > /app/php.ini COPY docker/php.ini /usr/local/etc/php/conf.d/uploads.ini
COPY nginx.conf /etc/nginx/nginx.conf COPY nginx.conf /etc/nginx/nginx.conf
COPY supervisord.conf /etc/supervisord.conf COPY supervisord.conf /etc/supervisord.conf
@@ -22,7 +22,7 @@ class UpdateUserProfileInformation implements UpdatesUserProfileInformation
'apellidoPaterno' => ['nullable', 'string', 'max:255'], 'apellidoPaterno' => ['nullable', 'string', 'max:255'],
'apellidoMaterno' => ['nullable', 'string', 'max:255'], 'apellidoMaterno' => ['nullable', 'string', 'max:255'],
'email' => ['required', 'email', 'max:255', Rule::unique('users')->ignore($user->id)], 'email' => ['required', 'email', 'max:255', Rule::unique('users')->ignore($user->id)],
'photo' => ['nullable', 'mimes:jpg,jpeg,png', 'max:5120'], 'photo' => ['nullable', 'mimes:jpg,jpeg,png', 'max:51200'],
])->validateWithBag('updateProfileInformation'); ])->validateWithBag('updateProfileInformation');
if (isset($input['photo'])) { if (isset($input['photo'])) {
+2 -2
View File
@@ -27,7 +27,7 @@ class AnuncioController extends Controller
$data = $request->validate([ $data = $request->validate([
'title' => 'required|string|max:200', 'title' => 'required|string|max:200',
'body' => 'nullable|string|max:3000', 'body' => 'nullable|string|max:3000',
'image' => 'nullable|image|max:5120', 'image' => 'nullable|image|max:51200',
'type' => 'required|in:info,promocion,mantenimiento,aviso', 'type' => 'required|in:info,promocion,mantenimiento,aviso',
'audience' => 'required|array|min:1', 'audience' => 'required|array|min:1',
'audience.*' => 'string', 'audience.*' => 'string',
@@ -63,7 +63,7 @@ class AnuncioController extends Controller
$data = $request->validate([ $data = $request->validate([
'title' => 'required|string|max:200', 'title' => 'required|string|max:200',
'body' => 'nullable|string|max:3000', 'body' => 'nullable|string|max:3000',
'image' => 'nullable|image|max:5120', 'image' => 'nullable|image|max:51200',
'type' => 'required|in:info,promocion,mantenimiento,aviso', 'type' => 'required|in:info,promocion,mantenimiento,aviso',
'audience' => 'required|array|min:1', 'audience' => 'required|array|min:1',
'audience.*' => 'string', 'audience.*' => 'string',
+1 -1
View File
@@ -29,7 +29,7 @@ class PostController extends Controller
{ {
$request->validate([ $request->validate([
'body' => 'nullable|string|max:2000', 'body' => 'nullable|string|max:2000',
'image' => 'nullable|image|max:5120', 'image' => 'nullable|image|max:51200',
]); ]);
if (!$request->filled('body') && !$request->hasFile('image')) { if (!$request->filled('body') && !$request->hasFile('image')) {
+186
View File
@@ -0,0 +1,186 @@
<?php
return [
/*
|---------------------------------------------------------------------------
| Class Namespace
|---------------------------------------------------------------------------
|
| This value sets the root class namespace for Livewire component classes in
| your application. This value will change where component auto-discovery
| finds components. It's also referenced by the file creation commands.
|
*/
'class_namespace' => 'App\\Livewire',
/*
|---------------------------------------------------------------------------
| View Path
|---------------------------------------------------------------------------
|
| This value is used to specify where Livewire component Blade templates are
| stored when running file creation commands like `artisan make:livewire`.
| It is also used if you choose to omit a component's render() method.
|
*/
'view_path' => resource_path('views/livewire'),
/*
|---------------------------------------------------------------------------
| Layout
|---------------------------------------------------------------------------
| The view that will be used as the layout when rendering a single component
| as an entire page via `Route::get('/post/create', CreatePost::class);`.
| In this case, the view returned by CreatePost will render into $slot.
|
*/
'layout' => 'components.layouts.app',
/*
|---------------------------------------------------------------------------
| Lazy Loading Placeholder
|---------------------------------------------------------------------------
| Livewire allows you to lazy load components that would otherwise slow down
| the initial page load. Every component can have a custom placeholder or
| you can define the default placeholder view for all components below.
|
*/
'lazy_placeholder' => null,
/*
|---------------------------------------------------------------------------
| Temporary File Uploads
|---------------------------------------------------------------------------
|
| Livewire handles file uploads by storing uploads in a temporary directory
| before the file is stored permanently. All file uploads are directed to
| a global endpoint for temporary storage. You may configure this below:
|
*/
'temporary_file_upload' => [
'disk' => null, // Example: 'local', 's3' | Default: 'default'
'rules' => ['required', 'file', 'max:51200'], // Example: ['file', 'mimes:png,jpg'] | Default: ['required', 'file', 'max:12288'] (12MB)
'directory' => null, // Example: 'tmp' | Default: 'livewire-tmp'
'middleware' => null, // Example: 'throttle:5,1' | Default: 'throttle:60,1'
'preview_mimes' => [ // Supported file types for temporary pre-signed file URLs...
'png', 'gif', 'bmp', 'svg', 'wav', 'mp4',
'mov', 'avi', 'wmv', 'mp3', 'm4a',
'jpg', 'jpeg', 'mpga', 'webp', 'wma',
],
'max_upload_time' => 5, // Max duration (in minutes) before an upload is invalidated...
'cleanup' => true, // Should cleanup temporary uploads older than 24 hrs...
],
/*
|---------------------------------------------------------------------------
| Render On Redirect
|---------------------------------------------------------------------------
|
| This value determines if Livewire will run a component's `render()` method
| after a redirect has been triggered using something like `redirect(...)`
| Setting this to true will render the view once more before redirecting
|
*/
'render_on_redirect' => false,
/*
|---------------------------------------------------------------------------
| Eloquent Model Binding
|---------------------------------------------------------------------------
|
| Previous versions of Livewire supported binding directly to eloquent model
| properties using wire:model by default. However, this behavior has been
| deemed too "magical" and has therefore been put under a feature flag.
|
*/
'legacy_model_binding' => false,
/*
|---------------------------------------------------------------------------
| Auto-inject Frontend Assets
|---------------------------------------------------------------------------
|
| By default, Livewire automatically injects its JavaScript and CSS into the
| <head> and <body> of pages containing Livewire components. By disabling
| this behavior, you need to use @livewireStyles and @livewireScripts.
|
*/
'inject_assets' => true,
/*
|---------------------------------------------------------------------------
| Navigate (SPA mode)
|---------------------------------------------------------------------------
|
| By adding `wire:navigate` to links in your Livewire application, Livewire
| will prevent the default link handling and instead request those pages
| via AJAX, creating an SPA-like effect. Configure this behavior here.
|
*/
'navigate' => [
'show_progress_bar' => true,
'progress_bar_color' => '#2299dd',
],
/*
|---------------------------------------------------------------------------
| HTML Morph Markers
|---------------------------------------------------------------------------
|
| Livewire intelligently "morphs" existing HTML into the newly rendered HTML
| after each update. To make this process more reliable, Livewire injects
| "markers" into the rendered Blade surrounding @if, @class & @foreach.
|
*/
'inject_morph_markers' => true,
/*
|---------------------------------------------------------------------------
| Smart Wire Keys
|---------------------------------------------------------------------------
|
| Livewire uses loops and keys used within loops to generate smart keys that
| are applied to nested components that don't have them. This makes using
| nested components more reliable by ensuring that they all have keys.
|
*/
'smart_wire_keys' => false,
/*
|---------------------------------------------------------------------------
| Pagination Theme
|---------------------------------------------------------------------------
|
| When enabling Livewire's pagination feature by using the `WithPagination`
| trait, Livewire will use Tailwind templates to render pagination views
| on the page. If you want Bootstrap CSS, you can specify: "bootstrap"
|
*/
'pagination_theme' => 'tailwind',
/*
|---------------------------------------------------------------------------
| Release Token
|---------------------------------------------------------------------------
|
| This token is stored client-side and sent along with each request to check
| a users session to see if a new release has invalidated it. If there is
| a mismatch it will throw an error and prompt for a browser refresh.
|
*/
'release_token' => 'a',
];
+4
View File
@@ -0,0 +1,4 @@
upload_max_filesize=50M
post_max_size=55M
memory_limit=256M
max_execution_time=120
+1 -1
View File
@@ -10,7 +10,7 @@ http {
sendfile on; sendfile on;
keepalive_timeout 65; keepalive_timeout 65;
client_max_body_size 25M; client_max_body_size 55M;
proxy_read_timeout 120s; proxy_read_timeout 120s;
proxy_send_timeout 120s; proxy_send_timeout 120s;
+2 -2
View File
@@ -7,11 +7,11 @@ autostart=true
autorestart=true autorestart=true
[program:laravel] [program:laravel]
command=php -c /app/php.ini /app/artisan serve --host=127.0.0.1 --port=8081 command=php /app/artisan serve --host=127.0.0.1 --port=8081
autostart=true autostart=true
autorestart=true autorestart=true
[program:reverb] [program:reverb]
command=php -c /app/php.ini /app/artisan reverb:start --host=0.0.0.0 --port=8085 command=php /app/artisan reverb:start --host=0.0.0.0 --port=8085
autostart=true autostart=true
autorestart=true autorestart=true