Initial commit
This commit is contained in:
commit
e662a0172c
6 changed files with 141 additions and 0 deletions
4
.gitignore
vendored
Normal file
4
.gitignore
vendored
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
|
||||||
|
# IntelliJ
|
||||||
|
/.idea
|
||||||
|
overleaf.iml
|
38
README.md
Normal file
38
README.md
Normal file
|
@ -0,0 +1,38 @@
|
||||||
|
# Overleaf Setup
|
||||||
|
|
||||||
|
## Getting started
|
||||||
|
|
||||||
|
1. Upload the docker-compose.yaml to the server directory.
|
||||||
|
2. Start the MongoDB alone using `docker compose up -d mongo` and wait about 15 seconds for it to start.
|
||||||
|
3. Execute the script [setup-replica-set.sh](setup-replica-set.sh) to create the ReplicaSet, required by the sharedlatex
|
||||||
|
container
|
||||||
|
4. Now start all other containers using `docker compose up -d`
|
||||||
|
|
||||||
|
## Docker Overview
|
||||||
|
|
||||||
|
1. What does the Compose stack contain?
|
||||||
|
```
|
||||||
|
The compose stack consists of three containers.
|
||||||
|
The sharelatex container is the actual Overleaf application,
|
||||||
|
containing the frontend and the backend of the application.
|
||||||
|
It requires two different datasources, a MongoDB and a Redis.
|
||||||
|
```
|
||||||
|
|
||||||
|
2. How to access the application?
|
||||||
|
```
|
||||||
|
The docker-compose.yaml file in this repository is setup to
|
||||||
|
automatically connect to a running [Treafik](https://traefik.io)
|
||||||
|
instance. If a different reverse proxy is used, the traefik labels
|
||||||
|
can be removed and the required configuration has to be added.
|
||||||
|
```
|
||||||
|
|
||||||
|
3. Why setting up a ReplicaSet with a single MongoDB instance?
|
||||||
|
```
|
||||||
|
The Overleaf application depends on using transactions. Transactions are
|
||||||
|
only supported by MongoDB if a Replica Set is active.
|
||||||
|
```
|
||||||
|
|
||||||
|
4. Where is the data stored?
|
||||||
|
```
|
||||||
|
All relevant data from each container is bound to a Docker volume each.
|
||||||
|
```
|
79
docker-compose.yaml
Normal file
79
docker-compose.yaml
Normal file
|
@ -0,0 +1,79 @@
|
||||||
|
services:
|
||||||
|
|
||||||
|
latex:
|
||||||
|
restart: unless-stopped
|
||||||
|
image: sharelatex/sharelatex:5.3
|
||||||
|
container_name: markus_latex
|
||||||
|
depends_on:
|
||||||
|
mongo:
|
||||||
|
condition: service_started
|
||||||
|
redis:
|
||||||
|
condition: service_started
|
||||||
|
stop_grace_period: 60s
|
||||||
|
volumes:
|
||||||
|
- latex-data:/var/lib/overleaf
|
||||||
|
labels:
|
||||||
|
- "traefik.enable=true"
|
||||||
|
- "traefik.http.routers.dev-thielker-latex.rule=Host(latex.thielker.dev)"
|
||||||
|
- "traefik.http.routers.dev-thielker-latex.entrypoints=web, websecure"
|
||||||
|
- "traefik.http.routers.dev-thielker-latex.tls=true"
|
||||||
|
- "traefik.http.routers.dev-thielker-latex.tls.certresolver=lets-encrypt"
|
||||||
|
networks:
|
||||||
|
- web
|
||||||
|
- internal
|
||||||
|
environment:
|
||||||
|
OVERLEAF_APP_NAME: HNU - Overleaf
|
||||||
|
OVERLEAF_MONGO_URL: mongodb://mongo/latex
|
||||||
|
OVERLEAF_REDIS_HOST: redis
|
||||||
|
REDIS_HOST: redis
|
||||||
|
|
||||||
|
ENABLED_LINKED_FILE_TYPES: 'project_file,project_output_file'
|
||||||
|
ENABLE_CONVERSIONS: 'true'
|
||||||
|
EMAIL_CONFIRMATION_DISABLED: 'true'
|
||||||
|
|
||||||
|
OVERLEAF_SITE_URL: https://latex.thielker.dev
|
||||||
|
OVERLEAF_NAV_TITLE: Overleaf
|
||||||
|
OVERLEAF_HEADER_IMAGE_URL: https://git.thielker.dev/markus/overleaf/hnu-logo-white.svg
|
||||||
|
|
||||||
|
|
||||||
|
mongo:
|
||||||
|
container_name: markus_latex_mongo
|
||||||
|
image: mongo:8.0.6
|
||||||
|
restart: unless-stopped
|
||||||
|
environment:
|
||||||
|
MONGO_INITDB_DATABASE: latex
|
||||||
|
volumes:
|
||||||
|
- mongo-data:/data/db
|
||||||
|
networks:
|
||||||
|
- internal
|
||||||
|
extra_hosts:
|
||||||
|
- mongo:127.0.0.1
|
||||||
|
healthcheck:
|
||||||
|
test: echo 'db.runCommand("ping").ok' | mongosh localhost:27017/test --quiet
|
||||||
|
interval: 30s
|
||||||
|
timeout: 10s
|
||||||
|
start_period: 0s
|
||||||
|
start_interval: 1s
|
||||||
|
retries: 30
|
||||||
|
|
||||||
|
|
||||||
|
redis:
|
||||||
|
restart: always
|
||||||
|
image: redis:6.2
|
||||||
|
container_name: markus_latex_redis
|
||||||
|
networks:
|
||||||
|
- internal
|
||||||
|
volumes:
|
||||||
|
- redis-data:/data
|
||||||
|
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
redis-data:
|
||||||
|
mongo-data:
|
||||||
|
latex-data:
|
||||||
|
|
||||||
|
|
||||||
|
networks:
|
||||||
|
internal:
|
||||||
|
web:
|
||||||
|
external: true
|
7
hnu-logo-white.svg
Normal file
7
hnu-logo-white.svg
Normal file
File diff suppressed because one or more lines are too long
After Width: | Height: | Size: 6.3 KiB |
7
hnu-logo.svg
Normal file
7
hnu-logo.svg
Normal file
File diff suppressed because one or more lines are too long
After Width: | Height: | Size: 6.3 KiB |
6
setup-replica-set.sh
Normal file
6
setup-replica-set.sh
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
docker exec -it markus_latex_mongo mongosh --eval "rs.initiate({
|
||||||
|
_id: \"overleaf\",
|
||||||
|
members: [
|
||||||
|
{_id: 0, host: \"mongo:27017\"},
|
||||||
|
]
|
||||||
|
})"
|
Loading…
Add table
Add a link
Reference in a new issue