services: backstory: build: context: . dockerfile: Dockerfile target: backstory container_name: backstory image: backstory restart: "no" env_file: - .env environment: - PRODUCTION=0 - MODEL_NAME=${MODEL_NAME:-qwen2.5:3b} devices: - /dev/dri:/dev/dri depends_on: - ollama networks: - internal ports: - 8912:8911 # Flask React server - 3000:3000 # REACT expo while developing frontend volumes: - ./cache:/root/.cache # Persist all models and GPU kernel cache - ./sessions:/opt/backstory/sessions:rw # Persist sessions - ./chromadb:/opt/backstory/chromadb:rw # Persist ChromaDB - ./dev-keys:/opt/backstory/keys:ro # Developer keys - ./docs:/opt/backstory/docs:ro # Live mount of RAG content - ./src:/opt/backstory/src:rw # Live mount server src - ./frontend:/opt/backstory/frontend:rw # Live mount frontend src cap_add: # used for running ze-monitor within container - CAP_DAC_READ_SEARCH # Bypass all filesystem read access checks - CAP_PERFMON # Access to perf_events (vs. overloaded CAP_SYS_ADMIN) - CAP_SYS_PTRACE # PTRACE_MODE_READ_REALCREDS ptrace access mode check backstory-prod: build: context: . dockerfile: Dockerfile target: backstory image: backstory container_name: backstory-prod restart: "always" env_file: - .env environment: - PRODUCTION=1 - MODEL_NAME=${MODEL_NAME:-qwen2.5:7b} devices: - /dev/dri:/dev/dri depends_on: - ollama networks: - internal ports: - 8911:8911 # Flask React server volumes: - ./cache:/root/.cache # Persist all models and GPU kernel cache - ./chromadb-prod:/opt/backstory/chromadb:rw # Persist ChromaDB - ./sessions-prod:/opt/backstory/sessions:rw # Persist sessions - ./docs:/opt/backstory/docs:ro # Live mount of RAG content - ./frontend:/opt/backstory/frontend:rw # Live mount frontend src cap_add: # used for running ze-monitor within container - CAP_DAC_READ_SEARCH # Bypass all filesystem read access checks - CAP_PERFMON # Access to perf_events (vs. overloaded CAP_SYS_ADMIN) - CAP_SYS_PTRACE # PTRACE_MODE_READ_REALCREDS ptrace access mode check ollama: build: context: . dockerfile: Dockerfile target: ollama image: ollama container_name: ollama restart: "always" env_file: - .env environment: - OLLAMA_HOST=0.0.0.0 - ONEAPI_DEVICE_SELECTOR=level_zero:0 devices: - /dev/dri:/dev/dri ports: - 11434:11434 # ollama serve port networks: - internal volumes: - ./cache:/root/.cache # Cache hub models and neo_compiler_cache - ./ollama:/root/.ollama # Cache the ollama models cap_add: # used for running ze-monitor within container - CAP_DAC_READ_SEARCH # Bypass all filesystem read access checks - CAP_PERFMON # Access to perf_events (vs. overloaded CAP_SYS_ADMIN) - CAP_SYS_PTRACE # PTRACE_MODE_READ_REALCREDS ptrace access mode check jupyter: build: context: . dockerfile: Dockerfile target: jupyter image: jupyter container_name: jupyter restart: "always" env_file: - .env devices: - /dev/dri:/dev/dri depends_on: - ollama - miniircd ports: - 8888:8888 # Jupyter Notebook - 60673:60673 # Gradio networks: - internal volumes: - ./jupyter:/opt/jupyter:rw - ./cache:/root/.cache deploy: resources: limits: memory: "0" # No memory limit (Docker treats 0 as unlimited) reservations: memory: "0" # No reserved memory (optional) ulimits: memlock: -1 # Prevents memory from being locked #oom_kill_disable: true # Prevents OOM killer from killing the container cap_add: # used for running ze-monitor within container - CAP_DAC_READ_SEARCH # Bypass all filesystem read access checks - CAP_PERFMON # Access to perf_events (vs. overloaded CAP_SYS_ADMIN) - CAP_SYS_PTRACE # PTRACE_MODE_READ_REALCREDS ptrace access mode check miniircd: build: context: . dockerfile: Dockerfile target: miniircd image: miniircd container_name: miniircd restart: "no" env_file: - .env devices: - /dev/dri:/dev/dri ports: - 6667:6667 # IRC networks: - internal volumes: - ./cache:/root/.cache networks: internal: driver: bridge