services: db: image: postgres:16-alpine container_name: 004erpdb environment: POSTGRES_DB: ${POSTGRES_DB} POSTGRES_USER: ${POSTGRES_USER} POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} healthcheck: test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER} -d ${POSTGRES_DB}"] interval: 5s timeout: 5s retries: 5 volumes: [postgres_data:/var/lib/postgresql/data] redis: image: redis:7-alpine container_name: 004erpredis volumes: [redis_data:/data] # Lean optimizacija: Ograničavamo maksimalnu potrošnju memorije samog Redisa na 100MB # i aktiviramo LRU algoritam koji automatski briše najstarije ključeve ako se limit prijeđe. command: redis-server --appendonly yes --maxmemory 100mb --maxmemory-policy allkeys-lru media-permissions: image: alpine:3.22 container_name: 004erpmediafix command: > sh -c "mkdir -p /app/media/fleet/generated_archives /app/media/fleet/generated_pdfs && chown -R 1001:1001 /app/media && chmod -R u+rwX,g+rwX /app/media" volumes: - media_volume:/app/media restart: "no" worker: container_name: 004erpworker build: context: ./backend dockerfile: Dockerfile command: celery -A core worker --loglevel=info user: "1001:1001" volumes: - ./backend:/app - media_volume:/app/media env_file: - .env depends_on: db: { condition: service_healthy } redis: { condition: service_started } media-permissions: { condition: service_completed_successfully } deploy: resources: limits: memory: 512M volumes: postgres_data: redis_data: media_volume: # Ovo je ključno za tvoj ERP