volumes:
  clsi-cache:
  clsi-output:
  filestore-public-files:
  filestore-template-files:
  filestore-uploads:
  filestore-user-files:
  mongo-data:
  npm-cache:
  redis-data:
  sharelatex-data:
  spelling-cache:
  web-data:

services:
  chat:
    build:
      context: ..
      dockerfile: services/chat/Dockerfile
    env_file:
      - dev.env
    volumes:
      - npm-cache:/root/.npm

  clsi:
    build:
      context: ..
      dockerfile: services/clsi/Dockerfile
    env_file:
      - dev.env
    environment:
      - DOCKER_RUNNER=true
      - TEXLIVE_IMAGE=texlive-full # docker build texlive -t texlive-full
      - COMPILES_HOST_DIR=${PWD}/compiles
    user: root
    volumes:
      - npm-cache:/root/.npm
      - ${PWD}/compiles:/overleaf/services/clsi/compiles
      - ${DOCKER_SOCKET_PATH:-/var/run/docker.sock}:/var/run/docker.sock
      - clsi-cache:/overleaf/services/clsi/cache
      - clsi-output:/overleaf/services/clsi/output

  contacts:
    build:
      context: ..
      dockerfile: services/contacts/Dockerfile
    env_file:
      - dev.env
    volumes:
      - npm-cache:/root/.npm

  docstore:
    build:
      context: ..
      dockerfile: services/docstore/Dockerfile
    env_file:
      - dev.env
    volumes:
      - npm-cache:/root/.npm

  document-updater:
    build:
      context: ..
      dockerfile: services/document-updater/Dockerfile
    env_file:
      - dev.env
    volumes:
      - npm-cache:/root/.npm

  filestore:
    build:
      context: ..
      dockerfile: services/filestore/Dockerfile
    env_file:
      - dev.env
#    environment:
#      - ENABLE_CONVERSIONS=true
    volumes:
      - npm-cache:/root/.npm
      - filestore-public-files:/overleaf/services/filestore/public_files
      - filestore-template-files:/overleaf/services/filestore/template_files
      - filestore-uploads:/overleaf/services/filestore/uploads
      - filestore-user-files:/overleaf/services/filestore/user_files

  mongo:
    image: mongo:4.4
    ports:
      - "127.0.0.1:27017:27017" # for debugging
    volumes:
      - npm-cache:/root/.npm
      - mongo-data:/data/db

  notifications:
    build:
      context: ..
      dockerfile: services/notifications/Dockerfile
    env_file:
      - dev.env
    volumes:
      - npm-cache:/root/.npm

  real-time:
    build:
      context: ..
      dockerfile: services/real-time/Dockerfile
    env_file:
      - dev.env
    volumes:
      - npm-cache:/root/.npm

  redis:
    image: redis:5
    ports:
      - "127.0.0.1:6379:6379" # for debugging
    volumes:
      - redis-data:/data

  spelling:
    build:
      context: ..
      dockerfile: services/spelling/Dockerfile
    env_file:
      - dev.env
    volumes:
      - npm-cache:/root/.npm
      - spelling-cache:/overleaf/services/spelling/cache

  track-changes:
    build:
      context: ..
      dockerfile: services/track-changes/Dockerfile
    env_file:
      - dev.env
    volumes:
      - npm-cache:/root/.npm

  web:
    build:
      context: ..
      dockerfile: services/web/Dockerfile
      target: dev
    env_file:
      - dev.env
    environment:
      - APP_NAME=Overleaf Community Edition
      - ENABLED_LINKED_FILE_TYPES=project_file,project_output_file
      - EMAIL_CONFIRMATION_DISABLED=true
      - NODE_ENV=development
      - SHARELATEX_ALLOW_PUBLIC_ACCESS=true
    command: ["node", "app.js"]
    volumes:
      - npm-cache:/root/.npm
      - sharelatex-data:/var/lib/sharelatex
      - web-data:/overleaf/services/web/data
    depends_on:
      - mongo
      - redis
      - chat
      - clsi
      - contacts
      - docstore
      - document-updater
      - filestore
      - notifications
      - real-time
      - spelling

  webpack:
    build:
      context: ..
      dockerfile: services/web/Dockerfile
      target: dev
    command: ["npx", "webpack", "serve", "--config", "webpack.config.dev-env.js"]
    ports:
      - "127.0.0.1:80:3808"
    volumes:
      - npm-cache:/root/.npm
      - ./webpack.config.dev-env.js:/overleaf/services/web/webpack.config.dev-env.js
