From 76edbf0624b520c5baf0f35ebfbb1181a0e0532f Mon Sep 17 00:00:00 2001 From: Mirko Milovanovic Date: Sun, 9 Feb 2025 17:14:55 +0100 Subject: [PATCH] feat: add MongoDB and Mongo Express services with initialization script --- server/.env.example | 5 +++ server/docker-compose.yml | 49 +++++++++++++++++++++++++++ server/mongodb/initdb.d/mongo-init.js | 33 ++++++++++++++++++ 3 files changed, 87 insertions(+) create mode 100644 server/.env.example create mode 100644 server/docker-compose.yml create mode 100644 server/mongodb/initdb.d/mongo-init.js diff --git a/server/.env.example b/server/.env.example new file mode 100644 index 0000000..b2233ff --- /dev/null +++ b/server/.env.example @@ -0,0 +1,5 @@ +# MongoDB Environment +MONGO_INITDB_ROOT_USERNAME=root +MONGO_INITDB_ROOT_PASSWORD=password +MONGO_EXPRESS_USERNAME=admin +MONGO_EXPRESS_PASSWORD=password \ No newline at end of file diff --git a/server/docker-compose.yml b/server/docker-compose.yml new file mode 100644 index 0000000..991ef08 --- /dev/null +++ b/server/docker-compose.yml @@ -0,0 +1,49 @@ +services: + mongodb: + image: mongo:latest + container_name: mongodb + hostname: mongodb + volumes: + - ./mongodb/initdb.d/mongo-init.js:/docker-entrypoint-initdb.d/mongo-init.js:ro + - mongodb-data:/data/db/ + - mongodb-log:/var/log/mongodb/ + env_file: + - .env + environment: + MONGO_INITDB_ROOT_USERNAME: ${MONGO_INITDB_ROOT_USERNAME} + MONGO_INITDB_ROOT_PASSWORD: ${MONGO_INITDB_ROOT_PASSWORD} + ports: + - "27017:27017" + networks: + - mongodb_network + + mongo-express: + image: mongo-express:latest + container_name: mongo-express + restart: always + environment: + ME_CONFIG_MONGODB_ADMINUSERNAME: ${MONGO_INITDB_ROOT_USERNAME} + ME_CONFIG_MONGODB_ADMINPASSWORD: ${MONGO_INITDB_ROOT_PASSWORD} + ME_CONFIG_MONGODB_PORT: 27017 + ME_CONFIG_MONGODB_SERVER: 'mongodb' + ME_CONFIG_BASICAUTH_USERNAME: ${MONGO_EXPRESS_USERNAME} + ME_CONFIG_BASICAUTH_PASSWORD: ${MONGO_EXPRESS_PASSWORD} + ports: + - 8081:8081 + networks: + - mongodb_network + depends_on: + - mongodb + +volumes: + mongodb-data: + driver: local + name: mongo-data + mongodb-log: + driver: local + name: mongo-log + +networks: + mongodb_network: + driver: bridge + name: mongo-network diff --git a/server/mongodb/initdb.d/mongo-init.js b/server/mongodb/initdb.d/mongo-init.js new file mode 100644 index 0000000..aa98332 --- /dev/null +++ b/server/mongodb/initdb.d/mongo-init.js @@ -0,0 +1,33 @@ +db = db.getSiblingDB("statistics"); + +db.createRole({ + role: "statsReadWrite", + privileges: [ + { + resource: { + db: "statistics", + collection: "peertube", + }, + actions: ["insert"], + }, + ], + roles: [ + { + role: "read", + db: "statistics", + }, + ], +}); + +db.createUser({ + user: "stats_user", + pwd: "@z^VFhN7q%vzit", + roles: [ + { + role: 'statsReadWrite', + db: 'statistics', + }, + ], + }); + +db.createCollection("peertube"); \ No newline at end of file