Browse Source

refactor: made MongoDB version configurable

Kristian Vos 2 years ago
parent
commit
1d18fe80b8
5 changed files with 35 additions and 10 deletions
  1. 1 0
      .env.example
  2. 1 0
      .wiki/Configuration.md
  3. 1 1
      docker-compose.yml
  4. 17 3
      musare.sh
  5. 15 6
      tools/docker/setup-mongo.sh

+ 1 - 0
.env.example

@@ -14,6 +14,7 @@ MONGO_ROOT_PASSWORD=PASSWORD_HERE
 MONGO_USER_USERNAME=musare
 MONGO_USER_PASSWORD=OTHER_PASSWORD_HERE
 MONGO_DATA_LOCATION=.db
+MONGO_VERSION=5.0
 
 REDIS_HOST=127.0.0.1
 REDIS_PORT=6379

+ 1 - 0
.wiki/Configuration.md

@@ -111,6 +111,7 @@ The container port refers to the external docker container port, used to access
 | `MONGO_USER_USERNAME` | Application username for MongoDB. |
 | `MONGO_USER_PASSWORD` | Application password for MongoDB. |
 | `MONGO_DATA_LOCATION` | The location where MongoDB stores its data. Usually the `.db` folder inside the `Musare` folder. |
+| `MONGO_VERSION` | The MongoDB version to use for scripts and docker-compose. Must be numerical. Currently supported MongoDB versions are 4.0, 4.2, 4.4 and 5.0. |
 | `REDIS_HOST` | Redis container host. |
 | `REDIS_PORT` | Redis container port. |
 | `REDIS_PASSWORD` | Redis password. |

+ 1 - 1
docker-compose.yml

@@ -31,7 +31,7 @@ services:
       - backend
 
   mongo:
-    image: mongo:5.0
+    image: mongo:${MONGO_VERSION}
     restart: ${RESTART_POLICY}
     ports:
       - "${MONGO_HOST}:${MONGO_PORT}:${MONGO_PORT}"

+ 17 - 3
musare.sh

@@ -155,11 +155,16 @@ if [[ -x "$(command -v docker)" && -x "$(command -v docker-compose)" ]]; then
             if [[ -f .env ]]; then
                 # shellcheck disable=SC1091
                 source .env
+                MONGO_VERSION_INT=${MONGO_VERSION:0:1}
                 if [[ -z $(docker-compose ps -q mongo) ]]; then
                     echo -e "${RED}Error: Mongo offline, please start to attach.${NC}"
                 else
                     echo -e "${YELLOW}Detach with CTRL+C${NC}"
-                    docker-compose exec mongo mongosh musare -u "${MONGO_USER_USERNAME}" -p "${MONGO_USER_PASSWORD}" --eval "disableTelemetry()" --shell
+                    if [[ $MONGO_VERSION_INT -ge 5 ]]; then
+                        docker-compose exec mongo mongosh musare -u "${MONGO_USER_USERNAME}" -p "${MONGO_USER_PASSWORD}" --eval "disableTelemetry()" --shell
+                    else
+                        docker-compose exec mongo mongo musare -u "${MONGO_USER_USERNAME}" -p "${MONGO_USER_PASSWORD}"
+                    fi
                 fi
             else
                 echo -e "${RED}Error: .env does not exist${NC}"
@@ -285,6 +290,7 @@ if [[ -x "$(command -v docker)" && -x "$(command -v docker-compose)" ]]; then
         if [[ -f .env ]]; then
             # shellcheck disable=SC1091
             source .env
+            MONGO_VERSION_INT=${MONGO_VERSION:0:1}
             if [[ $2 == "add" ]]; then
                 if [[ -z $3 ]]; then
                     echo -e "${GREEN}Please enter the username of the user you wish to make an admin: ${NC}"
@@ -295,7 +301,11 @@ if [[ -x "$(command -v docker)" && -x "$(command -v docker-compose)" ]]; then
                 if [[ -z $adminUser ]]; then
                     echo -e "${RED}Error: Username for new admin not provided.${NC}"
                 else
