gpt-researcher Docker & Self-Hosted Deployment

GitHub

An autonomous agent that conducts deep research on any data using any LLM providers

28,464 stars Python Python 1 file ยท ~20,738 tokens #agent#ai#automation#deepresearch#llms#mcp#mcp-server#python
RAW Compose
1. Pull Image (DOCKERHUB) docker pull gptresearcher/gpt-researcher
2. Docker Run (1-Click Launch) docker run -d --name gpt-researcher -p 8000:8000 --restart always gptresearcher/gpt-researcher
3. Podman Run podman run -d --name gpt-researcher -p 8000:8000 --restart always gptresearcher/gpt-researcher
4. Skopeo Inspect (Zero-Pull Manifest) skopeo inspect docker://docker.io/gptresearcher/gpt-researcher:latest
5. ORAS Pull (OCI Artifact) oras pull gptresearcher/gpt-researcher
6. Compose Deployment docker compose up -d
docker-compose.yml
Download .yml
services:
  gpt-researcher:
    pull_policy: build
    image: gptresearcher/gpt-researcher
    build: ./
    environment: 
      OPENAI_API_KEY: ${OPENAI_API_KEY}
      OPENAI_BASE_URL: ${OPENAI_BASE_URL}
      TAVILY_API_KEY: ${TAVILY_API_KEY}
      LANGCHAIN_API_KEY: ${LANGCHAIN_API_KEY}
      LOGGING_LEVEL: INFO
      # Image generation (optional - set to enable inline images in reports)
      GOOGLE_API_KEY: ${GOOGLE_API_KEY}
      IMAGE_GENERATION_ENABLED: ${IMAGE_GENERATION_ENABLED:-false}
      IMAGE_GENERATION_MODEL: ${IMAGE_GENERATION_MODEL:-gemini-2.0-flash-preview-image-generation}
      IMAGE_GENERATION_MAX_IMAGES: ${IMAGE_GENERATION_MAX_IMAGES:-3}
    volumes:
      - ${PWD}/my-docs:/usr/src/app/my-docs:rw
      - ${PWD}/outputs:/usr/src/app/outputs:rw
      - ${PWD}/logs:/usr/src/app/logs:rw
    user: root
    restart: always
    ports:
      - 8000:8000
      
  gptr-nextjs:
    pull_policy: build
    image: gptresearcher/gptr-nextjs
    stdin_open: true
    environment:
      CHOKIDAR_USEPOLLING: "true"
      LOGGING_LEVEL: INFO
      NEXT_PUBLIC_GA_MEASUREMENT_ID: ${NEXT_PUBLIC_GA_MEASUREMENT_ID}
      NEXT_PUBLIC_GPTR_API_URL: ${NEXT_PUBLIC_GPTR_API_URL}
    build:
      dockerfile: Dockerfile.dev
      context: frontend/nextjs
    volumes:
      - /app/node_modules
      - ./frontend/nextjs:/app
      - ./frontend/nextjs/.next:/app/.next
      - ./outputs:/app/outputs
    restart: always
    ports:
      - 3000:3000

  gpt-researcher-tests:
    image: gptresearcher/gpt-researcher-tests
    build: ./
    environment: 
      OPENAI_API_KEY: ${OPENAI_API_KEY}
      OPENAI_BASE_URL: ${OPENAI_BASE_URL}
      TAVILY_API_KEY: ${TAVILY_API_KEY}
      LANGCHAIN_API_KEY: ${LANGCHAIN_API_KEY}
      LOGGING_LEVEL: INFO
    profiles: ["test"]
    command: >
      /bin/sh -c "
      pip install pytest pytest-asyncio faiss-cpu &&
      python -m pytest tests/report-types.py &&
      python -m pytest tests/vector-store.py
      "
  
  discord-bot:
    build:
      context: ./docs/discord-bot
      dockerfile: Dockerfile.dev
    environment:
      - DISCORD_BOT_TOKEN=${DISCORD_BOT_TOKEN}
      - DISCORD_CLIENT_ID=${DISCORD_CLIENT_ID}
    volumes:
      - ./docs/discord-bot:/app
      - /app/node_modules
    ports:
      - 3001:3000
    profiles: ["discord"]
    restart: always