From 2b72d8917172fc1c4c534d509674edb01c01513d Mon Sep 17 00:00:00 2001 From: Jakob Ackermann Date: Wed, 2 Oct 2024 16:09:03 +0200 Subject: [PATCH] Merge pull request #20685 from overleaf/jpa-fix-local-e2e [server-ce] use database init script for setting up mongo replica set GitOrigin-RevId: cf5c820a8c26da43de2f5c66677dba2c40a3667e --- docker-compose.yml | 19 ++++---- server-ce/mongodb-init-replica-set.js | 1 + server-ce/test/docker-compose.yml | 11 +++-- server-ce/test/host-admin.js | 64 +++++---------------------- 4 files changed, 29 insertions(+), 66 deletions(-) create mode 100644 server-ce/mongodb-init-replica-set.js diff --git a/docker-compose.yml b/docker-compose.yml index 20b0b3cf11..10a74780e3 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -13,9 +13,6 @@ services: condition: service_started ports: - 80:80 - links: - - mongo - - redis stop_grace_period: 60s volumes: - ~/sharelatex_data:/var/lib/overleaf @@ -107,10 +104,16 @@ services: restart: always image: mongo:5.0 container_name: mongo - expose: - - 27017 + command: '--replSet overleaf' volumes: - ~/mongo_data:/data/db + - ./mongodb-init-replica-set.js:/docker-entrypoint-initdb.d/mongodb-init-replica-set.js + environment: + MONGO_INITDB_DATABASE: sharelatex + extra_hosts: + # Required when using the automatic database setup for initializing the replica set. + # This override is not needed when running the setup after starting up mongo. + - mongo:127.0.0.1 healthcheck: test: echo 'db.stats().ok' | mongo localhost:27017/test --quiet interval: 10s @@ -121,8 +124,6 @@ services: restart: always image: redis:6.2 container_name: redis - expose: - - 6379 volumes: - ~/redis_data:/data @@ -130,8 +131,6 @@ services: # restart: always # image: rroemhild/test-openldap # container_name: ldap - # expose: - # - 389 # See https://github.com/jwilder/nginx-proxy for documentation on how to configure the nginx-proxy container, # and https://github.com/overleaf/overleaf/wiki/HTTPS-reverse-proxy-using-Nginx for an example of some recommended @@ -142,7 +141,7 @@ services: # image: jwilder/nginx-proxy # container_name: nginx-proxy # ports: - # #- "80:80" + # - "80:80" # - "443:443" # volumes: # - /var/run/docker.sock:/tmp/docker.sock:ro diff --git a/server-ce/mongodb-init-replica-set.js b/server-ce/mongodb-init-replica-set.js new file mode 100644 index 0000000000..8d993774c7 --- /dev/null +++ b/server-ce/mongodb-init-replica-set.js @@ -0,0 +1 @@ +rs.initiate({ _id: "overleaf", members: [ { _id: 0, host: "mongo:27017" } ] }) diff --git a/server-ce/test/docker-compose.yml b/server-ce/test/docker-compose.yml index 46435fed21..ee97a6cb01 100644 --- a/server-ce/test/docker-compose.yml +++ b/server-ce/test/docker-compose.yml @@ -8,9 +8,6 @@ services: condition: service_healthy redis: condition: service_started - host-admin: - # The host-admin service initiates the mongo replica set - condition: service_healthy mailtrap: condition: service_started environment: @@ -40,6 +37,14 @@ services: mongo: image: mongo:5.0.17 command: '--replSet overleaf' + volumes: + - ../mongodb-init-replica-set.js:/docker-entrypoint-initdb.d/mongodb-init-replica-set.js + environment: + MONGO_INITDB_DATABASE: sharelatex + extra_hosts: + # Required when using the automatic database setup for initializing the replica set. + # This override is not needed when running the setup after starting up mongo. + - mongo:127.0.0.1 healthcheck: test: echo 'db.stats().ok' | mongo localhost:27017/test --quiet interval: 3s diff --git a/server-ce/test/host-admin.js b/server-ce/test/host-admin.js index 54aa88bf0c..e4f5776030 100644 --- a/server-ce/test/host-admin.js +++ b/server-ce/test/host-admin.js @@ -30,7 +30,6 @@ const IMAGES = { } let previousConfig = '' -let mongoIsInitialized = false function readDockerComposeOverride() { try { @@ -245,42 +244,12 @@ app.post( (req, res) => { const { cmd } = req.params const { args } = req.body - if (['stop', 'down'].includes(cmd)) { - mongoIsInitialized = false - } runDockerCompose(cmd, args, (error, stdout, stderr) => { res.json({ error, stdout, stderr }) }) } ) -function maybeMongoInit(mongoInit, callback) { - if (!mongoInit) return callback() - runDockerCompose( - 'up', - ['--detach', '--wait', 'mongo'], - (error, stdout, stderr) => { - if (error) return callback(error, stdout, stderr) - - runDockerCompose( - 'exec', - [ - 'mongo', - 'mongo', - '--eval', - 'rs.initiate({ _id: "overleaf", members: [ { _id: 0, host: "mongo:27017" } ] })', - ], - (error, stdout, stderr) => { - if (!error) { - mongoIsInitialized = true - } - callback(error, stdout, stderr) - } - ) - } - ) -} - function maybeResetData(resetData, callback) { if (!resetData) return callback() @@ -297,7 +266,6 @@ function maybeResetData(resetData, callback) { } previousConfig = '' - mongoIsInitialized = false runDockerCompose( 'down', ['--timeout=0', '--volumes', 'mongo', 'redis'], @@ -332,18 +300,16 @@ app.post( return res.json({ error }) } - maybeMongoInit(!mongoIsInitialized, (error, stdout, stderr) => { - if (error) return res.json({ error, stdout, stderr }) - runDockerCompose( - 'up', - ['--detach', '--wait', 'sharelatex'], - (error, stdout, stderr) => { - const previousConfigServer = previousConfig - previousConfig = JSON.stringify(req.body) - res.json({ error, stdout, stderr, previousConfigServer }) - } - ) - }) + if (error) return res.json({ error, stdout, stderr }) + runDockerCompose( + 'up', + ['--detach', '--wait', 'sharelatex'], + (error, stdout, stderr) => { + const previousConfigServer = previousConfig + previousConfig = JSON.stringify(req.body) + res.json({ error, stdout, stderr, previousConfigServer }) + } + ) }) } ) @@ -362,12 +328,4 @@ app.use(handleValidationErrors()) purgeDataDir() -// Init on startup -maybeMongoInit(true, err => { - if (err) { - console.error('mongo init failed', err) - process.exit(1) - } - - app.listen(80) -}) +app.listen(80)