-                    docker-compose exec mongo mongosh musare -u "${MONGO_USER_USERNAME}" -p "${MONGO_USER_PASSWORD}" --eval "disableTelemetry(); db.users.updateOne({username: '${adminUser}'}, {\$set: {role: 'admin'}})"
+                    if [[ $MONGO_VERSION_INT -ge 5 ]]; then
+                        docker-compose exec mongo mongosh musare -u "${MONGO_USER_USERNAME}" -p "${MONGO_USER_PASSWORD}" --eval "disableTelemetry(); db.users.updateOne({username: '${adminUser}'}, {\$set: {role: 'admin'}})"
+                    else
+                        docker-compose exec mongo mongo musare -u "${MONGO_USER_USERNAME}" -p "${MONGO_USER_PASSWORD}" --eval "db.users.updateOne({username: '${adminUser}'}, {\$set: {role: 'admin'}})"
+                    fi
                 fi
             elif [[ $2 == "remove" ]]; then
                 if [[ -z $3 ]]; then
@@ -307,7 +317,11 @@ if [[ -x "$(command -v docker)" && -x "$(command -v docker-compose)" ]]; then
                 if [[ -z $adminUser ]]; then
                     echo -e "${RED}Error: Username for new admin not provided.${NC}"
                 else
-                    docker-compose exec mongo mongosh musare -u "${MONGO_USER_USERNAME}" -p "${MONGO_USER_PASSWORD}" --eval "disableTelemetry(); db.users.updateOne({username: '${adminUser}'}, {\$set: {role: 'default'}})"
+                    if [[ $MONGO_VERSION_INT -ge 5 ]]; then
+                        docker-compose exec mongo mongosh musare -u "${MONGO_USER_USERNAME}" -p "${MONGO_USER_PASSWORD}" --eval "disableTelemetry(); db.users.updateOne({username: '${adminUser}'}, {\$set: {role: 'default'}})"
+                    else
+                        docker-compose exec mongo mongo musare -u "${MONGO_USER_USERNAME}" -p "${MONGO_USER_PASSWORD}" --eval "db.users.updateOne({username: '${adminUser}'}, {\$set: {role: 'default'}})"
+                    fi
                 fi
             else
                 echo -e "${RED}Invalid command $2\n${YELLOW}Usage: $(basename "$0") admin [add,remove] username${NC}"

+ 15 - 6
tools/docker/setup-mongo.sh

@@ -1,8 +1,17 @@
 #!/bin/bash
 
-mongosh musare \
-        --port 27017 \
-        -u "admin" \
-        --authenticationDatabase "admin" \
-        -p ${MONGO_ROOT_PASSWORD} \
-        --eval "disableTelemetry(); db.createUser({ user: '${MONGO_USER_USERNAME}', pwd: '${MONGO_USER_PASSWORD}', roles:[ { role:'readWrite', db: 'musare' } ] } );"
+MONGO_VERSION_INT=${MONGO_VERSION:0:1}
+if [[ $MONGO_VERSION_INT -ge 5 ]]; then
+        mongosh musare \
+                --port 27017 \
+                -u "admin" \
+                --authenticationDatabase "admin" \
+                -p ${MONGO_ROOT_PASSWORD} \
+                --eval "disableTelemetry(); db.createUser({ user: '${MONGO_USER_USERNAME}', pwd: '${MONGO_USER_PASSWORD}', roles:[ { role:'readWrite', db: 'musare' } ] } );"
+else
+        mongo musare \
+                --port 27017 \
+                -u "admin" \
+                --authenticationDatabase "admin" \
+                -p ${MONGO_ROOT_PASSWORD} \
+                --eval "db.createUser({ user: '${MONGO_USER_USERNAME}', pwd: '${MONGO_USER_PASSWORD}', roles:[ { role:'readWrite', db: 'musare' } ] } );"