From d30398587705ad3f75032d5bd8dfcdfe63a8f2b0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CNaeel=E2=80=9D?= Date: Fri, 10 Jul 2026 20:19:03 +0400 Subject: [PATCH] =?UTF-8?q?fix:=20remove=20Gunicorn=20field=5Fsize/body=20?= =?UTF-8?q?limits=20(8KB=20default=20was=20truncating=20uploads),=20bump?= =?UTF-8?q?=201.0.4=E2=86=921.0.5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Dockerfile | 2 +- History/2026-07-10-fix-gunicorn-limits.md | 21 ++++++++++++++++++ History/2026-07-10-session-start.md | 26 +++++++++++++++++++++++ site/app.py | 2 +- 4 files changed, 49 insertions(+), 2 deletions(-) create mode 100644 History/2026-07-10-fix-gunicorn-limits.md create mode 100644 History/2026-07-10-session-start.md diff --git a/Dockerfile b/Dockerfile index c0cccca..08fa468 100644 --- a/Dockerfile +++ b/Dockerfile @@ -4,4 +4,4 @@ COPY requirements.txt . RUN pip install --no-cache-dir -r requirements.txt COPY site /app/site EXPOSE 5000 -CMD ["gunicorn", "--bind", "0.0.0.0:5000", "--timeout", "300", "--workers", "1", "site.app:app"] +CMD ["gunicorn", "--bind", "0.0.0.0:5000", "--timeout", "300", "--workers", "1", "--limit-request-field_size", "0", "--limit-request-body", "0", "site.app:app"] diff --git a/History/2026-07-10-fix-gunicorn-limits.md b/History/2026-07-10-fix-gunicorn-limits.md new file mode 100644 index 0000000..844c4bc --- /dev/null +++ b/History/2026-07-10-fix-gunicorn-limits.md @@ -0,0 +1,21 @@ +# 2026-07-10 — Фикс обрезания файлов + +## Проблема +Файлы > ~6 КБ обрезаются при загрузке. Даже 64 КБ не проходят. + +## Причина +Gunicorn по умолчанию `--limit-request-field_size = 8190` (8 КБ). +Клиент отправляет файл как base64-строку в поле формы `data`. +Base64 на ~33% больше исходного файла → для файла 64 КБ поле будет ~85 КБ → Gunicorn обрезает до 8 КБ. + +## Решение +1. `Dockerfile`: добавить `--limit-request-field_size 0 --limit-request-body 0` +2. `site/app.py`: bump версии 1.0.4 → 1.0.5 + +## Изменённые файлы +- `/home/naeel/nubes/loadtest/Dockerfile` — добавлены `--limit-request-field_size 0 --limit-request-body 0` +- `/home/naeel/nubes/loadtest/site/app.py` — версия 1.0.4 → 1.0.5 + +## Результат +- Синтаксис OK (`py_compile`) +- Готово к деплою diff --git a/History/2026-07-10-session-start.md b/History/2026-07-10-session-start.md new file mode 100644 index 0000000..2b99112 --- /dev/null +++ b/History/2026-07-10-session-start.md @@ -0,0 +1,26 @@ +# Сессия 2026-07-10 — Начало + +## Контекст +Новая сессия в workspace `loadtest`. История чата и session memory пусты. + +## Что за проект +**loadtest** — сервис для тестирования скорости загрузки файлов. + +- Flask + Gunicorn (Python 3.12), Docker +- Порт 5000 +- Версия: 1.0.4 + +### Файлы +- `site/app.py` — сервер: `GET /` (index), `GET /health`, `POST /upload` (замер скорости) +- `site/templates/index.html` — веб-интерфейс с таблицей файлов +- `site/static/app.js` — логика клиента: выбор файлов, XHR загрузка, отображение прогресса/скорости +- `Dockerfile` — сборка и запуск через Gunicorn (timeout 300s, 1 worker) +- `requirements.txt` — flask, gunicorn + +### Режимы загрузки +1. **Прямой (multipart)** — через `request.files` +2. **Base64** — через поле `data` в form (для прокси типа DDOS-Guard) + +### Действия +- Создана папка `History/` +- Создан этот файл diff --git a/site/app.py b/site/app.py index ef3a50f..dfff25d 100644 --- a/site/app.py +++ b/site/app.py @@ -4,7 +4,7 @@ from flask import Flask, render_template, request app = Flask(__name__) -VERSION = '1.0.4' +VERSION = '1.0.5' @app.route('/')