services: api: build: context: . dockerfile: Dockerfile container_name: cryptowallet-api restart: unless-stopped # Публикация на все интерфейсы — иначе удалённый Nginx не достучится до :3001. # TLS на reverse proxy; порт 3001 на хосте закройте фаерволом (только IP прокси). # Только локально: замените на "127.0.0.1:3001:3001". ports: - "3001:3001" env_file: - .env environment: API_PORT: "3001" volumes: - ./logs:/app/logs # Container hardening — post-RCE blast radius minimization read_only: true tmpfs: - /tmp cap_drop: - ALL security_opt: - no-new-privileges:true pids_limit: 256 mem_limit: 512m cpus: "1.0" healthcheck: test: ["CMD", "wget", "-qO-", "--tries=1", "--timeout=3", "http://localhost:3001/api/health"] interval: 10s timeout: 5s retries: 5 start_period: 15s logging: driver: json-file options: max-size: "20m" max-file: "5"