services: api: build: . image: robotex:latest restart: unless-stopped ports: - "${API_PORT:-8000}:8000" env_file: - path: .env required: false volumes: - extra:/app/extra # Chrome активно использует /dev/shm, дефолтных 64MB не хватает shm_size: "2gb" # Потолок ресурсов: при переборе OOM-killer прибьёт процесс Chrome внутри контейнера, # а не соседние сервисы на хосте. Подбирать под сервер вместе с BROWSER_SLOTS. cpus: ${API_CPUS:-4} mem_limit: ${API_MEM_LIMIT:-8g} memswap_limit: ${API_MEM_LIMIT:-8g} # HTTP-прокси для локальных тестов (exit-IP = IP хоста): docker compose --profile loadtest up -d # из контейнера api доступен как http://proxy:8080 proxy: image: gogost/gost:3.1.0 profiles: ["loadtest"] restart: unless-stopped command: ["-L", "http://:8080"] volumes: extra: