# vi: ft=yaml
version: '3'
networks:
  traefik:
    external: true
  overleaf:

services:
  sharelatex:
    image: sharelatex/sharelatex:3
    networks:
      - traefik
      - overleaf
    depends_on:
      - overleaf-mongodb
      - overleaf-redis
    stop_grace_period: 60s
    volumes:
      - type: bind
        source: /mnt/data/overleaf/sharelatex_data
        target: /var/lib/sharelatex
    deploy:
      placement:
        constraints:
          - "node.labels.overleaf == true"
      labels:
        - traefik.enable=true
        - traefik.http.routers.overleaf.entrypoints=websecure
        - traefik.http.routers.overleaf.rule=Host(`latex.pim.kunis.nl`)
        - traefik.http.routers.overleaf.tls=true
        - traefik.http.routers.overleaf.tls.certresolver=letsencrypt
        - traefik.http.routers.overleaf.service=overleaf
        - traefik.http.services.overleaf.loadbalancer.server.port=80
        - traefik.docker.network=traefik
    environment:
      SHARELATEX_APP_NAME: Overleaf Community Edition

      SHARELATEX_MONGO_URL: mongodb://overleaf-mongodb:27017/sharelatex

      # Same property, unfortunately with different names in
      # different locations
      SHARELATEX_REDIS_HOST: overleaf-redis
      REDIS_HOST: overleaf-redis

      ENABLED_LINKED_FILE_TYPES: 'project_file,project_output_file'

      # Enables Thumbnail generation using ImageMagick
      ENABLE_CONVERSIONS: 'true'

      # Disables email confirmation requirement
      EMAIL_CONFIRMATION_DISABLED: 'true'

      # temporary fix for LuaLaTex compiles
      # see https://github.com/overleaf/overleaf/issues/695
      TEXMFVAR: /var/lib/sharelatex/tmp/texmf-var

      SHARELATEX_SITE_URL: https://latex.pim.kunis.nl
      SHARELATEX_ADMIN_EMAIL: pim@kunis.nl

      SHARELATEX_EMAIL_FROM_ADDRESS: "noreply@kunis.nl"

      SHARELATEX_EMAIL_SMTP_HOST: "smtp.tweak.nl"
      SHARELATEX_EMAIL_SMTP_PORT: 587
      SHARELATEX_EMAIL_SMTP_USER: ""
      SHARELATEX_EMAIL_SMTP_PASS: ""

  overleaf-mongodb:
    image: mongo:4.4
    networks:
      - overleaf
    expose:
      - 27017
    volumes:
      - type: bind
        source: /mnt/data/overleaf/mongo_data
        target: /data/db
    healthcheck:
      test: echo 'db.stats().ok' | mongo localhost:27017/test --quiet
      interval: 10s
      timeout: 10s
      retries: 5
    deploy:
      placement:
        constraints:
          - "node.labels.overleaf == true"

  overleaf-redis:
    image: redis:5
    networks:
      - overleaf
    expose:
      - 6379
    volumes:
      - type: bind
        source: /mnt/data/overleaf/redis_data
        target: /data
    deploy:
      placement:
        constraints:
          - "node.labels.overleaf == true"