deploy: VPS bootstrap (WSL2+Docker) + lightweight compose overlay for 4GB RAM + harden

This commit is contained in:
qananasikq
2026-04-18 00:54:48 +03:00
parent a8c5f8aa41
commit 39c8e0fc9f
11 changed files with 442 additions and 53 deletions

76
docker-compose.vps.yml Normal file
View File

@@ -0,0 +1,76 @@
# Overlay для слабого VPS (4 vCPU, 4 GB RAM).
# Применять как: docker compose -f docker-compose.yml -f docker-compose.vps.yml up -d --build
#
# Главное:
# - worker concurrency=1, max-tasks-per-child=3 (Chromium быстро течёт)
# - IAAI_PARALLEL_TABS=4 (важно: каждая вкладка ~80-150 MB)
# - IAAI_MAX_PAGES_PER_RUN=200, IAAI_MAX_VEHICLES_PER_RUN=2000 — короткие тестовые прогоны
# - hard memory limits на каждый сервис
x-vps-env: &vps-env
CELERY_WORKER_CONCURRENCY: "1"
CELERY_WORKER_MAX_TASKS_PER_CHILD: "3"
CELERY_WORKER_MAX_MEMORY_PER_CHILD_KB: "350000" # ~350 MB → перезапуск процесса
IAAI_PARALLEL_TABS: "4"
IAAI_BLOCK_RESOURCES: "true"
IAAI_MAX_PAGES_PER_RUN: "200"
IAAI_MAX_VEHICLES_PER_RUN: "2000"
IAAI_LISTING_SEGMENTS: "auto"
IAAI_HUMAN_PACE_ENABLED: "true"
CELERY_BATCH_SIZE: "100"
CELERY_TASK_SOFT_TIME_LIMIT: "1500" # 25 мин — короче бутстрап-сегмент
CELERY_TASK_TIME_LIMIT: "1800" # 30 мин
CELERY_BROKER_VISIBILITY_TIMEOUT: "3600"
IAAI_DATABASE_POOL_SIZE: "3"
IAAI_DATABASE_MAX_OVERFLOW: "2"
services:
postgres:
mem_limit: 512m
mem_reservation: 256m
command:
- "postgres"
- "-c"
- "shared_buffers=128MB"
- "-c"
- "effective_cache_size=384MB"
- "-c"
- "work_mem=8MB"
- "-c"
- "maintenance_work_mem=64MB"
- "-c"
- "max_connections=50"
redis:
mem_limit: 192m
mem_reservation: 64m
command: >
redis-server
--appendonly yes
--save 60 1000
--maxmemory 128mb
--maxmemory-policy allkeys-lru
api:
mem_limit: 384m
mem_reservation: 128m
environment:
<<: *vps-env
worker:
mem_limit: 1800m
mem_reservation: 512m
environment:
<<: *vps-env
# Переопределяем, чтобы concurrency=1 и max-tasks-per-child=3 точно применились
command: >
celery -A iaai_scraper.worker.celery_app worker
--loglevel=info --concurrency=1 --pool=prefork
--pidfile=/tmp/celery-worker.pid
-Q scraping --max-tasks-per-child=3
beat:
mem_limit: 256m
mem_reservation: 64m
environment:
<<: *vps-env