The Mentoring building block enables effective mentoring interactions between mentors and mentees. The capability aims to create a transparent eco-system to learn, connect, solve, and share within communities.MentorED is an open source mentoring application that facilitates peer learning and professional development by creating a community of mentors and mentees.
Elevate services can be setup in local using three methods:
Docker-Compose File (Easiest)
Expectation: Run all services simultaneously with a common Docker-Compose file.
-
Install Docker & Docker-Compose.
-
To create/start all containers:
ELEVATE/mentoring$ docker-compose up
You can pass .env file to docker images of elevate service by using the below command
ELEVATE/mentoring$ mentoring_env=".env path" users_env=".env path" notification_env=".env path" scheduler=".env path" docker-compose up
example:
ELEVATE/mentoring$ mentoring_env="/Users/mentoring/src/.env" users_env="/Users/user/src/.env" notification_env="/Users/notification/src/.env" scheduler="/Users/scheduler/src/.env" docker-compose up
-
To remove all containers & networks:
``` ELEVATE/mentoring$ docker-compose down ``` Refer **Docker-Compose README** for more information. **Note:** It isn't always necessary to run **down** command. Existing containers and networks can be stopped gracefully by using **Ctrl + C** key combination. **Warning:** Do not use docker-compose in production.
Dockerized service with local dependencies(Intermediate)
Expectation: Run single docker containerized service with existing local (in host) or remote dependencies.
-
Update dependency (Mongo v4.1.4, Kafka etc) IP addresses in .env with "host.docker.internal".
Eg:
#MongoDb Connectivity Url MONGODB_URL = mongodb://host.docker.internal:27017/elevate-mentoring #Kafka Host Server URL KAFKA_URL = host.docker.external:9092
-
Find host.docker.internal IP address and added it to mongod.conf file in host.
Eg: If host.docker.internal is 172.17.0.1, mongod.conf:
# network interfaces net: port: 27017 bindIp: "127.0.0.1,172.17.0.1"
Note: Steps to find host.docker.internal IP address & location of mongod.conf is operating system specific. Refer this for more information.
-
Build the docker image.
/ELEVATE/mentoring$ docker build -t elevate/mentoring:1.0 .
-
Run the docker container.
-
For Mac & Windows with docker v18.03+:
$ docker run --name mentoring elevate/mentoring:1.0
-
For Linux:
$ docker run --name mentoring --add-host=host.docker.internal:host-gateway elevate/mentoring:1.0`
Refer this for more information.
-
-
Update dependency (Mongo v4.1.4, Kafka etc) Ip addresses in .env with respective remote server IPs.
Eg:
#MongoDb Connectivity Url MONGODB_URL = mongodb://10.1.2.34:27017/elevate-mentoring #Kafka Host Server URL KAFKA_URL = 11.2.3.45:9092
-
Add Bind IP to mongod.conf in host:
Follow the instructions given here.
Note: Instructions might differ based on MongoDB version and operating system.
-
Build the docker image.
/ELEVATE/mentoring$ docker build -t elevate/mentoring:1.0 .
-
Run the docker container.
``` $ docker run --name mentoring elevate/mentoring:1.0 ```
Local Service with local dependencies(Hardest)
Expectation: Run a single service with existing local dependencies in the host (Non-Docker Implementation).
-
Install required tools & dependencies
Install any IDE (eg: VScode)
Install Nodejs: https://nodejs.org/en/download/
Install MongoDB: https://docs.mongodb.com/manual/installation/
Install Robo-3T: https://robomongo.org/
-
Clone the Mentoring service repository.
git clone https://github.com/ELEVATE-Project/mentoring.git
-
Add .env file to the project directory
Create a .env file in src directory of the project and copy these environment variables into it.
# Mentoring Service Config # Port on which service runs APPLICATION_PORT = 3000 # Service environment APPLICATION_ENV = development # Route after base url APPLICATION_BASE_URL = /mentoring/ # Mongo db connectivity url MONGODB_URL = mongodb://localhost:27017/elevate-mentoring # Token secret to verify the access token ACCESS_TOKEN_SECRET = 'bsj82AHBxahusub12yexlashsbxAXADHBlaj' # Kafka hosted server url KAFKA_URL = localhost:9092 # Kafka group to which consumer belongs KAFKA_GROUP_ID = userservice # Kafka topic to push notification data NOTIFICATION_KAFKA_TOPIC = notificationtopic # Kafka topic name to consume from mentoring topic KAFKA_MENTORING_TOPIC ="mentoringtopic" # Kafka topic to push recording data KAFKA_RECORDING_TOPIC ="recordingtopic" # Any one of three features available for cloud storage CLOUD_STORAGE = 'GCP/AWS/AZURE' # Gcp json config file path GCP_PATH = 'gcp.json' # Gcp bucket name which stores files DEFAULT_GCP_BUCKET_NAME = 'gcp-bucket-storage-name' # Gcp project id GCP_PROJECT_ID = 'project-id' # Aws access key id AWS_ACCESS_KEY_ID = 'aws-access-key-id' # Aws secret access key AWS_SECRET_ACCESS_KEY = 'aws-secret-access-key' # Aws region where bucket will be located AWS_BUCKET_REGION = 'ap-south-1' # Aws end point AWS_BUCKET_ENDPOINT = 's3.ap-south-1.amazonaws.com' # Aws bucket name which stores files DEFAULT_AWS_BUCKET_NAME = 'aws-bucket-storage-name' # Azure storage account name AZURE_ACCOUNT_NAME = 'account-name' # Azure storage account key AZURE_ACCOUNT_KEY = 'azure-account-key' # Azure storage container which stores files DEFAULT_AZURE_CONTAINER_NAME = 'azure-container-storage-name' # user serice host USER_SERIVCE_HOST = 'http://localhost:3001' # user serice base url USER_SERIVCE_BASE_URL = '/user/' # Big blue button url BIG_BLUE_BUTTON_URL = https://dev.mentoring.shikshalokam.org # Big blue button base url BIB_BLUE_BUTTON_BASE_URL = /bigbluebutton/ # Meeting end callback events end point MEETING_END_CALLBACK_EVENTS = https%3A%2F%2Fdev.elevate-apis.shikshalokam.org%2Fmentoring%2Fv1%2Fsessions%2Fcompleted # Big blue button secret key BIG_BLUE_BUTTON_SECRET_KEY = n # Big blue button recording ready callback url RECORDING_READY_CALLBACK_URL = http%3A%2F%2Flocalhost%3A3000%2F%3FmeetingID%3Dmeet123 # Enable logging of network request ENABLE_LOG = true
-
Start MongoDB locally
Based on your host operating system and method used, start MongoDB.
-
Install Npm packages
ELEVATE/mentoring/src$ npm install
-
Start Mentoring server
ELEVATE/mentoring/src$ npm start
-
To set scheduler service job
Run the schedulerScript file from the scripts directory:
ELEVATE/mentoring/src/scripts$ node schedulerScript.js
- Node - 16.0.0
- Kafka - 3.1.0
- Jest - 28.1.1
- MongoDB - 4.1.4
- Redis - 7.0.0
Uses MongoDB v4.1.4, which has an OSI Compliant License (GNU Affero General Public License, version 3)
MongoDB v4.1.4 repository: https://github.com/mongodb/mongo/tree/r4.1.4
MongoDB v4.1.4 License: https://github.com/mongodb/mongo/blob/r4.1.4/LICENSE-Community.txt
To run the scheduler scripts
cd src/scripts
node schedulerScript.js
We have a dedicated scheduler service running.
npm run elevate-migrations s
npm run elevate-migrations create categoryEntity #Where categoryEntity is the file name.
20220726145008-categoryEntity.js
We have followed the following structure for migration files to reduce code duplication.
let categories = [
{
value: 'sqaa',
label: 'SQAA',
image: 'entity/SQAA.jpg',
},
{
value: 'communication',
label: 'Communication',
image: 'entity/Communication.png',
},
...
]
var moment = require('moment')
module.exports = {
async up(db) {
global.migrationMsg = 'Uploaded categories entity'
let entityData = []
categories.forEach(async function (category) {
category['status'] = 'ACTIVE'
category['deleted'] = false
category['type'] = 'categories'
category['updatedAt'] = moment().format()
category['createdAt'] = moment().format()
category['createdBy'] = 'SYSTEM'
category['updatedBy'] = 'SYSTEM'
entityData.push(category)
})
await db.collection('entities').insertMany(entityData)
},
async down(db) {
db.collection('entities').deleteMany({
value: { $in: categories.map((category) => category.value) },
})
},
}
npm run elevate-migrations up
npm run elevate-migrations down
To know more about migrations refer project Wiki
npm run test:integration
To know more about integration tests and their implementation refer to the project Wiki.
npm test
This project is depended on a user , notification and scheduler service. Set up these services using the setup guide. You're free to use any micro-service that is optimal for the use case. You can learn more about the full implementation of MentorEd here . The frontend/mobile application repo.
Several open source dependencies that have aided Mentoring's development: