chore(compose): ресурсные лимиты для всех сервисов
Шаг 0.4 плана production-готовности (подтверждён пользователем): - mem_limit/cpus/pids_limit по docker stats прода + запас - все 4 compose-файла + серверный бэкап .bak.serverfix - config валиден везде
This commit is contained in:
@@ -405,3 +405,14 @@
|
||||
- Как проверялось: vitest 107/107; check/lint/build чисто.
|
||||
- Влияние на поиск/UX: нет.
|
||||
- Подводные камни: GET /api/notifications без серверной пагинации — при очень больших историях «Загрузить ещё» работает на клиенте; серверная пагинация — отдельная задача. Полный axe-проход по всему приложению — задел, не входил.
|
||||
|
||||
---
|
||||
|
||||
## [0.4] Ресурсные лимиты во все compose-файлы [ПРОД]
|
||||
|
||||
- Статус: ⏳ деплой
|
||||
- Зачем: утечка в одном сервисе не роняет хост (аудит, Фаза 0). Подтверждено пользователем 2026-09-08.
|
||||
- Что изменено: mem_limit/cpus/pids_limit во всех 4 compose-файлах + серверный бэкап .bak.serverfix (крит. правило №1; преддеплойная копия .bak2-20260908). Значения по docker stats прода 2026-09-07 + запас (сервер 6 ГБ/3 CPU, на хосте другие стеки): app 1g/1.5/256, document-worker 1g/1.0/256, db 768m/0.75/128, minio 256m/0.5/64, webdav 64m/0.25/32, ollama 2g/2.0/64 (модель в RAM на ночном батче), traccar 768m/0.5/128, osrm 512m/0.5/32. proxy (Traefik) сознательно без лимита — критичная инфраструктура хоста.
|
||||
- Как проверялось: docker compose config валиден для всех 4 файлов и для бэкапа на сервере.
|
||||
- Влияние на поиск/UX: нет.
|
||||
- Подводные камни: сумма лимитов ~6.3 ГБ > 5.9 ГБ RAM — лимиты это потолки, не резерв; ollama в простое 36 МБ. На проде лимиты применяются к app/document-worker при ближайшем деплое; остальные сервисы — при их пересоздании.
|
||||
|
||||
@@ -29,6 +29,10 @@ services:
|
||||
timeout: 5s
|
||||
retries: 10
|
||||
start_period: 10s
|
||||
# Ресурсные лимиты (шаг 0.4)
|
||||
mem_limit: 768m
|
||||
cpus: 0.75
|
||||
pids_limit: 128
|
||||
|
||||
minio:
|
||||
# Тег запинен: совпадает с версией на продакшене (RELEASE.2025-09-07T16-13-09Z)
|
||||
@@ -50,6 +54,10 @@ services:
|
||||
timeout: 5s
|
||||
retries: 10
|
||||
start_period: 15s
|
||||
# Ресурсные лимиты (шаг 0.4)
|
||||
mem_limit: 256m
|
||||
cpus: 0.5
|
||||
pids_limit: 64
|
||||
|
||||
webdav:
|
||||
# Тег запинен: совпадает с версией на продакшене (rclone v1.74.0)
|
||||
@@ -79,6 +87,10 @@ services:
|
||||
depends_on:
|
||||
minio:
|
||||
condition: service_healthy
|
||||
# Ресурсные лимиты (шаг 0.4)
|
||||
mem_limit: 64m
|
||||
cpus: 0.25
|
||||
pids_limit: 32
|
||||
|
||||
document-worker:
|
||||
# Option 1: use prebuilt image (requires GHCR auth, see deploy.yml)
|
||||
@@ -103,6 +115,10 @@ services:
|
||||
timeout: 10s
|
||||
retries: 3
|
||||
start_period: 30s
|
||||
# Ресурсные лимиты (шаг 0.4)
|
||||
mem_limit: 1g
|
||||
cpus: 1.0
|
||||
pids_limit: 256
|
||||
|
||||
ollama:
|
||||
# Тег запинен: совпадает с версией на продакшене (ollama 0.30.10)
|
||||
@@ -120,6 +136,10 @@ services:
|
||||
timeout: 5s
|
||||
retries: 12
|
||||
start_period: 30s
|
||||
# Ресурсные лимиты (шаг 0.4)
|
||||
mem_limit: 2g
|
||||
cpus: 2.0
|
||||
pids_limit: 64
|
||||
|
||||
volumes:
|
||||
postgres_data:
|
||||
|
||||
@@ -38,6 +38,10 @@ services:
|
||||
minio:
|
||||
condition: service_healthy
|
||||
required: false
|
||||
# Ресурсные лимиты (шаг 0.4)
|
||||
mem_limit: 1g
|
||||
cpus: 1.5
|
||||
pids_limit: 256
|
||||
|
||||
db:
|
||||
# Тег запинен: pgvector 0.8.4 + PostgreSQL 16 (совпадает с локальным стендом)
|
||||
@@ -55,6 +59,10 @@ services:
|
||||
timeout: 5s
|
||||
retries: 10
|
||||
start_period: 10s
|
||||
# Ресурсные лимиты (шаг 0.4)
|
||||
mem_limit: 768m
|
||||
cpus: 0.75
|
||||
pids_limit: 128
|
||||
|
||||
minio:
|
||||
# Тег запинен: совпадает с версией на продакшене (RELEASE.2025-09-07T16-13-09Z)
|
||||
@@ -76,6 +84,10 @@ services:
|
||||
timeout: 5s
|
||||
retries: 10
|
||||
start_period: 15s
|
||||
# Ресурсные лимиты (шаг 0.4)
|
||||
mem_limit: 256m
|
||||
cpus: 0.5
|
||||
pids_limit: 64
|
||||
|
||||
webdav:
|
||||
# Тег запинен: совпадает с версией на продакшене (rclone v1.74.0)
|
||||
@@ -105,6 +117,10 @@ services:
|
||||
depends_on:
|
||||
minio:
|
||||
condition: service_healthy
|
||||
# Ресурсные лимиты (шаг 0.4)
|
||||
mem_limit: 64m
|
||||
cpus: 0.25
|
||||
pids_limit: 32
|
||||
|
||||
ollama:
|
||||
# Тег запинен: совпадает с версией на продакшене (ollama 0.30.10)
|
||||
@@ -122,6 +138,10 @@ services:
|
||||
timeout: 5s
|
||||
retries: 12
|
||||
start_period: 30s
|
||||
# Ресурсные лимиты (шаг 0.4)
|
||||
mem_limit: 2g
|
||||
cpus: 2.0
|
||||
pids_limit: 64
|
||||
|
||||
document-worker:
|
||||
build:
|
||||
@@ -140,6 +160,10 @@ services:
|
||||
timeout: 10s
|
||||
retries: 3
|
||||
start_period: 30s
|
||||
# Ресурсные лимиты (шаг 0.4)
|
||||
mem_limit: 1g
|
||||
cpus: 1.0
|
||||
pids_limit: 256
|
||||
|
||||
volumes:
|
||||
crm_data:
|
||||
|
||||
@@ -5,6 +5,10 @@ services:
|
||||
depends_on:
|
||||
db:
|
||||
condition: service_healthy
|
||||
# Ресурсные лимиты (шаг 0.4)
|
||||
mem_limit: 1g
|
||||
cpus: 1.5
|
||||
pids_limit: 256
|
||||
|
||||
db:
|
||||
image: postgres:16-alpine
|
||||
@@ -20,6 +24,10 @@ services:
|
||||
interval: 5s
|
||||
timeout: 5s
|
||||
retries: 10
|
||||
# Ресурсные лимиты (шаг 0.4)
|
||||
mem_limit: 768m
|
||||
cpus: 0.75
|
||||
pids_limit: 128
|
||||
|
||||
volumes:
|
||||
postgres_data:
|
||||
|
||||
@@ -13,6 +13,10 @@ services:
|
||||
volumes:
|
||||
- crm_data:/app/data
|
||||
restart: unless-stopped
|
||||
# Ресурсные лимиты (шаг 0.4): значения = потребление на проде + запас (docker stats 2026-09-07)
|
||||
mem_limit: 1g
|
||||
cpus: 1.5
|
||||
pids_limit: 256
|
||||
depends_on:
|
||||
db:
|
||||
condition: service_healthy
|
||||
@@ -41,6 +45,9 @@ services:
|
||||
timeout: 5s
|
||||
retries: 10
|
||||
start_period: 10s
|
||||
mem_limit: 768m
|
||||
cpus: 0.75
|
||||
pids_limit: 128
|
||||
|
||||
minio:
|
||||
# Тег запинен: совпадает с версией на продакшене (RELEASE.2025-09-07T16-13-09Z)
|
||||
@@ -64,6 +71,9 @@ services:
|
||||
timeout: 5s
|
||||
retries: 10
|
||||
start_period: 15s
|
||||
mem_limit: 256m
|
||||
cpus: 0.5
|
||||
pids_limit: 64
|
||||
|
||||
webdav:
|
||||
# Тег запинен: совпадает с версией на продакшене (rclone v1.74.0)
|
||||
@@ -95,6 +105,9 @@ services:
|
||||
depends_on:
|
||||
minio:
|
||||
condition: service_healthy
|
||||
mem_limit: 64m
|
||||
cpus: 0.25
|
||||
pids_limit: 32
|
||||
|
||||
ollama:
|
||||
# Тег запинен: совпадает с версией на продакшене (ollama 0.30.10)
|
||||
@@ -115,6 +128,10 @@ services:
|
||||
timeout: 5s
|
||||
retries: 12
|
||||
start_period: 30s
|
||||
# Ollama держит модель в RAM во время ночного батча (bge-m3 ~1-2 ГБ)
|
||||
mem_limit: 2g
|
||||
cpus: 2.0
|
||||
pids_limit: 64
|
||||
# Раскомментируйте секцию ниже для поддержки NVIDIA GPU:
|
||||
# deploy:
|
||||
# resources:
|
||||
@@ -140,6 +157,10 @@ services:
|
||||
timeout: 10s
|
||||
retries: 3
|
||||
start_period: 30s
|
||||
# LibreOffice при конвертации DOCX→PDF может потреблять сотни МБ
|
||||
mem_limit: 1g
|
||||
cpus: 1.0
|
||||
pids_limit: 256
|
||||
|
||||
traccar:
|
||||
# Тег запинен: совпадает с версией на продакшене (traccar 6.15.2)
|
||||
@@ -165,6 +186,9 @@ services:
|
||||
- traccar_logs:/opt/traccar/logs
|
||||
- traccar_data:/opt/traccar/data
|
||||
- ./traccar/traccar.xml:/opt/traccar/conf/traccar.xml:ro
|
||||
mem_limit: 768m
|
||||
cpus: 0.5
|
||||
pids_limit: 128
|
||||
|
||||
# Map matching (привязка GPS-треков к дорогам) — OSRM, карта Приволжского округа.
|
||||
# Только внутренняя Docker-сеть (приложение ходит по http://osrm:5000).
|
||||
@@ -177,6 +201,9 @@ services:
|
||||
command: osrm-routed --algorithm mld /data/region.osrm
|
||||
volumes:
|
||||
- ./osrm-data-ru:/data:ro
|
||||
mem_limit: 512m
|
||||
cpus: 0.5
|
||||
pids_limit: 32
|
||||
|
||||
volumes:
|
||||
crm_data:
|
||||
|
||||
Reference in New Issue
Block a user