diff --git a/ansible/playbooks/stacks.yml b/ansible/playbooks/stacks.yml
index 5680819..f0a266f 100644
--- a/ansible/playbooks/stacks.yml
+++ b/ansible/playbooks/stacks.yml
@@ -10,3 +10,4 @@
- {role: mastodon, tags: mastodon}
- {role: freshrss, tags: freshrss}
- {role: hedgedoc, tags: hedgedoc}
+ - {role: overleaf, tags: overleaf}
diff --git a/ansible/roles/overleaf/docker-stack.yml.j2 b/ansible/roles/overleaf/docker-stack.yml.j2
new file mode 100644
index 0000000..7a381e5
--- /dev/null
+++ b/ansible/roles/overleaf/docker-stack.yml.j2
@@ -0,0 +1,113 @@
+# vi: ft=yaml
+version: '3'
+networks:
+ traefik:
+ external: true
+ overleaf:
+
+services:
+ sharelatex:
+ image: sharelatex/sharelatex
+ 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
+ - treafik.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
+
+ ## Set for SSL via nginx-proxy
+ #VIRTUAL_HOST: 103.112.212.22
+
+ SHARELATEX_SITE_URL: https://latex.pim.kunis.nl
+ # SHARELATEX_NAV_TITLE: Our ShareLaTeX Instance
+ # SHARELATEX_HEADER_IMAGE_URL: http://somewhere.com/mylogo.png
+ SHARELATEX_ADMIN_EMAIL: pim@kunis.nl
+
+ # SHARELATEX_LEFT_FOOTER: '[{"text": "Powered by ShareLaTeX 2016"},{"text": "Another page I want to link to can be found here"} ]'
+ # SHARELATEX_RIGHT_FOOTER: '[{"text": "Hello I am on the Right"} ]'
+
+ 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: ""
+ # SHARELATEX_EMAIL_SMTP_TLS_REJECT_UNAUTH: true
+ # SHARELATEX_EMAIL_SMTP_IGNORE_TLS: false
+ # SHARELATEX_EMAIL_SMTP_NAME: '127.0.0.1'
+ # SHARELATEX_EMAIL_SMTP_LOGGER: true
+ # SHARELATEX_CUSTOM_EMAIL_FOOTER: "This system is run by department x"
+
+ 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"
diff --git a/ansible/roles/overleaf/tasks/main.yml b/ansible/roles/overleaf/tasks/main.yml
new file mode 100644
index 0000000..a3a744e
--- /dev/null
+++ b/ansible/roles/overleaf/tasks/main.yml
@@ -0,0 +1,15 @@
+- name: Create working directory
+ file:
+ path: /srv/overleaf
+ state: directory
+
+- name: Copy Docker stack file
+ template:
+ src: "{{ role_path }}/docker-stack.yml.j2"
+ dest: /srv/overleaf/docker-stack.yml
+
+- name: Deploy Docker stack
+ docker_stack:
+ name: overleaf
+ compose:
+ - /srv/overleaf/docker-stack.yml