From d5197d42b694f16aab0d01b7ccc51ea032424816 Mon Sep 17 00:00:00 2001 From: MallanagoudaB Date: Wed, 21 Jan 2026 16:32:36 +0530 Subject: [PATCH 01/19] docker-setup-for-entity --- README.md | 55 ++-- src/documentation/1.0.0/README.md | 231 ++++++++++++++++ .../1.0.0/dockerFiles/docker-compose.yml | 0 .../3.4.0/dockerFiles/docker-compose.yml | 31 +++ .../3.4.0/envs/entity_management_env | 23 ++ src/documentation/3.4.0/setup/README.md | 249 ++++++++++++++++++ 6 files changed, 569 insertions(+), 20 deletions(-) create mode 100644 src/documentation/1.0.0/README.md rename docker-compose.yml => src/documentation/1.0.0/dockerFiles/docker-compose.yml (100%) create mode 100644 src/documentation/3.4.0/dockerFiles/docker-compose.yml create mode 100644 src/documentation/3.4.0/envs/entity_management_env create mode 100644 src/documentation/3.4.0/setup/README.md diff --git a/README.md b/README.md index 656baac..3deedfe 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,5 @@ - - # entity-management +
# Entity Management @@ -61,33 +60,50 @@ Elevate entity-management services can be setup in local using two methods: **Expectation**: Run single docker containerized service with existing local (in host) or remote dependencies. -### Local Dependencies Steps - - -1. **Download Docker Compose File:** Retrieve the **[docker-compose.yml](https://raw.githubusercontent.com/ELEVATE-Project/entity-management/refs/heads/main/docker-compose.yml)** file from the entity-management service repository and save it to the entity-management directory. +## Installation -2. Run the docker container. +**Create project Directory:** Establish a directory titled **project**. - - For Mac & Windows with docker v18.03+: +> Example Command: `mkdir entity-management && cd entity-management/` - ``` - $ docker run --name entity-management shikshalokamqa/elevate-entity-management:1.0.0 - ``` +> Note: All commands are run from the project directory. - - For Linux: - ``` - $ docker run --name entity-management --add-host=host.docker.internal:host-gateway shikshalokamqa/elevate-entity-management:1.0.0` - ``` - Refer [this](https://stackoverflow.com/a/24326540) for more information. +## Operating Systems: Linux -### Remote Dependencies Steps +> **Caution:** Before proceeding, please ensure that the ports given here are available and open. It is essential to verify their availability prior to moving forward. You can run below command in your terminal to check this -1. Run the docker container. +``` +for port in 5001 27017; do + if sudo lsof -iTCP:$port -sTCP:LISTEN &>/dev/null; then + echo "Port $port is IN USE" + else + echo "Port $port is available" + fi +done +``` +1. **Download and execute main setup script:** Execute the following command in your terminal from the project directory. ``` - $ docker run --name entity-management shikshalokamqa/elevate-entity-management:1.0.0 + curl -OJL https://raw.githubusercontent.com/ELEVATE-Project/project-service/refs/heads/setupGuide-3.4/documentation/3.4.0/dockerized/scripts/stand-alone/ubuntu/setup_project.sh && chmod +x setup_project.sh && sudo ./setup_project.sh ``` +> Note : The script will download all the essential files and launch the services in Docker. Once all services are successfully up and running, you can proceed to the next steps. + +**General Instructions :** + +1. All containers which are part of the docker-compose can be gracefully stopped by pressing Ctrl + c in the same terminal where the services are running. +2. All docker containers can be stopped and removed by using below command. + +``` +sudo ./docker-compose-down.sh +``` + +3. All services and dependencies can be started using below command. + +``` +sudo ./docker-compose-up.sh +``` +
Local Service with local dependencies(Hardest) @@ -231,4 +247,3 @@ Several open source dependencies that have aided Mentoring's development: ![NodeJS](https://img.shields.io/badge/node.js-6DA55F?style=for-the-badge&logo=node.js&logoColor=white) ![MongoDB](https://img.shields.io/badge/MongoDB-%234ea94b.svg?style=for-the-badge&logo=mongodb&logoColor=white) ![Git](https://img.shields.io/badge/git-%23F05033.svg?style=for-the-badge&logo=git&logoColor=white) - diff --git a/src/documentation/1.0.0/README.md b/src/documentation/1.0.0/README.md new file mode 100644 index 0000000..b4a5099 --- /dev/null +++ b/src/documentation/1.0.0/README.md @@ -0,0 +1,231 @@ +# entity-management + +
+ +# Entity Management + + + + + +[![CircleCI](https://dl.circleci.com/status-badge/img/gh/ELEVATE-Project/notification/tree/master.svg?style=shield)](https://dl.circleci.com/status-badge/redirect/gh/ELEVATE-Project/notification/tree/master) +[![Duplicated Lines (%)](https://sonarcloud.io/api/project_badges/measure?project=ELEVATE-Project_notification&metric=duplicated_lines_density)](https://sonarcloud.io/summary/new_code?id=ELEVATE-Project_notification) +[![Coverage](https://sonarcloud.io/api/project_badges/measure?project=ELEVATE-Project_notification&metric=coverage)](https://sonarcloud.io/summary/new_code?id=ELEVATE-Project_notification) +[![Vulnerabilities](https://sonarcloud.io/api/project_badges/measure?project=ELEVATE-Project_notification&metric=vulnerabilities)](https://sonarcloud.io/summary/new_code?id=ELEVATE-Project_notification) +[![Prettier](https://img.shields.io/badge/code_style-prettier-ff69b4.svg)](https://prettier.io) +[![Docs](https://img.shields.io/badge/Docs-success-informational)](https://elevate-docs.shikshalokam.org/mentorEd/intro) +[![Docs](https://img.shields.io/badge/API-docs-informational)](https://dev.elevate-apis.shikshalokam.org/notification/api-doc) +![GitHub package.json version (subfolder of monorepo)](https://img.shields.io/github/package-json/v/ELEVATE-Project/notification?filename=src%2Fpackage.json) +[![License](https://img.shields.io/badge/license-MIT-blue.svg)](https://opensource.org/licenses/MIT) + +
CircleCI insights + +[![CircleCI](https://dl.circleci.com/insights-snapshot/gh/ELEVATE-Project/notification/master/buil-and-test/badge.svg?window=30d)](https://app.circleci.com/insights/github/ELEVATE-Project/notification/workflows/buil-and-test/overview?branch=master&reporting-window=last-30-days&insights-snapshot=true) + +
+ + +
+This Service enables the creation and management of various entities and entityType .It + provides functionalities for entities, ensuring seamless integration and + maintenance of entity-related data across the platform. +
+ +
+ +# System Requirements + +- **Operating System:** Ubuntu 22 +- **Node.js:** v20 +- **mongoDb:** v4 + +# Setup Options + +Elevate entity-management services can be setup in local using two methods: + +
Dockerized service with local dependencies(Intermediate) + +## A. Dockerized Service With Local Dependencies + +**Expectation**: Run single docker containerized service with existing local (in host) or remote dependencies. + +### Local Dependencies Steps + +1. **Download Docker Compose File:** Retrieve the **[docker-compose.yml](https://raw.githubusercontent.com/ELEVATE-Project/entity-management/refs/heads/main/docker-compose.yml)** file from the entity-management service repository and save it to the entity-management directory. + +2. Run the docker container. + + - For Mac & Windows with docker v18.03+: + + ``` + $ docker run --name entity-management shikshalokamqa/elevate-entity-management:1.0.0 + ``` + + - For Linux: + ``` + $ docker run --name entity-management --add-host=host.docker.internal:host-gateway shikshalokamqa/elevate-entity-management:1.0.0 + ``` + Refer [this](https://stackoverflow.com/a/24326540) for more information. + +### Remote Dependencies Steps + +1. Run the docker container. + + ``` + $ docker run --name entity-management shikshalokamqa/elevate-entity-management:1.0.0 + ``` + +
+ +
Local Service with local dependencies(Hardest) + +## B. Local Service With Local Dependencies + +**Expectation**: Run single service with existing local dependencies in host (**Non-Docker Implementation**). + +## Installations + +### Install Node.js LTS + +Refer to the [NodeSource distributions installation scripts](https://github.com/nodesource/distributions#installation-scripts) for Node.js installation. + +```bash +$ curl -fsSL https://deb.nodesource.com/setup_lts.x | sudo -E bash - &&\ +sudo apt-get install -y nodejs +``` + +### Install PM2 + +Refer to [How To Set Up a Node.js Application for Production on Ubuntu 22.04](https://www.digitalocean.com/community/tutorials/how-to-set-up-a-node-js-application-for-production-on-ubuntu-22-04). + +**Run the following command** + +```bash +$ sudo npm install pm2@latest -g +``` + +## Setting up Repository + +### Clone the entity-management repository to /opt/backend directory + +```bash +opt/backend$ git clone -b develop-2.5 --single-branch "https://github.com/ELEVATE-Project/entity-management" +``` + +### Install Npm packages from src directory + +```bash +backend/entity-management/src$ sudo npm i +``` + +### Create .env file in src directory + +```bash +entity-management/src$ sudo nano .env +``` + +Copy-paste the following env variables to the `.env` file: + +```env +# entity-management Service Config + +# Port on which service runs +APPLICATION_PORT=5001 + +# Application environment +APPLICATION_ENV=development + +# Route after the base URL +APPLICATION_BASE_URL=/entity/ + +# Api doc URL +API_DOC_URL= "https://project-dev.elevate-apis.shikshalokam.org/entity-management/api-doc" + +#User service URL +USER_SERVICE_URL = http://localhost:3001/user + + +INTERNAL_ACCESS_TOKEN="internal_access_token" + +#DB URL +MONGODB_URL=mongodb://mongo:27017/elevate-entity-management + +#service name +SERVICE_NAME = elevate-entity-service + +version=8 +``` + +Save and exit. + +## Setting up Databases + +**Start MongoDB Service** + +```bash +sudo systemctl start mongod +``` + +**Verify MongoDB is running** + +```bash +sudo systemctl status mongod + +``` + +## Start the Service + +Navigate to the src folder of entity-management service and run pm2 start command: + +```bash +entity-management/src$ pm2 start app.js -i 2 --name elevate-entity-management +``` + +#### Run pm2 ls command + +```bash +$ pm2 ls +``` + +
+ +
+ +# Postman Collections + +- [Entity-Management Service](https://github.com/ELEVATE-Project/entity-management/tree/main/src/api-doc) + +# Used in + +This project was built to be used with [Project Service](https://github.com/ELEVATE-Project/project-service) and [User Service](https://github.com/ELEVATE-Project/user.git). + +The frontend/mobile application [repo](https://github.com/ELEVATE-Project/observation-survey-projects-pwa). + +You can learn more about the full implementation of project-service [here](https://elevate-docs.shikshalokam.org/.project/intro) . + +# Team + + + + + +
+ +# Open Source Dependencies + +Several open source dependencies that have aided Mentoring's development: + +![NodeJS](https://img.shields.io/badge/node.js-6DA55F?style=for-the-badge&logo=node.js&logoColor=white) +![MongoDB](https://img.shields.io/badge/MongoDB-%234ea94b.svg?style=for-the-badge&logo=mongodb&logoColor=white) +![Git](https://img.shields.io/badge/git-%23F05033.svg?style=for-the-badge&logo=git&logoColor=white) diff --git a/docker-compose.yml b/src/documentation/1.0.0/dockerFiles/docker-compose.yml similarity index 100% rename from docker-compose.yml rename to src/documentation/1.0.0/dockerFiles/docker-compose.yml diff --git a/src/documentation/3.4.0/dockerFiles/docker-compose.yml b/src/documentation/3.4.0/dockerFiles/docker-compose.yml new file mode 100644 index 0000000..364d06e --- /dev/null +++ b/src/documentation/3.4.0/dockerFiles/docker-compose.yml @@ -0,0 +1,31 @@ +version: '3' +services: + mongo: + image: 'mongo:4.4.14' + restart: 'always' + ports: + - '27017:27017' + networks: + - entity_net + # volumes: + # - mongo-data:/data/db + logging: + driver: none + entity_management: + image: shikshalokamqa/elevate-entity-management:3.3.13.1 + ports: + - '5001:5001' + command: ['nodemon', 'app.js'] + env_file: + - ./entity_management_env + depends_on: + - mongo + networks: + - entity_net + +networks: + entity_net: + # external: false +volumes: + mongo-data: + logs: diff --git a/src/documentation/3.4.0/envs/entity_management_env b/src/documentation/3.4.0/envs/entity_management_env new file mode 100644 index 0000000..8f530d1 --- /dev/null +++ b/src/documentation/3.4.0/envs/entity_management_env @@ -0,0 +1,23 @@ +APPLICATION_PORT = 5001 +APPLICATION_ENV ="development" +APPLICATION_BASE_URL='/entity-management/' +INTERNAL_ACCESS_TOKEN =xahusub12yexlashsbxAXADHBlaj +ACCESS_TOKEN_SECRET=bsj82AHBxahusub12yexlashsbxAXADHBlaj +MONGODB_URL=mongodb://mongo:27017/elevate-entity +AUTH_METHOD = native +USER_SERVICE_URL = http://interface:3569 +USER_SERVICE_BASE_URL=/user +KAFKA_HEALTH_CHECK_TOPIC=test +SERVICE_NAME = elevate-entity-service +API_DOC_URL="https://entity-management/entity-management/api-doc" +APPLICATION_HOST=entity_management +IS_AUTH_TOKEN_BEARER="false" +ADMIN_ACCESS_TOKEN=rwwee3$123 +ADMIN_TOKEN_HEADER_NAME="admin-auth-token" +INTERFACE_SERVICE_URL=http://interface:3569 +KAFKA_HEALTH_CHECK_TOPIC = entity-health-check-topic-check +KAFKA_COMMUNICATIONS_ON_OFF = ON +KAFKA_URL=kafka:9092 +KAFKA_COMMUNICATIONS_ON_OFF = ON +KAFKA_GROUP_ID = entity +HEALTH_CHECK_DEBUG_MODE = true \ No newline at end of file diff --git a/src/documentation/3.4.0/setup/README.md b/src/documentation/3.4.0/setup/README.md new file mode 100644 index 0000000..3deedfe --- /dev/null +++ b/src/documentation/3.4.0/setup/README.md @@ -0,0 +1,249 @@ +# entity-management + +
+ +# Entity Management + + + + + +[![CircleCI](https://dl.circleci.com/status-badge/img/gh/ELEVATE-Project/notification/tree/master.svg?style=shield)](https://dl.circleci.com/status-badge/redirect/gh/ELEVATE-Project/notification/tree/master) +[![Duplicated Lines (%)](https://sonarcloud.io/api/project_badges/measure?project=ELEVATE-Project_notification&metric=duplicated_lines_density)](https://sonarcloud.io/summary/new_code?id=ELEVATE-Project_notification) +[![Coverage](https://sonarcloud.io/api/project_badges/measure?project=ELEVATE-Project_notification&metric=coverage)](https://sonarcloud.io/summary/new_code?id=ELEVATE-Project_notification) +[![Vulnerabilities](https://sonarcloud.io/api/project_badges/measure?project=ELEVATE-Project_notification&metric=vulnerabilities)](https://sonarcloud.io/summary/new_code?id=ELEVATE-Project_notification) +[![Prettier](https://img.shields.io/badge/code_style-prettier-ff69b4.svg)](https://prettier.io) +[![Docs](https://img.shields.io/badge/Docs-success-informational)](https://elevate-docs.shikshalokam.org/mentorEd/intro) +[![Docs](https://img.shields.io/badge/API-docs-informational)](https://dev.elevate-apis.shikshalokam.org/notification/api-doc) +![GitHub package.json version (subfolder of monorepo)](https://img.shields.io/github/package-json/v/ELEVATE-Project/notification?filename=src%2Fpackage.json) +[![License](https://img.shields.io/badge/license-MIT-blue.svg)](https://opensource.org/licenses/MIT) + +
CircleCI insights + +[![CircleCI](https://dl.circleci.com/insights-snapshot/gh/ELEVATE-Project/notification/master/buil-and-test/badge.svg?window=30d)](https://app.circleci.com/insights/github/ELEVATE-Project/notification/workflows/buil-and-test/overview?branch=master&reporting-window=last-30-days&insights-snapshot=true) + +
+ + +
+This Service enables the creation and management of various entities and entityType .It + provides functionalities for entities, ensuring seamless integration and + maintenance of entity-related data across the platform. +
+ +
+ +# System Requirements + +- **Operating System:** Ubuntu 22 +- **Node.js:** v20 +- **mongoDb:** v4 + +# Setup Options + +Elevate entity-management services can be setup in local using two methods: + +
Dockerized service with local dependencies(Intermediate) + +## A. Dockerized Service With Local Dependencies + +**Expectation**: Run single docker containerized service with existing local (in host) or remote dependencies. + +## Installation + +**Create project Directory:** Establish a directory titled **project**. + +> Example Command: `mkdir entity-management && cd entity-management/` + +> Note: All commands are run from the project directory. + +## Operating Systems: Linux + +> **Caution:** Before proceeding, please ensure that the ports given here are available and open. It is essential to verify their availability prior to moving forward. You can run below command in your terminal to check this + +``` +for port in 5001 27017; do + if sudo lsof -iTCP:$port -sTCP:LISTEN &>/dev/null; then + echo "Port $port is IN USE" + else + echo "Port $port is available" + fi +done +``` + +1. **Download and execute main setup script:** Execute the following command in your terminal from the project directory. + ``` + curl -OJL https://raw.githubusercontent.com/ELEVATE-Project/project-service/refs/heads/setupGuide-3.4/documentation/3.4.0/dockerized/scripts/stand-alone/ubuntu/setup_project.sh && chmod +x setup_project.sh && sudo ./setup_project.sh + ``` + +> Note : The script will download all the essential files and launch the services in Docker. Once all services are successfully up and running, you can proceed to the next steps. + +**General Instructions :** + +1. All containers which are part of the docker-compose can be gracefully stopped by pressing Ctrl + c in the same terminal where the services are running. +2. All docker containers can be stopped and removed by using below command. + +``` +sudo ./docker-compose-down.sh +``` + +3. All services and dependencies can be started using below command. + +``` +sudo ./docker-compose-up.sh +``` + +
+ +
Local Service with local dependencies(Hardest) + +## B. Local Service With Local Dependencies + +**Expectation**: Run single service with existing local dependencies in host (**Non-Docker Implementation**). + +## Installations + +### Install Node.js LTS + +Refer to the [NodeSource distributions installation scripts](https://github.com/nodesource/distributions#installation-scripts) for Node.js installation. + +```bash +$ curl -fsSL https://deb.nodesource.com/setup_lts.x | sudo -E bash - &&\ +sudo apt-get install -y nodejs +``` + +### Install PM2 + +Refer to [How To Set Up a Node.js Application for Production on Ubuntu 22.04](https://www.digitalocean.com/community/tutorials/how-to-set-up-a-node-js-application-for-production-on-ubuntu-22-04). + +**Run the following command** + +```bash +$ sudo npm install pm2@latest -g +``` + +## Setting up Repository + +### Clone the entity-management repository to /opt/backend directory + +```bash +opt/backend$ git clone -b develop-2.5 --single-branch "https://github.com/ELEVATE-Project/entity-management" +``` + +### Install Npm packages from src directory + +```bash +backend/entity-management/src$ sudo npm i +``` + +### Create .env file in src directory + +```bash +entity-management/src$ sudo nano .env +``` + +Copy-paste the following env variables to the `.env` file: + +```env +# entity-management Service Config + +# Port on which service runs +APPLICATION_PORT=5001 + +# Application environment +APPLICATION_ENV=development + +# Route after the base URL +APPLICATION_BASE_URL=/entity/ + +# Api doc URL +API_DOC_URL= "https://project-dev.elevate-apis.shikshalokam.org/entity-management/api-doc" + +#User service URL +USER_SERVICE_URL = http://localhost:3001/user + + +INTERNAL_ACCESS_TOKEN="internal_access_token" + +#DB URL +MONGODB_URL=mongodb://mongo:27017/elevate-entity-management + +#service name +SERVICE_NAME = elevate-entity-service + +version=8 +``` + +Save and exit. + +## Setting up Databases + +**Start MongoDB Service** + +```bash +sudo systemctl start mongod +``` + +**Verify MongoDB is running** + +```bash +sudo systemctl status mongod + +``` + +## Start the Service + +Navigate to the src folder of entity-management service and run pm2 start command: + +```bash +entity-management/src$ pm2 start app.js -i 2 --name elevate-entity-management +``` + +#### Run pm2 ls command + +```bash +$ pm2 ls +``` + +
+ +
+ +# Postman Collections + +- [Entity-Management Service](https://github.com/ELEVATE-Project/entity-management/tree/main/src/api-doc) + +# Used in + +This project was built to be used with [Project Service](https://github.com/ELEVATE-Project/project-service) and [User Service](https://github.com/ELEVATE-Project/user.git). + +The frontend/mobile application [repo](https://github.com/ELEVATE-Project/observation-survey-projects-pwa). + +You can learn more about the full implementation of project-service [here](https://elevate-docs.shikshalokam.org/.project/intro) . + +# Team + + + + + +
+ +# Open Source Dependencies + +Several open source dependencies that have aided Mentoring's development: + +![NodeJS](https://img.shields.io/badge/node.js-6DA55F?style=for-the-badge&logo=node.js&logoColor=white) +![MongoDB](https://img.shields.io/badge/MongoDB-%234ea94b.svg?style=for-the-badge&logo=mongodb&logoColor=white) +![Git](https://img.shields.io/badge/git-%23F05033.svg?style=for-the-badge&logo=git&logoColor=white) From 829aa11af082b911fe771ef9ce63d76432f8adc4 Mon Sep 17 00:00:00 2001 From: MallanagoudaB Date: Tue, 27 Jan 2026 12:21:07 +0530 Subject: [PATCH 02/19] docker-setup-guide --- README.md | 2 +- .../3.4.0/commonFiles/configFile.json | 11 ++ .../dockerFiles/docker-compose.yml | 0 .../envs/entity_management_env | 0 .../script/ubuntu/docker-compose-down.sh | 10 ++ .../script/ubuntu/docker-compose-up.sh | 10 ++ .../dockerized/script/ubuntu/entity_setup.sh | 45 ++++++ .../3.4.0/setup/{ => docker/ubuntu}/README.md | 128 +----------------- 8 files changed, 78 insertions(+), 128 deletions(-) create mode 100644 src/documentation/3.4.0/commonFiles/configFile.json rename src/documentation/3.4.0/{ => dockerized}/dockerFiles/docker-compose.yml (100%) rename src/documentation/3.4.0/{ => dockerized}/envs/entity_management_env (100%) create mode 100644 src/documentation/3.4.0/dockerized/script/ubuntu/docker-compose-down.sh create mode 100644 src/documentation/3.4.0/dockerized/script/ubuntu/docker-compose-up.sh create mode 100644 src/documentation/3.4.0/dockerized/script/ubuntu/entity_setup.sh rename src/documentation/3.4.0/setup/{ => docker/ubuntu}/README.md (57%) diff --git a/README.md b/README.md index 3deedfe..2d71811 100644 --- a/README.md +++ b/README.md @@ -84,7 +84,7 @@ done 1. **Download and execute main setup script:** Execute the following command in your terminal from the project directory. ``` - curl -OJL https://raw.githubusercontent.com/ELEVATE-Project/project-service/refs/heads/setupGuide-3.4/documentation/3.4.0/dockerized/scripts/stand-alone/ubuntu/setup_project.sh && chmod +x setup_project.sh && sudo ./setup_project.sh + curl -OJL https://raw.githubusercontent.com/ELEVATE-Project/entity-management/refs/heads/dockerSetup/src/documentation/3.4.0/dockerFiles/docker-compose.yml ``` > Note : The script will download all the essential files and launch the services in Docker. Once all services are successfully up and running, you can proceed to the next steps. diff --git a/src/documentation/3.4.0/commonFiles/configFile.json b/src/documentation/3.4.0/commonFiles/configFile.json new file mode 100644 index 0000000..b3d32b2 --- /dev/null +++ b/src/documentation/3.4.0/commonFiles/configFile.json @@ -0,0 +1,11 @@ +{ + "authTokenUserInformation": { + "userId": "data.id", + "userName": "data.name", + "firstName": "data.name", + "organization_id": "data.organization_codes[0]", + "roles": "data.organizations[?code={{organization_id}}].roles", + "organizations": "data.organizations", + "tenant_id": "data.tenant_code" + } +} diff --git a/src/documentation/3.4.0/dockerFiles/docker-compose.yml b/src/documentation/3.4.0/dockerized/dockerFiles/docker-compose.yml similarity index 100% rename from src/documentation/3.4.0/dockerFiles/docker-compose.yml rename to src/documentation/3.4.0/dockerized/dockerFiles/docker-compose.yml diff --git a/src/documentation/3.4.0/envs/entity_management_env b/src/documentation/3.4.0/dockerized/envs/entity_management_env similarity index 100% rename from src/documentation/3.4.0/envs/entity_management_env rename to src/documentation/3.4.0/dockerized/envs/entity_management_env diff --git a/src/documentation/3.4.0/dockerized/script/ubuntu/docker-compose-down.sh b/src/documentation/3.4.0/dockerized/script/ubuntu/docker-compose-down.sh new file mode 100644 index 0000000..f7fb42b --- /dev/null +++ b/src/documentation/3.4.0/dockerized/script/ubuntu/docker-compose-down.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +# Get the directory of the shell script +SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" + +# Set environment variables +export entity_management_env="$SCRIPT_DIR/entity_management_env" + +# Run docker-compose +docker compose -f "$SCRIPT_DIR/docker-compose.yml" down \ No newline at end of file diff --git a/src/documentation/3.4.0/dockerized/script/ubuntu/docker-compose-up.sh b/src/documentation/3.4.0/dockerized/script/ubuntu/docker-compose-up.sh new file mode 100644 index 0000000..723d92a --- /dev/null +++ b/src/documentation/3.4.0/dockerized/script/ubuntu/docker-compose-up.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +# Get the directory of the shell script +SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" + +# Set environment variables +export entity_management_env="$SCRIPT_DIR/entity_management_env" + +# Run docker-compose +docker compose -f "$SCRIPT_DIR/docker-compose.yml" up diff --git a/src/documentation/3.4.0/dockerized/script/ubuntu/entity_setup.sh b/src/documentation/3.4.0/dockerized/script/ubuntu/entity_setup.sh new file mode 100644 index 0000000..008dbbe --- /dev/null +++ b/src/documentation/3.4.0/dockerized/script/ubuntu/entity_setup.sh @@ -0,0 +1,45 @@ +#!/bin/bash + +# Logging function +log() { + echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" >> setup_log.txt +} + +# Step 1: Download Docker Compose file +log "Downloading Docker Compose file..." +curl -OJL https://raw.githubusercontent.com/ELEVATE-Project/project-service/refs/heads/main/documentation/3.4.0/dockerized/dockerFiles/project-with-survey/docker-compose-project.yml +log "Docker Compose file downloaded." + +# Step 2: Download environment files +log "Downloading environment files..." +curl -L \ + -O https://raw.githubusercontent.com/ELEVATE-Project/project-service/refs/heads/main/documentation/3.4.0/dockerized/envs/interface_env \ +log "Environment files downloaded." + + +# Step 6: Download additional scripts +log "Downloading docker-compose scripts..." +curl -OJL https://raw.githubusercontent.com/ELEVATE-Project/project-service/refs/heads/main/documentation/3.4.0/dockerized/scripts/project-with-survey/ubuntu/docker-compose-up.sh +curl -OJL https://raw.githubusercontent.com/ELEVATE-Project/project-service/refs/heads/main/documentation/3.4.0/dockerized/scripts/project-with-survey/ubuntu/docker-compose-down.sh +log "docker-compose scripts downloaded." + +# Step 7: Make the scripts executable +log "Making docker-compose scripts executable..." +chmod +x docker-compose-up.sh +chmod +x docker-compose-down.sh +log "Made docker-compose scripts executable." + +# Install MongoDB driver (usually needed if connecting directly to MongoDB/Citus) +npm install mongodb + +# Install Mongoose (Object Data Modeling library, if the scripts use it) +npm install mongoose + +log "Downloading config.json file..." +curl -L https://raw.githubusercontent.com/ELEVATE-Project/project-service/refs/heads/main/documentation/3.4.0/common-files/dockerized/project-with-survey/configFile.json -o config.json +log "config.json file is downloaded." + +# Step 13: Run docker-compose-up.sh script +log "Running docker-compose-up.sh script..." +./docker-compose-up.sh +log "docker-compose-up.sh script executed." diff --git a/src/documentation/3.4.0/setup/README.md b/src/documentation/3.4.0/setup/docker/ubuntu/README.md similarity index 57% rename from src/documentation/3.4.0/setup/README.md rename to src/documentation/3.4.0/setup/docker/ubuntu/README.md index 3deedfe..b90863f 100644 --- a/src/documentation/3.4.0/setup/README.md +++ b/src/documentation/3.4.0/setup/docker/ubuntu/README.md @@ -27,14 +27,6 @@ [![CircleCI](https://dl.circleci.com/insights-snapshot/gh/ELEVATE-Project/notification/master/buil-and-test/badge.svg?window=30d)](https://app.circleci.com/insights/github/ELEVATE-Project/notification/workflows/buil-and-test/overview?branch=master&reporting-window=last-30-days&insights-snapshot=true)
-
This Service enables the creation and management of various entities and entityType .It @@ -50,13 +42,7 @@ This Service enables the creation and management of various entities and entityT - **Node.js:** v20 - **mongoDb:** v4 -# Setup Options - -Elevate entity-management services can be setup in local using two methods: - -
Dockerized service with local dependencies(Intermediate) - -## A. Dockerized Service With Local Dependencies +## Dockerized Service With Local Dependencies **Expectation**: Run single docker containerized service with existing local (in host) or remote dependencies. @@ -106,118 +92,6 @@ sudo ./docker-compose-up.sh
-
Local Service with local dependencies(Hardest) - -## B. Local Service With Local Dependencies - -**Expectation**: Run single service with existing local dependencies in host (**Non-Docker Implementation**). - -## Installations - -### Install Node.js LTS - -Refer to the [NodeSource distributions installation scripts](https://github.com/nodesource/distributions#installation-scripts) for Node.js installation. - -```bash -$ curl -fsSL https://deb.nodesource.com/setup_lts.x | sudo -E bash - &&\ -sudo apt-get install -y nodejs -``` - -### Install PM2 - -Refer to [How To Set Up a Node.js Application for Production on Ubuntu 22.04](https://www.digitalocean.com/community/tutorials/how-to-set-up-a-node-js-application-for-production-on-ubuntu-22-04). - -**Run the following command** - -```bash -$ sudo npm install pm2@latest -g -``` - -## Setting up Repository - -### Clone the entity-management repository to /opt/backend directory - -```bash -opt/backend$ git clone -b develop-2.5 --single-branch "https://github.com/ELEVATE-Project/entity-management" -``` - -### Install Npm packages from src directory - -```bash -backend/entity-management/src$ sudo npm i -``` - -### Create .env file in src directory - -```bash -entity-management/src$ sudo nano .env -``` - -Copy-paste the following env variables to the `.env` file: - -```env -# entity-management Service Config - -# Port on which service runs -APPLICATION_PORT=5001 - -# Application environment -APPLICATION_ENV=development - -# Route after the base URL -APPLICATION_BASE_URL=/entity/ - -# Api doc URL -API_DOC_URL= "https://project-dev.elevate-apis.shikshalokam.org/entity-management/api-doc" - -#User service URL -USER_SERVICE_URL = http://localhost:3001/user - - -INTERNAL_ACCESS_TOKEN="internal_access_token" - -#DB URL -MONGODB_URL=mongodb://mongo:27017/elevate-entity-management - -#service name -SERVICE_NAME = elevate-entity-service - -version=8 -``` - -Save and exit. - -## Setting up Databases - -**Start MongoDB Service** - -```bash -sudo systemctl start mongod -``` - -**Verify MongoDB is running** - -```bash -sudo systemctl status mongod - -``` - -## Start the Service - -Navigate to the src folder of entity-management service and run pm2 start command: - -```bash -entity-management/src$ pm2 start app.js -i 2 --name elevate-entity-management -``` - -#### Run pm2 ls command - -```bash -$ pm2 ls -``` - -
-
# Postman Collections From e336ec7aedbad569afdf64a420a3154748a76ec9 Mon Sep 17 00:00:00 2001 From: MallanagoudaB Date: Tue, 27 Jan 2026 12:26:46 +0530 Subject: [PATCH 03/19] docker-setup-guide --- .../3.4.0/dockerized/dockerFiles/docker-compose.yml | 2 ++ .../3.4.0/dockerized/script/ubuntu/entity_setup.sh | 10 +++++----- src/documentation/3.4.0/setup/docker/ubuntu/README.md | 2 +- 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/src/documentation/3.4.0/dockerized/dockerFiles/docker-compose.yml b/src/documentation/3.4.0/dockerized/dockerFiles/docker-compose.yml index 364d06e..727bdec 100644 --- a/src/documentation/3.4.0/dockerized/dockerFiles/docker-compose.yml +++ b/src/documentation/3.4.0/dockerized/dockerFiles/docker-compose.yml @@ -20,6 +20,8 @@ services: - ./entity_management_env depends_on: - mongo + volumes: + - ./config.json:/var/src/config.json networks: - entity_net diff --git a/src/documentation/3.4.0/dockerized/script/ubuntu/entity_setup.sh b/src/documentation/3.4.0/dockerized/script/ubuntu/entity_setup.sh index 008dbbe..477e306 100644 --- a/src/documentation/3.4.0/dockerized/script/ubuntu/entity_setup.sh +++ b/src/documentation/3.4.0/dockerized/script/ubuntu/entity_setup.sh @@ -7,20 +7,20 @@ log() { # Step 1: Download Docker Compose file log "Downloading Docker Compose file..." -curl -OJL https://raw.githubusercontent.com/ELEVATE-Project/project-service/refs/heads/main/documentation/3.4.0/dockerized/dockerFiles/project-with-survey/docker-compose-project.yml +curl -OJL https://raw.githubusercontent.com/ELEVATE-Project/entity-management/refs/heads/dockerSetup/src/documentation/3.4.0/dockerized/dockerFiles/docker-compose.yml log "Docker Compose file downloaded." # Step 2: Download environment files log "Downloading environment files..." curl -L \ - -O https://raw.githubusercontent.com/ELEVATE-Project/project-service/refs/heads/main/documentation/3.4.0/dockerized/envs/interface_env \ + -O https://raw.githubusercontent.com/ELEVATE-Project/entity-management/refs/heads/dockerSetup/src/documentation/3.4.0/dockerized/envs/entity_management_env \ log "Environment files downloaded." # Step 6: Download additional scripts log "Downloading docker-compose scripts..." -curl -OJL https://raw.githubusercontent.com/ELEVATE-Project/project-service/refs/heads/main/documentation/3.4.0/dockerized/scripts/project-with-survey/ubuntu/docker-compose-up.sh -curl -OJL https://raw.githubusercontent.com/ELEVATE-Project/project-service/refs/heads/main/documentation/3.4.0/dockerized/scripts/project-with-survey/ubuntu/docker-compose-down.sh +curl -OJL https://raw.githubusercontent.com/ELEVATE-Project/entity-management/refs/heads/dockerSetup/src/documentation/3.4.0/dockerized/script/ubuntu/docker-compose-down.sh +curl -OJL https://raw.githubusercontent.com/ELEVATE-Project/entity-management/refs/heads/dockerSetup/src/documentation/3.4.0/dockerized/script/ubuntu/docker-compose-down.sh log "docker-compose scripts downloaded." # Step 7: Make the scripts executable @@ -36,7 +36,7 @@ npm install mongodb npm install mongoose log "Downloading config.json file..." -curl -L https://raw.githubusercontent.com/ELEVATE-Project/project-service/refs/heads/main/documentation/3.4.0/common-files/dockerized/project-with-survey/configFile.json -o config.json +curl -L https://raw.githubusercontent.com/ELEVATE-Project/entity-management/refs/heads/dockerSetup/src/documentation/3.4.0/commonFiles/configFile.json -o config.json log "config.json file is downloaded." # Step 13: Run docker-compose-up.sh script diff --git a/src/documentation/3.4.0/setup/docker/ubuntu/README.md b/src/documentation/3.4.0/setup/docker/ubuntu/README.md index b90863f..d3a281d 100644 --- a/src/documentation/3.4.0/setup/docker/ubuntu/README.md +++ b/src/documentation/3.4.0/setup/docker/ubuntu/README.md @@ -70,7 +70,7 @@ done 1. **Download and execute main setup script:** Execute the following command in your terminal from the project directory. ``` - curl -OJL https://raw.githubusercontent.com/ELEVATE-Project/project-service/refs/heads/setupGuide-3.4/documentation/3.4.0/dockerized/scripts/stand-alone/ubuntu/setup_project.sh && chmod +x setup_project.sh && sudo ./setup_project.sh + curl -OJL https://raw.githubusercontent.com/ELEVATE-Project/entity-management/refs/heads/dockerSetup/src/documentation/3.4.0/dockerized/script/ubuntu/entity_setup.sh && chmod +x entity_setup.sh && sudo ./entity_setup.sh ``` > Note : The script will download all the essential files and launch the services in Docker. Once all services are successfully up and running, you can proceed to the next steps. From ee4e5da00fdc8d506e55992df0982e10e2d84eaf Mon Sep 17 00:00:00 2001 From: MallanagoudaB Date: Tue, 27 Jan 2026 12:31:00 +0530 Subject: [PATCH 04/19] docker-setup-guide --- .../3.4.0/dockerized/script/ubuntu/entity_setup.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/documentation/3.4.0/dockerized/script/ubuntu/entity_setup.sh b/src/documentation/3.4.0/dockerized/script/ubuntu/entity_setup.sh index 477e306..0e12def 100644 --- a/src/documentation/3.4.0/dockerized/script/ubuntu/entity_setup.sh +++ b/src/documentation/3.4.0/dockerized/script/ubuntu/entity_setup.sh @@ -19,7 +19,7 @@ log "Environment files downloaded." # Step 6: Download additional scripts log "Downloading docker-compose scripts..." -curl -OJL https://raw.githubusercontent.com/ELEVATE-Project/entity-management/refs/heads/dockerSetup/src/documentation/3.4.0/dockerized/script/ubuntu/docker-compose-down.sh +curl -OJL https://raw.githubusercontent.com/ELEVATE-Project/entity-management/refs/heads/dockerSetup/src/documentation/3.4.0/dockerized/script/ubuntu/docker-compose-up.sh curl -OJL https://raw.githubusercontent.com/ELEVATE-Project/entity-management/refs/heads/dockerSetup/src/documentation/3.4.0/dockerized/script/ubuntu/docker-compose-down.sh log "docker-compose scripts downloaded." From df3413297ad7951db381e15389ac375aa92b2eb7 Mon Sep 17 00:00:00 2001 From: MallanagoudaB Date: Tue, 27 Jan 2026 12:48:14 +0530 Subject: [PATCH 05/19] docker-setup-guide --- .../script/mac-os/docker-compose-down.sh | 10 +++ .../script/mac-os/docker-compose-up.sh | 10 +++ .../dockerized/script/mac-os/entity_setup.sh | 67 +++++++++++++++++++ .../dockerized/script/ubuntu/entity_setup.sh | 2 +- 4 files changed, 88 insertions(+), 1 deletion(-) create mode 100644 src/documentation/3.4.0/dockerized/script/mac-os/docker-compose-down.sh create mode 100644 src/documentation/3.4.0/dockerized/script/mac-os/docker-compose-up.sh create mode 100644 src/documentation/3.4.0/dockerized/script/mac-os/entity_setup.sh diff --git a/src/documentation/3.4.0/dockerized/script/mac-os/docker-compose-down.sh b/src/documentation/3.4.0/dockerized/script/mac-os/docker-compose-down.sh new file mode 100644 index 0000000..f7fb42b --- /dev/null +++ b/src/documentation/3.4.0/dockerized/script/mac-os/docker-compose-down.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +# Get the directory of the shell script +SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" + +# Set environment variables +export entity_management_env="$SCRIPT_DIR/entity_management_env" + +# Run docker-compose +docker compose -f "$SCRIPT_DIR/docker-compose.yml" down \ No newline at end of file diff --git a/src/documentation/3.4.0/dockerized/script/mac-os/docker-compose-up.sh b/src/documentation/3.4.0/dockerized/script/mac-os/docker-compose-up.sh new file mode 100644 index 0000000..7df7ef3 --- /dev/null +++ b/src/documentation/3.4.0/dockerized/script/mac-os/docker-compose-up.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +# Get the directory of the shell script +SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" + +# Set environment variables +export entity_management_env="$SCRIPT_DIR/entity_management_env" + +# Run docker compose +docker compose -f "$SCRIPT_DIR/docker-compose.yml" up diff --git a/src/documentation/3.4.0/dockerized/script/mac-os/entity_setup.sh b/src/documentation/3.4.0/dockerized/script/mac-os/entity_setup.sh new file mode 100644 index 0000000..7b3987b --- /dev/null +++ b/src/documentation/3.4.0/dockerized/script/mac-os/entity_setup.sh @@ -0,0 +1,67 @@ +#!/bin/bash +set -e + +# ----------------------------- +# Logging function +# ----------------------------- +log() { + echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" | tee -a setup_log.txt +} + +# ----------------------------- +log "Checking Docker availability..." +if ! command -v docker >/dev/null 2>&1; then + echo "❌ Docker is not installed. Install Docker Desktop for Mac first." + exit 1 +fi + +if ! docker info >/dev/null 2>&1; then + echo "❌ Docker is not running. Please start Docker Desktop." + exit 1 +fi +log "Docker is installed and running." + +# ----------------------------- +# Step 2: Download Docker Compose file +# ----------------------------- +log "Downloading Docker Compose file..." +curl -OJL https://raw.githubusercontent.com/ELEVATE-Project/entity-management/refs/heads/dockerSetup/src/documentation/3.4.0/dockerized/dockerFiles/docker-compose.yml +log "Docker Compose file downloaded." + +# ----------------------------- +# Step 3: Download environment files +# ----------------------------- +log "Downloading environment files..." +curl -L \ + -O https://raw.githubusercontent.com/ELEVATE-Project/entity-management/refs/heads/dockerSetup/src/documentation/3.4.0/dockerized/envs/entity_management_env +log "Environment files downloaded." + + +# ----------------------------- +# Step 5: docker-compose scripts (mac-safe) +# ----------------------------- +log "Downloading docker-compose scripts..." +curl -OJL https://raw.githubusercontent.com/ELEVATE-Project/entity-management/refs/heads/dockerSetup/src/documentation/3.4.0/dockerized/script/mac-os/docker-compose-up.sh +curl -OJL https://raw.githubusercontent.com/ELEVATE-Project/entity-management/refs/heads/dockerSetup/src/documentation/3.4.0/dockerized/script/mac-os/docker-compose-down.sh +chmod +x docker-compose-down.sh +chmod +x docker-compose-up.sh + +# ---- SAFE patch (command only, filenames untouched) +sed -i '' 's/^docker-compose /docker compose /g' docker-compose-up.sh +sed -i '' 's/^docker-compose /docker compose /g' docker-compose-down.sh +log "docker-compose scripts patched safely." + + +# ----------------------------- +# Step 10: config.json +# ----------------------------- +log "Downloading config.json..." +curl -L https://raw.githubusercontent.com/ELEVATE-Project/entity-management/refs/heads/dockerSetup/src/documentation/3.4.0/commonFiles/configFile.json -o config.json +log "config.json downloaded." + +# ----------------------------- +# Step 11: Start services +# ----------------------------- +log "Starting services using docker compose..." +./docker-compose-up.sh +log "Docker services started successfully." diff --git a/src/documentation/3.4.0/dockerized/script/ubuntu/entity_setup.sh b/src/documentation/3.4.0/dockerized/script/ubuntu/entity_setup.sh index 0e12def..3f2f324 100644 --- a/src/documentation/3.4.0/dockerized/script/ubuntu/entity_setup.sh +++ b/src/documentation/3.4.0/dockerized/script/ubuntu/entity_setup.sh @@ -13,7 +13,7 @@ log "Docker Compose file downloaded." # Step 2: Download environment files log "Downloading environment files..." curl -L \ - -O https://raw.githubusercontent.com/ELEVATE-Project/entity-management/refs/heads/dockerSetup/src/documentation/3.4.0/dockerized/envs/entity_management_env \ + -O https://raw.githubusercontent.com/ELEVATE-Project/entity-management/refs/heads/dockerSetup/src/documentation/3.4.0/dockerized/envs/entity_management_env log "Environment files downloaded." From f8ba006580565c48f3418b8e26b7200933cd29d2 Mon Sep 17 00:00:00 2001 From: MallanagoudaB Date: Tue, 27 Jan 2026 12:54:28 +0530 Subject: [PATCH 06/19] docker-setup-guide --- .../3.4.0/setup/docker/mac-os/README.md | 123 ++++++++++++++++++ .../3.4.0/setup/docker/ubuntu/README.md | 4 +- 2 files changed, 125 insertions(+), 2 deletions(-) create mode 100644 src/documentation/3.4.0/setup/docker/mac-os/README.md diff --git a/src/documentation/3.4.0/setup/docker/mac-os/README.md b/src/documentation/3.4.0/setup/docker/mac-os/README.md new file mode 100644 index 0000000..fbfa45e --- /dev/null +++ b/src/documentation/3.4.0/setup/docker/mac-os/README.md @@ -0,0 +1,123 @@ +# entity-management + +
+ +# Entity Management + + + + + +[![CircleCI](https://dl.circleci.com/status-badge/img/gh/ELEVATE-Project/notification/tree/master.svg?style=shield)](https://dl.circleci.com/status-badge/redirect/gh/ELEVATE-Project/notification/tree/master) +[![Duplicated Lines (%)](https://sonarcloud.io/api/project_badges/measure?project=ELEVATE-Project_notification&metric=duplicated_lines_density)](https://sonarcloud.io/summary/new_code?id=ELEVATE-Project_notification) +[![Coverage](https://sonarcloud.io/api/project_badges/measure?project=ELEVATE-Project_notification&metric=coverage)](https://sonarcloud.io/summary/new_code?id=ELEVATE-Project_notification) +[![Vulnerabilities](https://sonarcloud.io/api/project_badges/measure?project=ELEVATE-Project_notification&metric=vulnerabilities)](https://sonarcloud.io/summary/new_code?id=ELEVATE-Project_notification) +[![Prettier](https://img.shields.io/badge/code_style-prettier-ff69b4.svg)](https://prettier.io) +[![Docs](https://img.shields.io/badge/Docs-success-informational)](https://elevate-docs.shikshalokam.org/mentorEd/intro) +[![Docs](https://img.shields.io/badge/API-docs-informational)](https://dev.elevate-apis.shikshalokam.org/notification/api-doc) +![GitHub package.json version (subfolder of monorepo)](https://img.shields.io/github/package-json/v/ELEVATE-Project/notification?filename=src%2Fpackage.json) +[![License](https://img.shields.io/badge/license-MIT-blue.svg)](https://opensource.org/licenses/MIT) + +
CircleCI insights + +[![CircleCI](https://dl.circleci.com/insights-snapshot/gh/ELEVATE-Project/notification/master/buil-and-test/badge.svg?window=30d)](https://app.circleci.com/insights/github/ELEVATE-Project/notification/workflows/buil-and-test/overview?branch=master&reporting-window=last-30-days&insights-snapshot=true) + +
+ +
+This Service enables the creation and management of various entities and entityType .It + provides functionalities for entities, ensuring seamless integration and + maintenance of entity-related data across the platform. +
+ +
+ +# System Requirements + +- **Operating System:** Ubuntu 22 +- **Node.js:** v20 +- **mongoDb:** v4 + +## Dockerized Service With Local Dependencies - Mac-Os + +**Expectation**: Run single docker containerized service with existing local (in host) or remote dependencies. + +## Installation + +**Create project Directory:** Establish a directory titled **project**. + +> Example Command: `mkdir entity-management && cd entity-management/` + +> Note: All commands are run from the project directory. + +## Checking Port Availability + +> **Caution:** Before proceeding, please ensure that the ports given here are available and open. It is essential to verify their availability prior to moving forward. You can run below command in your terminal to check this + +``` +for port in 5001 27017; do + if sudo lsof -iTCP:$port -sTCP:LISTEN &>/dev/null; then + echo "Port $port is IN USE" + else + echo "Port $port is available" + fi +done +``` + +1. **Download and execute main setup script:** Execute the following command in your terminal from the project directory. + ``` + curl -OJL https://raw.githubusercontent.com/ELEVATE-Project/entity-management/refs/heads/dockerSetup/src/documentation/3.4.0/dockerized/script/mac-os/entity_setup.sh && chmod +x entity_setup.sh && sudo ./entity_setup.sh + ``` + +> Note : The script will download all the essential files and launch the services in Docker. Once all services are successfully up and running, you can proceed to the next steps. + +**General Instructions :** + +1. All containers which are part of the docker-compose can be gracefully stopped by pressing Ctrl + c in the same terminal where the services are running. +2. All docker containers can be stopped and removed by using below command. + +``` +sudo ./docker-compose-down.sh +``` + +3. All services and dependencies can be started using below command. + +``` +sudo ./docker-compose-up.sh +``` + + + +
+ +# Postman Collections + +- [Entity-Management Service](https://github.com/ELEVATE-Project/entity-management/tree/main/src/api-doc) + +# Used in + +This project was built to be used with [Project Service](https://github.com/ELEVATE-Project/project-service) and [User Service](https://github.com/ELEVATE-Project/user.git). + +The frontend/mobile application [repo](https://github.com/ELEVATE-Project/observation-survey-projects-pwa). + +You can learn more about the full implementation of project-service [here](https://elevate-docs.shikshalokam.org/.project/intro) . + +# Team + + + + + +
+ +# Open Source Dependencies + +Several open source dependencies that have aided Mentoring's development: + +![NodeJS](https://img.shields.io/badge/node.js-6DA55F?style=for-the-badge&logo=node.js&logoColor=white) +![MongoDB](https://img.shields.io/badge/MongoDB-%234ea94b.svg?style=for-the-badge&logo=mongodb&logoColor=white) +![Git](https://img.shields.io/badge/git-%23F05033.svg?style=for-the-badge&logo=git&logoColor=white) diff --git a/src/documentation/3.4.0/setup/docker/ubuntu/README.md b/src/documentation/3.4.0/setup/docker/ubuntu/README.md index d3a281d..b828175 100644 --- a/src/documentation/3.4.0/setup/docker/ubuntu/README.md +++ b/src/documentation/3.4.0/setup/docker/ubuntu/README.md @@ -42,7 +42,7 @@ This Service enables the creation and management of various entities and entityT - **Node.js:** v20 - **mongoDb:** v4 -## Dockerized Service With Local Dependencies +## Dockerized Service With Local Dependencies - Ubuntu **Expectation**: Run single docker containerized service with existing local (in host) or remote dependencies. @@ -54,7 +54,7 @@ This Service enables the creation and management of various entities and entityT > Note: All commands are run from the project directory. -## Operating Systems: Linux +## Checking Port Availability > **Caution:** Before proceeding, please ensure that the ports given here are available and open. It is essential to verify their availability prior to moving forward. You can run below command in your terminal to check this From a2cd30e99f3b19c4db377ac06c304523223ca521 Mon Sep 17 00:00:00 2001 From: MallanagoudaB Date: Tue, 27 Jan 2026 15:31:58 +0530 Subject: [PATCH 07/19] final-push --- .../script/windows/docker-compose-down.bat | 12 ++ .../script/windows/docker-compose-up.bat | 12 ++ .../3.4.0/setup/docker/windows/README.md | 136 ++++++++++++++++++ 3 files changed, 160 insertions(+) create mode 100644 src/documentation/3.4.0/dockerized/script/windows/docker-compose-down.bat create mode 100644 src/documentation/3.4.0/dockerized/script/windows/docker-compose-up.bat create mode 100644 src/documentation/3.4.0/setup/docker/windows/README.md diff --git a/src/documentation/3.4.0/dockerized/script/windows/docker-compose-down.bat b/src/documentation/3.4.0/dockerized/script/windows/docker-compose-down.bat new file mode 100644 index 0000000..02d5f93 --- /dev/null +++ b/src/documentation/3.4.0/dockerized/script/windows/docker-compose-down.bat @@ -0,0 +1,12 @@ +@echo off + +rem Set environment variables +set "entity_management_env=%cd%\entity_management_env" + +rem Run docker-compose +docker-compose -f docker-compose.yml down + +rem Optionally, clear environment variables after use +set "entity_management_env=" + +pause \ No newline at end of file diff --git a/src/documentation/3.4.0/dockerized/script/windows/docker-compose-up.bat b/src/documentation/3.4.0/dockerized/script/windows/docker-compose-up.bat new file mode 100644 index 0000000..c379d64 --- /dev/null +++ b/src/documentation/3.4.0/dockerized/script/windows/docker-compose-up.bat @@ -0,0 +1,12 @@ +@echo off + +rem Set environment variables +set "entity_management_env=%cd%\entity_management_env" + +rem Run docker-compose +docker-compose -f docker-compose.yml up + +rem Optionally, clear environment variables after use +set "entity_management_env=" + +pause \ No newline at end of file diff --git a/src/documentation/3.4.0/setup/docker/windows/README.md b/src/documentation/3.4.0/setup/docker/windows/README.md new file mode 100644 index 0000000..49268fb --- /dev/null +++ b/src/documentation/3.4.0/setup/docker/windows/README.md @@ -0,0 +1,136 @@ +# entity-management + +
+ +# Entity Management + + + + + +[![CircleCI](https://dl.circleci.com/status-badge/img/gh/ELEVATE-Project/notification/tree/master.svg?style=shield)](https://dl.circleci.com/status-badge/redirect/gh/ELEVATE-Project/notification/tree/master) +[![Duplicated Lines (%)](https://sonarcloud.io/api/project_badges/measure?project=ELEVATE-Project_notification&metric=duplicated_lines_density)](https://sonarcloud.io/summary/new_code?id=ELEVATE-Project_notification) +[![Coverage](https://sonarcloud.io/api/project_badges/measure?project=ELEVATE-Project_notification&metric=coverage)](https://sonarcloud.io/summary/new_code?id=ELEVATE-Project_notification) +[![Vulnerabilities](https://sonarcloud.io/api/project_badges/measure?project=ELEVATE-Project_notification&metric=vulnerabilities)](https://sonarcloud.io/summary/new_code?id=ELEVATE-Project_notification) +[![Prettier](https://img.shields.io/badge/code_style-prettier-ff69b4.svg)](https://prettier.io) +[![Docs](https://img.shields.io/badge/Docs-success-informational)](https://elevate-docs.shikshalokam.org/mentorEd/intro) +[![Docs](https://img.shields.io/badge/API-docs-informational)](https://dev.elevate-apis.shikshalokam.org/notification/api-doc) +![GitHub package.json version (subfolder of monorepo)](https://img.shields.io/github/package-json/v/ELEVATE-Project/notification?filename=src%2Fpackage.json) +[![License](https://img.shields.io/badge/license-MIT-blue.svg)](https://opensource.org/licenses/MIT) + +
CircleCI insights + +[![CircleCI](https://dl.circleci.com/insights-snapshot/gh/ELEVATE-Project/notification/master/buil-and-test/badge.svg?window=30d)](https://app.circleci.com/insights/github/ELEVATE-Project/notification/workflows/buil-and-test/overview?branch=master&reporting-window=last-30-days&insights-snapshot=true) + +
+ +
+This Service enables the creation and management of various entities and entityType .It + provides functionalities for entities, ensuring seamless integration and + maintenance of entity-related data across the platform. +
+ +
+ +# System Requirements + +- **Operating System:** Ubuntu 22 +- **Node.js:** v20 +- **mongoDb:** v4 + +## Dockerized Service With Local Dependencies - Ubuntu + +**Expectation**: Run single docker containerized service with existing local (in host) or remote dependencies. + +## Installation + +**Create project Directory:** Establish a directory titled **project**. + +> Example Command: `mkdir entity-management && cd entity-management/` + +> Note: All commands are run from the project directory. + +## Checking Port Availability + +> **Caution:** Before proceeding, please ensure that the ports given here are available and open. It is essential to verify their availability prior to moving forward. You can run below command in your terminal to check this + +``` +for port in 5001 27017; do + if sudo lsof -iTCP:$port -sTCP:LISTEN &>/dev/null; then + echo "Port $port is IN USE" + else + echo "Port $port is available" + fi +done +``` + +1. **Download Docker Compose File:** Retrieve the **[docker-compose.yml](https://raw.githubusercontent.com/ELEVATE-Project/entity-management/refs/heads/dockerSetup/src/documentation/3.4.0/dockerized/dockerFiles/docker-compose.yml)** file from the Entity service repository and save it to the project directory. + + ``` + curl -OJL https://raw.githubusercontent.com/ELEVATE-Project/entity-management/refs/heads/dockerSetup/src/documentation/3.4.0/dockerized/dockerFiles/docker-compose.yml + ``` + +2. **Download Environment Files**: Using the OS specific commands given below, download environment files for all the services. + +``` +curl -L ^ + -O https://raw.githubusercontent.com/ELEVATE-Project/entity-management/refs/heads/dockerSetup/src/documentation/3.4.0/dockerized/envs/entity_management_env +``` + +3. **Download `docker-compose-up` & `docker-compose-down` Script Files** + +``` +curl -OJL https://raw.githubusercontent.com/ELEVATE-Project/entity-management/refs/heads/dockerSetup/src/documentation/3.4.0/dockerized/script/windows/docker-compose-down.bat +``` + +``` +curl -OJL https://raw.githubusercontent.com/ELEVATE-Project/entity-management/refs/heads/dockerSetup/src/documentation/3.4.0/dockerized/script/windows/docker-compose-up.bat +``` + +4. **Download `Config` File** + +``` +curl -L https://raw.githubusercontent.com/ELEVATE-Project/entity-management/refs/heads/dockerSetup/src/documentation/3.4.0/commonFiles/configFile.json -o config.json +``` + +5. **Run All Services & Dependencies**:All services and dependencies can be started using the `docker-compose-up` script file. + +``` +docker-compose-up.bat +``` + + + +
+ +# Postman Collections + +- [Entity-Management Service](https://github.com/ELEVATE-Project/entity-management/tree/main/src/api-doc) + +# Used in + +This project was built to be used with [Project Service](https://github.com/ELEVATE-Project/project-service) and [User Service](https://github.com/ELEVATE-Project/user.git). + +The frontend/mobile application [repo](https://github.com/ELEVATE-Project/observation-survey-projects-pwa). + +You can learn more about the full implementation of project-service [here](https://elevate-docs.shikshalokam.org/.project/intro) . + +# Team + + + + + +
+ +# Open Source Dependencies + +Several open source dependencies that have aided Mentoring's development: + +![NodeJS](https://img.shields.io/badge/node.js-6DA55F?style=for-the-badge&logo=node.js&logoColor=white) +![MongoDB](https://img.shields.io/badge/MongoDB-%234ea94b.svg?style=for-the-badge&logo=mongodb&logoColor=white) +![Git](https://img.shields.io/badge/git-%23F05033.svg?style=for-the-badge&logo=git&logoColor=white) From b878b43c5d6273cd30dc028498bbcf47e6064cb5 Mon Sep 17 00:00:00 2001 From: MallanagoudaB Date: Tue, 27 Jan 2026 15:36:43 +0530 Subject: [PATCH 08/19] windows-setup --- src/documentation/3.4.0/setup/docker/windows/README.md | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/documentation/3.4.0/setup/docker/windows/README.md b/src/documentation/3.4.0/setup/docker/windows/README.md index 49268fb..6dc42b8 100644 --- a/src/documentation/3.4.0/setup/docker/windows/README.md +++ b/src/documentation/3.4.0/setup/docker/windows/README.md @@ -70,15 +70,14 @@ done 1. **Download Docker Compose File:** Retrieve the **[docker-compose.yml](https://raw.githubusercontent.com/ELEVATE-Project/entity-management/refs/heads/dockerSetup/src/documentation/3.4.0/dockerized/dockerFiles/docker-compose.yml)** file from the Entity service repository and save it to the project directory. - ``` - curl -OJL https://raw.githubusercontent.com/ELEVATE-Project/entity-management/refs/heads/dockerSetup/src/documentation/3.4.0/dockerized/dockerFiles/docker-compose.yml - ``` +``` +curl -OJL https://raw.githubusercontent.com/ELEVATE-Project/entity-management/refs/heads/dockerSetup/src/documentation/3.4.0/dockerized/dockerFiles/docker-compose.yml +``` 2. **Download Environment Files**: Using the OS specific commands given below, download environment files for all the services. ``` -curl -L ^ - -O https://raw.githubusercontent.com/ELEVATE-Project/entity-management/refs/heads/dockerSetup/src/documentation/3.4.0/dockerized/envs/entity_management_env +curl -L -O https://raw.githubusercontent.com/ELEVATE-Project/entity-management/refs/heads/dockerSetup/src/documentation/3.4.0/dockerized/envs/entity_management_env ``` 3. **Download `docker-compose-up` & `docker-compose-down` Script Files** From e31ec6b65c162cfe6153a3afd4d735b2f0cf166f Mon Sep 17 00:00:00 2001 From: MallanagoudaB Date: Tue, 27 Jan 2026 15:48:43 +0530 Subject: [PATCH 09/19] windows-setup --- README.md | 256 ++++++++++++++---------------------------------------- 1 file changed, 63 insertions(+), 193 deletions(-) diff --git a/README.md b/README.md index 2d71811..33ec760 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,6 @@ -# entity-management -
-# Entity Management +# Entity-Management Service -[![CircleCI](https://dl.circleci.com/status-badge/img/gh/ELEVATE-Project/notification/tree/master.svg?style=shield)](https://dl.circleci.com/status-badge/redirect/gh/ELEVATE-Project/notification/tree/master) -[![Duplicated Lines (%)](https://sonarcloud.io/api/project_badges/measure?project=ELEVATE-Project_notification&metric=duplicated_lines_density)](https://sonarcloud.io/summary/new_code?id=ELEVATE-Project_notification) -[![Coverage](https://sonarcloud.io/api/project_badges/measure?project=ELEVATE-Project_notification&metric=coverage)](https://sonarcloud.io/summary/new_code?id=ELEVATE-Project_notification) -[![Vulnerabilities](https://sonarcloud.io/api/project_badges/measure?project=ELEVATE-Project_notification&metric=vulnerabilities)](https://sonarcloud.io/summary/new_code?id=ELEVATE-Project_notification) -[![Prettier](https://img.shields.io/badge/code_style-prettier-ff69b4.svg)](https://prettier.io) -[![Docs](https://img.shields.io/badge/Docs-success-informational)](https://elevate-docs.shikshalokam.org/mentorEd/intro) -[![Docs](https://img.shields.io/badge/API-docs-informational)](https://dev.elevate-apis.shikshalokam.org/notification/api-doc) -![GitHub package.json version (subfolder of monorepo)](https://img.shields.io/github/package-json/v/ELEVATE-Project/notification?filename=src%2Fpackage.json) +![GitHub package.json version (subfolder of monorepo)](https://img.shields.io/github/package-json/v/ELEVATE-Project/mentoring?filename=src%2Fpackage.json) [![License](https://img.shields.io/badge/license-MIT-blue.svg)](https://opensource.org/licenses/MIT) -
CircleCI insights - -[![CircleCI](https://dl.circleci.com/insights-snapshot/gh/ELEVATE-Project/notification/master/buil-and-test/badge.svg?window=30d)](https://app.circleci.com/insights/github/ELEVATE-Project/notification/workflows/buil-and-test/overview?branch=master&reporting-window=last-30-days&insights-snapshot=true) - -
- - -
-This Service enables the creation and management of various entities and entityType .It - provides functionalities for entities, ensuring seamless integration and - maintenance of entity-related data across the platform.
-
- -# System Requirements - -- **Operating System:** Ubuntu 22 -- **Node.js:** v20 -- **mongoDb:** v4 +##
-# Setup Options +## 💻 Supported Operating Systems -Elevate entity-management services can be setup in local using two methods: +- **Ubuntu** (Recommended: Version 20 and above) +- **Windows** (Recommended: Version 11 and above) +- **macOS** (Recommended: Version 12 and above) -
Dockerized service with local dependencies(Intermediate) +--- -## A. Dockerized Service With Local Dependencies +## ✨ Setup & Deployment Guide -**Expectation**: Run single docker containerized service with existing local (in host) or remote dependencies. +This section outlines the different ways to set up the **Entity-Management Service**. Please select the deployment environment and setup method that best suits your needs. -## Installation +--- -**Create project Directory:** Establish a directory titled **project**. - -> Example Command: `mkdir entity-management && cd entity-management/` - -> Note: All commands are run from the project directory. - -## Operating Systems: Linux - -> **Caution:** Before proceeding, please ensure that the ports given here are available and open. It is essential to verify their availability prior to moving forward. You can run below command in your terminal to check this - -``` -for port in 5001 27017; do - if sudo lsof -iTCP:$port -sTCP:LISTEN &>/dev/null; then - echo "Port $port is IN USE" - else - echo "Port $port is available" - fi -done -``` - -1. **Download and execute main setup script:** Execute the following command in your terminal from the project directory. - ``` - curl -OJL https://raw.githubusercontent.com/ELEVATE-Project/entity-management/refs/heads/dockerSetup/src/documentation/3.4.0/dockerFiles/docker-compose.yml - ``` +
+ 🚀 Entity-Management Service (Stand Alone) +
-> Note : The script will download all the essential files and launch the services in Docker. Once all services are successfully up and running, you can proceed to the next steps. +This setup is ideal for **local development and testing**, where only the core Entity-Management Service components are required. -**General Instructions :** +#### I. Docker Setup (Recommended) -1. All containers which are part of the docker-compose can be gracefully stopped by pressing Ctrl + c in the same terminal where the services are running. -2. All docker containers can be stopped and removed by using below command. +- [Setup guide for Linux](https://github.com/ELEVATE-Project/project-service/blob/main/documentation/3.4.0/setup/docker/stand-alone/ubuntu/README.md) +- [Setup guide for macOS](https://github.com/ELEVATE-Project/project-service/blob/main/documentation/3.4.0/setup/docker/stand-alone/mac-os/README.md) +- [Setup guide for Windows](https://github.com/ELEVATE-Project/project-service/blob/main/documentation/3.4.0/setup/docker/stand-alone/windows/README.md) -``` -sudo ./docker-compose-down.sh -``` +
-3. All services and dependencies can be started using below command. +#### II. Native Setup (PM2 Managed Services) -``` -sudo ./docker-compose-up.sh -``` +- [Setup guide for Linux](https://github.com/ELEVATE-Project/project-service/blob/main/documentation/3.4.0/setup/native/stand-alone/ubuntu/README.md) +- [Setup guide for macOS](https://github.com/ELEVATE-Project/project-service/blob/main/documentation/3.4.0/setup/docker/stand-alone/mac-os/README.md) +- [Setup guide for Windows](link/to/standalone/native/windows/README)
-
Local Service with local dependencies(Hardest) - -## B. Local Service With Local Dependencies - -**Expectation**: Run single service with existing local dependencies in host (**Non-Docker Implementation**). - -## Installations - -### Install Node.js LTS - -Refer to the [NodeSource distributions installation scripts](https://github.com/nodesource/distributions#installation-scripts) for Node.js installation. - -```bash -$ curl -fsSL https://deb.nodesource.com/setup_lts.x | sudo -E bash - &&\ -sudo apt-get install -y nodejs -``` - -### Install PM2 - -Refer to [How To Set Up a Node.js Application for Production on Ubuntu 22.04](https://www.digitalocean.com/community/tutorials/how-to-set-up-a-node-js-application-for-production-on-ubuntu-22-04). - -**Run the following command** - -```bash -$ sudo npm install pm2@latest -g -``` - -## Setting up Repository - -### Clone the entity-management repository to /opt/backend directory - -```bash -opt/backend$ git clone -b develop-2.5 --single-branch "https://github.com/ELEVATE-Project/entity-management" -``` +--- -### Install Npm packages from src directory - -```bash -backend/entity-management/src$ sudo npm i -``` - -### Create .env file in src directory - -```bash -entity-management/src$ sudo nano .env -``` - -Copy-paste the following env variables to the `.env` file: - -```env -# entity-management Service Config - -# Port on which service runs -APPLICATION_PORT=5001 - -# Application environment -APPLICATION_ENV=development - -# Route after the base URL -APPLICATION_BASE_URL=/entity/ - -# Api doc URL -API_DOC_URL= "https://project-dev.elevate-apis.shikshalokam.org/entity-management/api-doc" - -#User service URL -USER_SERVICE_URL = http://localhost:3001/user - - -INTERNAL_ACCESS_TOKEN="internal_access_token" - -#DB URL -MONGODB_URL=mongodb://mongo:27017/elevate-entity-management - -#service name -SERVICE_NAME = elevate-entity-service - -version=8 -``` - -Save and exit. - -## Setting up Databases - -**Start MongoDB Service** - -```bash -sudo systemctl start mongod -``` - -**Verify MongoDB is running** +
-```bash -sudo systemctl status mongod +## 📖 Related Documentation & Tools -``` +### 🗂️ Database Architecture Diagrams -## Start the Service +Explore the database schemas for the ELEVATE-Entity services below. +Click on a service name to expand and view the diagram. -Navigate to the src folder of entity-management service and run pm2 start command: +
-```bash -entity-management/src$ pm2 start app.js -i 2 --name elevate-entity-management -``` +
+📂 Entity Management Service (EMS) +
+

+ Entity Management Diagram +

+
-#### Run pm2 ls command +> **Tip:** If the diagrams appear too small, you can right-click the image and select +> **"Open image in new tab"** to view the full-resolution architectural details. -```bash -$ pm2 ls -``` +--- -
+### 🧪 Postman Collections and API DOC -
+- + Entity-Management Service API Collection + -# Postman Collections +--- -- [Entity-Management Service](https://github.com/ELEVATE-Project/entity-management/tree/main/src/api-doc) +### 🔖 Versioning & Documentation Links -# Used in +This README is focused on the **3.4.0 Setup Guide** for the Entity-Management Service. -This project was built to be used with [Project Service](https://github.com/ELEVATE-Project/project-service) and [User Service](https://github.com/ELEVATE-Project/user.git). +- **Current Version (3.4.0) Documentation** + All setup links above point to the **3.4.0** guides. -The frontend/mobile application [repo](https://github.com/ELEVATE-Project/observation-survey-projects-pwa). +- **Legacy Version (1.0.0) Documentation** + + View 1.0.0 Documentation + -You can learn more about the full implementation of project-service [here](https://elevate-docs.shikshalokam.org/.project/intro) . +--- -# Team +## 👥 Team -
+--- -# Open Source Dependencies +### Open Source Dependencies -Several open source dependencies that have aided Mentoring's development: +This Entity-Management Service uses several open-source tools and dependencies that supported its development -![NodeJS](https://img.shields.io/badge/node.js-6DA55F?style=for-the-badge&logo=node.js&logoColor=white) -![MongoDB](https://img.shields.io/badge/MongoDB-%234ea94b.svg?style=for-the-badge&logo=mongodb&logoColor=white) -![Git](https://img.shields.io/badge/git-%23F05033.svg?style=for-the-badge&logo=git&logoColor=white) +![NodeJS](https://img.shields.io/badge/node.js-6DA55F?style=for-the-badge&logo=node.js&logoColor=white) +![Apache Kafka](https://img.shields.io/badge/Apache%20Kafka-000?style=for-the-badge&logo=apachekafka) +![Git](https://img.shields.io/badge/git-%23F05033.svg?style=for-the-badge&logo=git&logoColor=white) +![MongoDB](https://img.shields.io/badge/MongoDB-4EA94B?style=for-the-badge&logo=mongodb&logoColor=white) From 5bacb6a58918ed49b545aefe175a6b55dc56be0f Mon Sep 17 00:00:00 2001 From: MallanagoudaB Date: Tue, 27 Jan 2026 15:51:10 +0530 Subject: [PATCH 10/19] windows-setup --- .../EMS-Entity-Service.drawio.png | Bin 0 -> 1572947 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 src/documentation/3.4.0/database-diagram/EMS-Entity-Service.drawio.png diff --git a/src/documentation/3.4.0/database-diagram/EMS-Entity-Service.drawio.png b/src/documentation/3.4.0/database-diagram/EMS-Entity-Service.drawio.png new file mode 100644 index 0000000000000000000000000000000000000000..9f7c2f204a50dca00f0406dc3d80d8f85930dd1c GIT binary patch literal 1572947 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 literal 0 HcmV?d00001 From e2b60b0b2fc6393d05c5fcc114221f48dbe16f6e Mon Sep 17 00:00:00 2001 From: MallanagoudaB Date: Tue, 27 Jan 2026 15:52:01 +0530 Subject: [PATCH 11/19] windows-setup --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 33ec760..de23b70 100644 --- a/README.md +++ b/README.md @@ -70,7 +70,7 @@ Click on a service name to expand and view the diagram. 📂 Entity Management Service (EMS)

- Entity Management Diagram + Entity Management Diagram

From 8ff752c3a3e5660f5daaa519b11cab0965174688 Mon Sep 17 00:00:00 2001 From: MallanagoudaB Date: Thu, 29 Jan 2026 12:41:24 +0530 Subject: [PATCH 12/19] push-for-native-setup --- src/documentation/1.0.0/README.md | 2 +- .../3.4.0/setup/native/mac-os/README.md | 199 +++++++++++++++++ .../3.4.0/setup/native/ubuntu/README.md | 201 ++++++++++++++++++ .../3.4.0/setup/native/windows/README.md | 198 +++++++++++++++++ 4 files changed, 599 insertions(+), 1 deletion(-) create mode 100644 src/documentation/3.4.0/setup/native/mac-os/README.md create mode 100644 src/documentation/3.4.0/setup/native/ubuntu/README.md create mode 100644 src/documentation/3.4.0/setup/native/windows/README.md diff --git a/src/documentation/1.0.0/README.md b/src/documentation/1.0.0/README.md index b4a5099..df5deba 100644 --- a/src/documentation/1.0.0/README.md +++ b/src/documentation/1.0.0/README.md @@ -62,7 +62,7 @@ Elevate entity-management services can be setup in local using two methods: ### Local Dependencies Steps -1. **Download Docker Compose File:** Retrieve the **[docker-compose.yml](https://raw.githubusercontent.com/ELEVATE-Project/entity-management/refs/heads/main/docker-compose.yml)** file from the entity-management service repository and save it to the entity-management directory. +1. **Download Docker Compose File:** Retrieve the **[docker-compose.yml](https://raw.githubusercontent.com/ELEVATE-Project/entity-management/refs/main/src/documentation/1.0.0/dockerFiles/docker-compose.yml)** file from the entity-management service repository and save it to the entity-management directory. 2. Run the docker container. diff --git a/src/documentation/3.4.0/setup/native/mac-os/README.md b/src/documentation/3.4.0/setup/native/mac-os/README.md new file mode 100644 index 0000000..bd95b0d --- /dev/null +++ b/src/documentation/3.4.0/setup/native/mac-os/README.md @@ -0,0 +1,199 @@ +# entity-management + +
+ +# Entity Management + + + + + +[![CircleCI](https://dl.circleci.com/status-badge/img/gh/ELEVATE-Project/notification/tree/master.svg?style=shield)](https://dl.circleci.com/status-badge/redirect/gh/ELEVATE-Project/notification/tree/master) +[![Duplicated Lines (%)](https://sonarcloud.io/api/project_badges/measure?project=ELEVATE-Project_notification&metric=duplicated_lines_density)](https://sonarcloud.io/summary/new_code?id=ELEVATE-Project_notification) +[![Coverage](https://sonarcloud.io/api/project_badges/measure?project=ELEVATE-Project_notification&metric=coverage)](https://sonarcloud.io/summary/new_code?id=ELEVATE-Project_notification) +[![Vulnerabilities](https://sonarcloud.io/api/project_badges/measure?project=ELEVATE-Project_notification&metric=vulnerabilities)](https://sonarcloud.io/summary/new_code?id=ELEVATE-Project_notification) +[![Prettier](https://img.shields.io/badge/code_style-prettier-ff69b4.svg)](https://prettier.io) +[![Docs](https://img.shields.io/badge/Docs-success-informational)](https://elevate-docs.shikshalokam.org/mentorEd/intro) +[![Docs](https://img.shields.io/badge/API-docs-informational)](https://dev.elevate-apis.shikshalokam.org/notification/api-doc) +![GitHub package.json version (subfolder of monorepo)](https://img.shields.io/github/package-json/v/ELEVATE-Project/notification?filename=src%2Fpackage.json) +[![License](https://img.shields.io/badge/license-MIT-blue.svg)](https://opensource.org/licenses/MIT) + +
CircleCI insights + +[![CircleCI](https://dl.circleci.com/insights-snapshot/gh/ELEVATE-Project/notification/master/buil-and-test/badge.svg?window=30d)](https://app.circleci.com/insights/github/ELEVATE-Project/notification/workflows/buil-and-test/overview?branch=master&reporting-window=last-30-days&insights-snapshot=true) + +
+ +
+This Service enables the creation and management of various entities and entityType .It + provides functionalities for entities, ensuring seamless integration and + maintenance of entity-related data across the platform. +
+ +
+ +# System Requirements + +- **Operating System:** Mac +- **Node.js:** v20 +- **mongoDb:** v4 + +## Local Service With Local Dependencies - Mac + +**Expectation**: Run single service with existing local dependencies in host (**Non-Docker Implementation**). + +## Installations + +### Install Node.js LTS + +Refer to the [NodeSource distributions installation scripts](https://nodejs.org/en/download/) for Node.js installation. + +```bash +brew install node +``` + +### Install PM2 + +**Run the following command** + +```bash +npm install -g pm2 +``` + +## Setting up Repository + +### Clone the entity-management repository to /opt/backend directory + +```bash + git clone -b develop https://github.com/ELEVATE-Project/entity-management +``` + +### Install Npm packages from src directory + +```bash +cd entity-management/src && npm i +``` + +### Create .env file in src directory + +```bash +sudo nano .env +``` + +Copy-paste the following env variables to the `.env` file: + +```env +# entity-management Service Config + +# Port on which service runs +APPLICATION_PORT = 5001 + +# Application environment +APPLICATION_ENV ="development" + +# Route after the base URL +APPLICATION_BASE_URL='/entity-management/' + +#Internal Access Token to decode +INTERNAL_ACCESS_TOKEN =xahusub12yexlashsbxAXADHBlaj + +ACCESS_TOKEN_SECRET=bsj82AHBxahusub12yexlashsbxAXADHBlaj + +# MongoDB Connection to the service +MONGODB_URL=mongodb://localhost:27017/elevate-entity + +AUTH_METHOD = native + +#User Service Url +USER_SERVICE_URL = http://localhost:3569 + +USER_SERVICE_BASE_URL=/user + +SERVICE_NAME = elevate-entity-service + +#API Doc URL +API_DOC_URL="http://localhost:3569/entity-management/api-doc" + +APPLICATION_HOST=localhost + +IS_AUTH_TOKEN_BEARER="false" + +ADMIN_ACCESS_TOKEN=rwwee3$123 + +ADMIN_TOKEN_HEADER_NAME="admin-auth-token" + +#kafka health check topic +KAFKA_HEALTH_CHECK_TOPIC='KAFKA_HEALTH_CHECK_TOPIC' + +#Interface URL +INTERFACE_SERVICE_URL=http://localhost:3569 + +HEALTH_CHECK_DEBUG_MODE = true +``` + +Save and exit. + +## Setting up Databases + +**Start MongoDB Service** + +```bash +sudo systemctl start mongod +``` + +**Verify MongoDB is running** + +```bash +sudo systemctl status mongod + +``` + +## Start the Service + +Navigate to the src folder of entity-management service and run pm2 start command: + +```bash +pm2 start app.js --name elevate-entity-management +``` + +#### Run pm2 ls command + +```bash +$ pm2 ls +``` + + + +
+ +# Postman Collections + +- [Entity-Management Service](https://github.com/ELEVATE-Project/entity-management/tree/main/src/api-doc) + +# Used in + +This project was built to be used with [Project Service](https://github.com/ELEVATE-Project/project-service) and [User Service](https://github.com/ELEVATE-Project/user.git). + +The frontend/mobile application [repo](https://github.com/ELEVATE-Project/observation-survey-projects-pwa). + +You can learn more about the full implementation of project-service [here](https://elevate-docs.shikshalokam.org/.project/intro) . + +# Team + + + + + +
+ +# Open Source Dependencies + +Several open source dependencies that have aided Mentoring's development: + +![NodeJS](https://img.shields.io/badge/node.js-6DA55F?style=for-the-badge&logo=node.js&logoColor=white) +![MongoDB](https://img.shields.io/badge/MongoDB-%234ea94b.svg?style=for-the-badge&logo=mongodb&logoColor=white) +![Git](https://img.shields.io/badge/git-%23F05033.svg?style=for-the-badge&logo=git&logoColor=white) diff --git a/src/documentation/3.4.0/setup/native/ubuntu/README.md b/src/documentation/3.4.0/setup/native/ubuntu/README.md new file mode 100644 index 0000000..55256a3 --- /dev/null +++ b/src/documentation/3.4.0/setup/native/ubuntu/README.md @@ -0,0 +1,201 @@ +# entity-management + +
+ +# Entity Management + + + + + +[![CircleCI](https://dl.circleci.com/status-badge/img/gh/ELEVATE-Project/notification/tree/master.svg?style=shield)](https://dl.circleci.com/status-badge/redirect/gh/ELEVATE-Project/notification/tree/master) +[![Duplicated Lines (%)](https://sonarcloud.io/api/project_badges/measure?project=ELEVATE-Project_notification&metric=duplicated_lines_density)](https://sonarcloud.io/summary/new_code?id=ELEVATE-Project_notification) +[![Coverage](https://sonarcloud.io/api/project_badges/measure?project=ELEVATE-Project_notification&metric=coverage)](https://sonarcloud.io/summary/new_code?id=ELEVATE-Project_notification) +[![Vulnerabilities](https://sonarcloud.io/api/project_badges/measure?project=ELEVATE-Project_notification&metric=vulnerabilities)](https://sonarcloud.io/summary/new_code?id=ELEVATE-Project_notification) +[![Prettier](https://img.shields.io/badge/code_style-prettier-ff69b4.svg)](https://prettier.io) +[![Docs](https://img.shields.io/badge/Docs-success-informational)](https://elevate-docs.shikshalokam.org/mentorEd/intro) +[![Docs](https://img.shields.io/badge/API-docs-informational)](https://dev.elevate-apis.shikshalokam.org/notification/api-doc) +![GitHub package.json version (subfolder of monorepo)](https://img.shields.io/github/package-json/v/ELEVATE-Project/notification?filename=src%2Fpackage.json) +[![License](https://img.shields.io/badge/license-MIT-blue.svg)](https://opensource.org/licenses/MIT) + +
CircleCI insights + +[![CircleCI](https://dl.circleci.com/insights-snapshot/gh/ELEVATE-Project/notification/master/buil-and-test/badge.svg?window=30d)](https://app.circleci.com/insights/github/ELEVATE-Project/notification/workflows/buil-and-test/overview?branch=master&reporting-window=last-30-days&insights-snapshot=true) + +
+ +
+This Service enables the creation and management of various entities and entityType .It + provides functionalities for entities, ensuring seamless integration and + maintenance of entity-related data across the platform. +
+ +
+ +# System Requirements + +- **Operating System:** Ubuntu 22 +- **Node.js:** v20 +- **mongoDb:** v4 + +## Local Service With Local Dependencies - Ubuntu + +**Expectation**: Run single service with existing local dependencies in host (**Non-Docker Implementation**). + +## Installations + +### Install Node.js LTS + +Refer to the [NodeSource distributions installation scripts](https://github.com/nodesource/distributions#installation-scripts) for Node.js installation. + +```bash +sudo apt install -y nodejs +``` + +### Install PM2 + +Refer to [How To Set Up a Node.js Application for Production on Ubuntu 22.04](https://www.digitalocean.com/community/tutorials/how-to-set-up-a-node-js-application-for-production-on-ubuntu-22-04). + +**Run the following command** + +```bash +sudo npm install -g pm2 +``` + +## Setting up Repository + +### Clone the entity-management repository to /opt/backend directory + +```bash + git clone -b develop https://github.com/ELEVATE-Project/entity-management +``` + +### Install Npm packages from src directory + +```bash +cd entity-management/src && npm i +``` + +### Create .env file in src directory + +```bash +sudo nano .env +``` + +Copy-paste the following env variables to the `.env` file: + +```env +# entity-management Service Config + +# Port on which service runs +APPLICATION_PORT = 5001 + +# Application environment +APPLICATION_ENV ="development" + +# Route after the base URL +APPLICATION_BASE_URL='/entity-management/' + +#Internal Access Token to decode +INTERNAL_ACCESS_TOKEN =xahusub12yexlashsbxAXADHBlaj + +ACCESS_TOKEN_SECRET=bsj82AHBxahusub12yexlashsbxAXADHBlaj + +# MongoDB Connection to the service +MONGODB_URL=mongodb://localhost:27017/elevate-entity + +AUTH_METHOD = native + +#User Service Url +USER_SERVICE_URL = http://localhost:3569 + +USER_SERVICE_BASE_URL=/user + +SERVICE_NAME = elevate-entity-service + +#API Doc URL +API_DOC_URL="http://localhost:3569/entity-management/api-doc" + +APPLICATION_HOST=localhost + +IS_AUTH_TOKEN_BEARER="false" + +ADMIN_ACCESS_TOKEN=rwwee3$123 + +ADMIN_TOKEN_HEADER_NAME="admin-auth-token" + +#kafka health check topic +KAFKA_HEALTH_CHECK_TOPIC='KAFKA_HEALTH_CHECK_TOPIC' + +#Interface URL +INTERFACE_SERVICE_URL=http://localhost:3569 + +HEALTH_CHECK_DEBUG_MODE = true +``` + +Save and exit. + +## Setting up Databases + +**Start MongoDB Service** + +```bash +sudo systemctl start mongod +``` + +**Verify MongoDB is running** + +```bash +sudo systemctl status mongod + +``` + +## Start the Service + +Navigate to the src folder of entity-management service and run pm2 start command: + +```bash +pm2 start app.js --name elevate-entity-management +``` + +#### Run pm2 ls command + +```bash +$ pm2 ls +``` + + + +
+ +# Postman Collections + +- [Entity-Management Service](https://github.com/ELEVATE-Project/entity-management/tree/main/src/api-doc) + +# Used in + +This project was built to be used with [Project Service](https://github.com/ELEVATE-Project/project-service) and [User Service](https://github.com/ELEVATE-Project/user.git). + +The frontend/mobile application [repo](https://github.com/ELEVATE-Project/observation-survey-projects-pwa). + +You can learn more about the full implementation of project-service [here](https://elevate-docs.shikshalokam.org/.project/intro) . + +# Team + + + + + +
+ +# Open Source Dependencies + +Several open source dependencies that have aided Mentoring's development: + +![NodeJS](https://img.shields.io/badge/node.js-6DA55F?style=for-the-badge&logo=node.js&logoColor=white) +![MongoDB](https://img.shields.io/badge/MongoDB-%234ea94b.svg?style=for-the-badge&logo=mongodb&logoColor=white) +![Git](https://img.shields.io/badge/git-%23F05033.svg?style=for-the-badge&logo=git&logoColor=white) diff --git a/src/documentation/3.4.0/setup/native/windows/README.md b/src/documentation/3.4.0/setup/native/windows/README.md new file mode 100644 index 0000000..47943a2 --- /dev/null +++ b/src/documentation/3.4.0/setup/native/windows/README.md @@ -0,0 +1,198 @@ +# entity-management + +
+ +# Entity Management + + + + + +[![CircleCI](https://dl.circleci.com/status-badge/img/gh/ELEVATE-Project/notification/tree/master.svg?style=shield)](https://dl.circleci.com/status-badge/redirect/gh/ELEVATE-Project/notification/tree/master) +[![Duplicated Lines (%)](https://sonarcloud.io/api/project_badges/measure?project=ELEVATE-Project_notification&metric=duplicated_lines_density)](https://sonarcloud.io/summary/new_code?id=ELEVATE-Project_notification) +[![Coverage](https://sonarcloud.io/api/project_badges/measure?project=ELEVATE-Project_notification&metric=coverage)](https://sonarcloud.io/summary/new_code?id=ELEVATE-Project_notification) +[![Vulnerabilities](https://sonarcloud.io/api/project_badges/measure?project=ELEVATE-Project_notification&metric=vulnerabilities)](https://sonarcloud.io/summary/new_code?id=ELEVATE-Project_notification) +[![Prettier](https://img.shields.io/badge/code_style-prettier-ff69b4.svg)](https://prettier.io) +[![Docs](https://img.shields.io/badge/Docs-success-informational)](https://elevate-docs.shikshalokam.org/mentorEd/intro) +[![Docs](https://img.shields.io/badge/API-docs-informational)](https://dev.elevate-apis.shikshalokam.org/notification/api-doc) +![GitHub package.json version (subfolder of monorepo)](https://img.shields.io/github/package-json/v/ELEVATE-Project/notification?filename=src%2Fpackage.json) +[![License](https://img.shields.io/badge/license-MIT-blue.svg)](https://opensource.org/licenses/MIT) + +
CircleCI insights + +[![CircleCI](https://dl.circleci.com/insights-snapshot/gh/ELEVATE-Project/notification/master/buil-and-test/badge.svg?window=30d)](https://app.circleci.com/insights/github/ELEVATE-Project/notification/workflows/buil-and-test/overview?branch=master&reporting-window=last-30-days&insights-snapshot=true) + +
+ +
+This Service enables the creation and management of various entities and entityType .It + provides functionalities for entities, ensuring seamless integration and + maintenance of entity-related data across the platform. +
+ +
+ +# System Requirements + +- **Operating System:** Windows +- **Node.js:** v20 +- **mongoDb:** v4 + +## Local Service With Local Dependencies - Windows + +**Expectation**: Run single service with existing local dependencies in host (**Non-Docker Implementation**). + +## Installations + +### Install Node.js LTS + +Refer to the [NodeSource distributions installation scripts](https://nodejs.org/en/download/) for Node.js installation. + +### Install PM2 + +**Run the following command** + +```bash +npm install -g pm2 +``` + +### Install MongoDB + +Refer to [How to Set up a MongoDB for Production on Windows](https://www.mongodb.com/try/download/community). + +## Setting up Repository + +### Clone the entity-management repository to /opt/backend directory + +```bash + git clone -b develop https://github.com/ELEVATE-Project/entity-management +``` + +### Install Npm packages from src directory + +```bash +cd entity-management/src && npm i +``` + +### Create .env file in src directory + +```bash +notepad .env +``` + +Copy-paste the following env variables to the `.env` file: + +```env +# entity-management Service Config + +# Port on which service runs +APPLICATION_PORT = 5001 + +# Application environment +APPLICATION_ENV ="development" + +# Route after the base URL +APPLICATION_BASE_URL='/entity-management/' + +#Internal Access Token to decode +INTERNAL_ACCESS_TOKEN =xahusub12yexlashsbxAXADHBlaj + +ACCESS_TOKEN_SECRET=bsj82AHBxahusub12yexlashsbxAXADHBlaj + +# MongoDB Connection to the service +MONGODB_URL=mongodb://localhost:27017/elevate-entity + +AUTH_METHOD = native + +#User Service Url +USER_SERVICE_URL = http://localhost:3569 + +USER_SERVICE_BASE_URL=/user + +SERVICE_NAME = elevate-entity-service + +#API Doc URL +API_DOC_URL="http://localhost:3569/entity-management/api-doc" + +APPLICATION_HOST=localhost + +IS_AUTH_TOKEN_BEARER="false" + +ADMIN_ACCESS_TOKEN=rwwee3$123 + +ADMIN_TOKEN_HEADER_NAME="admin-auth-token" + +#kafka health check topic +KAFKA_HEALTH_CHECK_TOPIC='KAFKA_HEALTH_CHECK_TOPIC' + +#Interface URL +INTERFACE_SERVICE_URL=http://localhost:3569 + +HEALTH_CHECK_DEBUG_MODE = true +``` + +Save and exit. + +## Setting up Databases + +**Start MongoDB Service** + +```bash +net start MongoDB +``` + +**Verify MongoDB is running** + +```bash +sc query MongoDB +``` + +## Start the Service + +Navigate to the src folder of entity-management service and run pm2 start command: + +```bash +pm2 start app.js --name elevate-entity-management +``` + +#### Run pm2 ls command + +```bash +$ pm2 ls +``` + + + +
+ +# Postman Collections + +- [Entity-Management Service](https://github.com/ELEVATE-Project/entity-management/tree/main/src/api-doc) + +# Used in + +This project was built to be used with [Project Service](https://github.com/ELEVATE-Project/project-service) and [User Service](https://github.com/ELEVATE-Project/user.git). + +The frontend/mobile application [repo](https://github.com/ELEVATE-Project/observation-survey-projects-pwa). + +You can learn more about the full implementation of project-service [here](https://elevate-docs.shikshalokam.org/.project/intro) . + +# Team + + + + + +
+ +# Open Source Dependencies + +Several open source dependencies that have aided Mentoring's development: + +![NodeJS](https://img.shields.io/badge/node.js-6DA55F?style=for-the-badge&logo=node.js&logoColor=white) +![MongoDB](https://img.shields.io/badge/MongoDB-%234ea94b.svg?style=for-the-badge&logo=mongodb&logoColor=white) +![Git](https://img.shields.io/badge/git-%23F05033.svg?style=for-the-badge&logo=git&logoColor=white) From 58fff6d82761fc3a1247e9f66dc4ee58f681c981 Mon Sep 17 00:00:00 2001 From: MallanagoudaB Date: Thu, 29 Jan 2026 16:43:46 +0530 Subject: [PATCH 13/19] push-for-native-setup --- README.md | 2 +- .../1.0.0/dockerFiles/docker-compose.yml | 31 +++++++++++++++++++ .../dockerized/envs/entity_management_env | 5 ++- .../dockerized/script/ubuntu/entity_setup.sh | 6 ---- .../3.4.0/setup/docker/mac-os/README.md | 1 + .../3.4.0/setup/docker/ubuntu/README.md | 1 + .../3.4.0/setup/docker/windows/README.md | 1 + .../3.4.0/setup/native/mac-os/README.md | 20 ++++++++++-- .../3.4.0/setup/native/ubuntu/README.md | 20 ++++++++++-- .../3.4.0/setup/native/windows/README.md | 20 ++++++++++-- 10 files changed, 88 insertions(+), 19 deletions(-) diff --git a/README.md b/README.md index de23b70..999cbb9 100644 --- a/README.md +++ b/README.md @@ -32,7 +32,7 @@ This section outlines the different ways to set up the **Entity-Management Servi ---
- 🚀 Entity-Management Service (Stand Alone) + 🚀 Entity-Management Service
This setup is ideal for **local development and testing**, where only the core Entity-Management Service components are required. diff --git a/src/documentation/1.0.0/dockerFiles/docker-compose.yml b/src/documentation/1.0.0/dockerFiles/docker-compose.yml index 7edb5db..81d1818 100644 --- a/src/documentation/1.0.0/dockerFiles/docker-compose.yml +++ b/src/documentation/1.0.0/dockerFiles/docker-compose.yml @@ -1,5 +1,36 @@ version: '3' services: + zookeeper: + image: 'confluentinc/cp-zookeeper:7.3.0' + ports: + - '2181:2181' + environment: + - ALLOW_ANONYMOUS_LOGIN=yes + - ZOOKEEPER_CLIENT_PORT=2181 + - ZOOKEEPER_TICK_TIME=2000 + networks: + - entity_net + kafka: + image: 'confluentinc/cp-kafka:7.3.0' + ports: + - '9092:9092' + environment: + KAFKA_BROKER_ID: 1 + KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181 + KAFKA_LISTENERS: PLAINTEXT://0.0.0.0:29092,PLAINTEXT_HOST://0.0.0.0:9092 + KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka:29092,PLAINTEXT_HOST://localhost:9092 + KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT + KAFKA_INTER_BROKER_LISTENER_NAME: PLAINTEXT + KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1 + depends_on: + - zookeeper + healthcheck: + test: kafka-topics --bootstrap-server localhost:9092 --list || exit 1 + interval: 10s + timeout: 5s + retries: 9 + networks: + - entity_net mongo: image: 'mongo:4.4.14' restart: 'always' diff --git a/src/documentation/3.4.0/dockerized/envs/entity_management_env b/src/documentation/3.4.0/dockerized/envs/entity_management_env index 8f530d1..773a7db 100644 --- a/src/documentation/3.4.0/dockerized/envs/entity_management_env +++ b/src/documentation/3.4.0/dockerized/envs/entity_management_env @@ -5,7 +5,7 @@ INTERNAL_ACCESS_TOKEN =xahusub12yexlashsbxAXADHBlaj ACCESS_TOKEN_SECRET=bsj82AHBxahusub12yexlashsbxAXADHBlaj MONGODB_URL=mongodb://mongo:27017/elevate-entity AUTH_METHOD = native -USER_SERVICE_URL = http://interface:3569 +USER_SERVICE_URL = http://interface:5001 USER_SERVICE_BASE_URL=/user KAFKA_HEALTH_CHECK_TOPIC=test SERVICE_NAME = elevate-entity-service @@ -14,9 +14,8 @@ APPLICATION_HOST=entity_management IS_AUTH_TOKEN_BEARER="false" ADMIN_ACCESS_TOKEN=rwwee3$123 ADMIN_TOKEN_HEADER_NAME="admin-auth-token" -INTERFACE_SERVICE_URL=http://interface:3569 +INTERFACE_SERVICE_URL=http://interface:5001 KAFKA_HEALTH_CHECK_TOPIC = entity-health-check-topic-check -KAFKA_COMMUNICATIONS_ON_OFF = ON KAFKA_URL=kafka:9092 KAFKA_COMMUNICATIONS_ON_OFF = ON KAFKA_GROUP_ID = entity diff --git a/src/documentation/3.4.0/dockerized/script/ubuntu/entity_setup.sh b/src/documentation/3.4.0/dockerized/script/ubuntu/entity_setup.sh index 3f2f324..58c477a 100644 --- a/src/documentation/3.4.0/dockerized/script/ubuntu/entity_setup.sh +++ b/src/documentation/3.4.0/dockerized/script/ubuntu/entity_setup.sh @@ -29,12 +29,6 @@ chmod +x docker-compose-up.sh chmod +x docker-compose-down.sh log "Made docker-compose scripts executable." -# Install MongoDB driver (usually needed if connecting directly to MongoDB/Citus) -npm install mongodb - -# Install Mongoose (Object Data Modeling library, if the scripts use it) -npm install mongoose - log "Downloading config.json file..." curl -L https://raw.githubusercontent.com/ELEVATE-Project/entity-management/refs/heads/dockerSetup/src/documentation/3.4.0/commonFiles/configFile.json -o config.json log "config.json file is downloaded." diff --git a/src/documentation/3.4.0/setup/docker/mac-os/README.md b/src/documentation/3.4.0/setup/docker/mac-os/README.md index fbfa45e..5485ecc 100644 --- a/src/documentation/3.4.0/setup/docker/mac-os/README.md +++ b/src/documentation/3.4.0/setup/docker/mac-os/README.md @@ -121,3 +121,4 @@ Several open source dependencies that have aided Mentoring's development: ![NodeJS](https://img.shields.io/badge/node.js-6DA55F?style=for-the-badge&logo=node.js&logoColor=white) ![MongoDB](https://img.shields.io/badge/MongoDB-%234ea94b.svg?style=for-the-badge&logo=mongodb&logoColor=white) ![Git](https://img.shields.io/badge/git-%23F05033.svg?style=for-the-badge&logo=git&logoColor=white) +![Apache Kafka](https://img.shields.io/badge/Apache%20Kafka-000?style=for-the-badge&logo=apachekafka) diff --git a/src/documentation/3.4.0/setup/docker/ubuntu/README.md b/src/documentation/3.4.0/setup/docker/ubuntu/README.md index b828175..c54d122 100644 --- a/src/documentation/3.4.0/setup/docker/ubuntu/README.md +++ b/src/documentation/3.4.0/setup/docker/ubuntu/README.md @@ -121,3 +121,4 @@ Several open source dependencies that have aided Mentoring's development: ![NodeJS](https://img.shields.io/badge/node.js-6DA55F?style=for-the-badge&logo=node.js&logoColor=white) ![MongoDB](https://img.shields.io/badge/MongoDB-%234ea94b.svg?style=for-the-badge&logo=mongodb&logoColor=white) ![Git](https://img.shields.io/badge/git-%23F05033.svg?style=for-the-badge&logo=git&logoColor=white) +![Apache Kafka](https://img.shields.io/badge/Apache%20Kafka-000?style=for-the-badge&logo=apachekafka) diff --git a/src/documentation/3.4.0/setup/docker/windows/README.md b/src/documentation/3.4.0/setup/docker/windows/README.md index 6dc42b8..c3311d1 100644 --- a/src/documentation/3.4.0/setup/docker/windows/README.md +++ b/src/documentation/3.4.0/setup/docker/windows/README.md @@ -133,3 +133,4 @@ Several open source dependencies that have aided Mentoring's development: ![NodeJS](https://img.shields.io/badge/node.js-6DA55F?style=for-the-badge&logo=node.js&logoColor=white) ![MongoDB](https://img.shields.io/badge/MongoDB-%234ea94b.svg?style=for-the-badge&logo=mongodb&logoColor=white) ![Git](https://img.shields.io/badge/git-%23F05033.svg?style=for-the-badge&logo=git&logoColor=white) +![Apache Kafka](https://img.shields.io/badge/Apache%20Kafka-000?style=for-the-badge&logo=apachekafka) diff --git a/src/documentation/3.4.0/setup/native/mac-os/README.md b/src/documentation/3.4.0/setup/native/mac-os/README.md index bd95b0d..478294b 100644 --- a/src/documentation/3.4.0/setup/native/mac-os/README.md +++ b/src/documentation/3.4.0/setup/native/mac-os/README.md @@ -41,6 +41,7 @@ This Service enables the creation and management of various entities and entityT - **Operating System:** Mac - **Node.js:** v20 - **mongoDb:** v4 +- **Kafka:** 2.13 ## Local Service With Local Dependencies - Mac @@ -56,6 +57,10 @@ Refer to the [NodeSource distributions installation scripts](https://nodejs.org/ brew install node ``` +### Install Kafka + +Refer to the [Kafka installation scripts](https://kafka.apache.org/community/downloads/) for Kafka installation. + ### Install PM2 **Run the following command** @@ -109,14 +114,14 @@ MONGODB_URL=mongodb://localhost:27017/elevate-entity AUTH_METHOD = native #User Service Url -USER_SERVICE_URL = http://localhost:3569 +USER_SERVICE_URL = http://localhost:5001 USER_SERVICE_BASE_URL=/user SERVICE_NAME = elevate-entity-service #API Doc URL -API_DOC_URL="http://localhost:3569/entity-management/api-doc" +API_DOC_URL="http://localhost:5001/entity-management/api-doc" APPLICATION_HOST=localhost @@ -130,7 +135,15 @@ ADMIN_TOKEN_HEADER_NAME="admin-auth-token" KAFKA_HEALTH_CHECK_TOPIC='KAFKA_HEALTH_CHECK_TOPIC' #Interface URL -INTERFACE_SERVICE_URL=http://localhost:3569 +INTERFACE_SERVICE_URL=http://localhost:5001 + +KAFKA_HEALTH_CHECK_TOPIC = entity-health-check-topic-check + +KAFKA_URL = kafka:9092 + +KAFKA_COMMUNICATIONS_ON_OFF = ON + +KAFKA_GROUP_ID = entity HEALTH_CHECK_DEBUG_MODE = true ``` @@ -197,3 +210,4 @@ Several open source dependencies that have aided Mentoring's development: ![NodeJS](https://img.shields.io/badge/node.js-6DA55F?style=for-the-badge&logo=node.js&logoColor=white) ![MongoDB](https://img.shields.io/badge/MongoDB-%234ea94b.svg?style=for-the-badge&logo=mongodb&logoColor=white) ![Git](https://img.shields.io/badge/git-%23F05033.svg?style=for-the-badge&logo=git&logoColor=white) +![Apache Kafka](https://img.shields.io/badge/Apache%20Kafka-000?style=for-the-badge&logo=apachekafka) diff --git a/src/documentation/3.4.0/setup/native/ubuntu/README.md b/src/documentation/3.4.0/setup/native/ubuntu/README.md index 55256a3..2e73718 100644 --- a/src/documentation/3.4.0/setup/native/ubuntu/README.md +++ b/src/documentation/3.4.0/setup/native/ubuntu/README.md @@ -41,6 +41,7 @@ This Service enables the creation and management of various entities and entityT - **Operating System:** Ubuntu 22 - **Node.js:** v20 - **mongoDb:** v4 +- **Kafka:** 2.13 ## Local Service With Local Dependencies - Ubuntu @@ -56,6 +57,10 @@ Refer to the [NodeSource distributions installation scripts](https://github.com/ sudo apt install -y nodejs ``` +### Install Kafka + +Refer to the [Kafka installation scripts](https://kafka.apache.org/community/downloads/) for Kafka installation. + ### Install PM2 Refer to [How To Set Up a Node.js Application for Production on Ubuntu 22.04](https://www.digitalocean.com/community/tutorials/how-to-set-up-a-node-js-application-for-production-on-ubuntu-22-04). @@ -111,14 +116,14 @@ MONGODB_URL=mongodb://localhost:27017/elevate-entity AUTH_METHOD = native #User Service Url -USER_SERVICE_URL = http://localhost:3569 +USER_SERVICE_URL = http://localhost:5001 USER_SERVICE_BASE_URL=/user SERVICE_NAME = elevate-entity-service #API Doc URL -API_DOC_URL="http://localhost:3569/entity-management/api-doc" +API_DOC_URL="http://localhost:5001/entity-management/api-doc" APPLICATION_HOST=localhost @@ -132,7 +137,15 @@ ADMIN_TOKEN_HEADER_NAME="admin-auth-token" KAFKA_HEALTH_CHECK_TOPIC='KAFKA_HEALTH_CHECK_TOPIC' #Interface URL -INTERFACE_SERVICE_URL=http://localhost:3569 +INTERFACE_SERVICE_URL=http://localhost:5001 + +KAFKA_HEALTH_CHECK_TOPIC = entity-health-check-topic-check + +KAFKA_URL = kafka:9092 + +KAFKA_COMMUNICATIONS_ON_OFF = ON + +KAFKA_GROUP_ID = entity HEALTH_CHECK_DEBUG_MODE = true ``` @@ -199,3 +212,4 @@ Several open source dependencies that have aided Mentoring's development: ![NodeJS](https://img.shields.io/badge/node.js-6DA55F?style=for-the-badge&logo=node.js&logoColor=white) ![MongoDB](https://img.shields.io/badge/MongoDB-%234ea94b.svg?style=for-the-badge&logo=mongodb&logoColor=white) ![Git](https://img.shields.io/badge/git-%23F05033.svg?style=for-the-badge&logo=git&logoColor=white) +![Apache Kafka](https://img.shields.io/badge/Apache%20Kafka-000?style=for-the-badge&logo=apachekafka) diff --git a/src/documentation/3.4.0/setup/native/windows/README.md b/src/documentation/3.4.0/setup/native/windows/README.md index 47943a2..04e336d 100644 --- a/src/documentation/3.4.0/setup/native/windows/README.md +++ b/src/documentation/3.4.0/setup/native/windows/README.md @@ -41,6 +41,7 @@ This Service enables the creation and management of various entities and entityT - **Operating System:** Windows - **Node.js:** v20 - **mongoDb:** v4 +- **Kafka:** 2.13 ## Local Service With Local Dependencies - Windows @@ -52,6 +53,10 @@ This Service enables the creation and management of various entities and entityT Refer to the [NodeSource distributions installation scripts](https://nodejs.org/en/download/) for Node.js installation. +### Install Kafka + +Refer to the [Kafka installation scripts](https://kafka.apache.org/community/downloads/) for Kafka installation. + ### Install PM2 **Run the following command** @@ -109,14 +114,14 @@ MONGODB_URL=mongodb://localhost:27017/elevate-entity AUTH_METHOD = native #User Service Url -USER_SERVICE_URL = http://localhost:3569 +USER_SERVICE_URL = http://localhost:5001 USER_SERVICE_BASE_URL=/user SERVICE_NAME = elevate-entity-service #API Doc URL -API_DOC_URL="http://localhost:3569/entity-management/api-doc" +API_DOC_URL="http://localhost:5001/entity-management/api-doc" APPLICATION_HOST=localhost @@ -130,7 +135,15 @@ ADMIN_TOKEN_HEADER_NAME="admin-auth-token" KAFKA_HEALTH_CHECK_TOPIC='KAFKA_HEALTH_CHECK_TOPIC' #Interface URL -INTERFACE_SERVICE_URL=http://localhost:3569 +INTERFACE_SERVICE_URL=http://localhost:5001 + +KAFKA_HEALTH_CHECK_TOPIC = entity-health-check-topic-check + +KAFKA_URL = kafka:9092 + +KAFKA_COMMUNICATIONS_ON_OFF = ON + +KAFKA_GROUP_ID = entity HEALTH_CHECK_DEBUG_MODE = true ``` @@ -196,3 +209,4 @@ Several open source dependencies that have aided Mentoring's development: ![NodeJS](https://img.shields.io/badge/node.js-6DA55F?style=for-the-badge&logo=node.js&logoColor=white) ![MongoDB](https://img.shields.io/badge/MongoDB-%234ea94b.svg?style=for-the-badge&logo=mongodb&logoColor=white) ![Git](https://img.shields.io/badge/git-%23F05033.svg?style=for-the-badge&logo=git&logoColor=white) +![Apache Kafka](https://img.shields.io/badge/Apache%20Kafka-000?style=for-the-badge&logo=apachekafka) From 51eac212c42a1a5add3c886693e68bec6213cced Mon Sep 17 00:00:00 2001 From: MallanagoudaB Date: Thu, 29 Jan 2026 16:53:19 +0530 Subject: [PATCH 14/19] push-for-native-setup --- src/documentation/3.4.0/setup/native/mac-os/README.md | 2 +- src/documentation/3.4.0/setup/native/ubuntu/README.md | 2 +- src/documentation/3.4.0/setup/native/windows/README.md | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/documentation/3.4.0/setup/native/mac-os/README.md b/src/documentation/3.4.0/setup/native/mac-os/README.md index 478294b..0a17ebe 100644 --- a/src/documentation/3.4.0/setup/native/mac-os/README.md +++ b/src/documentation/3.4.0/setup/native/mac-os/README.md @@ -139,7 +139,7 @@ INTERFACE_SERVICE_URL=http://localhost:5001 KAFKA_HEALTH_CHECK_TOPIC = entity-health-check-topic-check -KAFKA_URL = kafka:9092 +KAFKA_URL = localhost:9092 KAFKA_COMMUNICATIONS_ON_OFF = ON diff --git a/src/documentation/3.4.0/setup/native/ubuntu/README.md b/src/documentation/3.4.0/setup/native/ubuntu/README.md index 2e73718..db61cc5 100644 --- a/src/documentation/3.4.0/setup/native/ubuntu/README.md +++ b/src/documentation/3.4.0/setup/native/ubuntu/README.md @@ -141,7 +141,7 @@ INTERFACE_SERVICE_URL=http://localhost:5001 KAFKA_HEALTH_CHECK_TOPIC = entity-health-check-topic-check -KAFKA_URL = kafka:9092 +KAFKA_URL = localhost:9092 KAFKA_COMMUNICATIONS_ON_OFF = ON diff --git a/src/documentation/3.4.0/setup/native/windows/README.md b/src/documentation/3.4.0/setup/native/windows/README.md index 04e336d..330160f 100644 --- a/src/documentation/3.4.0/setup/native/windows/README.md +++ b/src/documentation/3.4.0/setup/native/windows/README.md @@ -139,7 +139,7 @@ INTERFACE_SERVICE_URL=http://localhost:5001 KAFKA_HEALTH_CHECK_TOPIC = entity-health-check-topic-check -KAFKA_URL = kafka:9092 +KAFKA_URL = localhost:9092 KAFKA_COMMUNICATIONS_ON_OFF = ON From f15667df44341a302c4d500b24958932d071568a Mon Sep 17 00:00:00 2001 From: MallanagoudaB Date: Thu, 29 Jan 2026 16:57:30 +0530 Subject: [PATCH 15/19] push-for-native-setup --- .../1.0.0/dockerFiles/docker-compose.yml | 31 ------------------- .../dockerized/dockerFiles/docker-compose.yml | 31 +++++++++++++++++++ 2 files changed, 31 insertions(+), 31 deletions(-) diff --git a/src/documentation/1.0.0/dockerFiles/docker-compose.yml b/src/documentation/1.0.0/dockerFiles/docker-compose.yml index 81d1818..7edb5db 100644 --- a/src/documentation/1.0.0/dockerFiles/docker-compose.yml +++ b/src/documentation/1.0.0/dockerFiles/docker-compose.yml @@ -1,36 +1,5 @@ version: '3' services: - zookeeper: - image: 'confluentinc/cp-zookeeper:7.3.0' - ports: - - '2181:2181' - environment: - - ALLOW_ANONYMOUS_LOGIN=yes - - ZOOKEEPER_CLIENT_PORT=2181 - - ZOOKEEPER_TICK_TIME=2000 - networks: - - entity_net - kafka: - image: 'confluentinc/cp-kafka:7.3.0' - ports: - - '9092:9092' - environment: - KAFKA_BROKER_ID: 1 - KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181 - KAFKA_LISTENERS: PLAINTEXT://0.0.0.0:29092,PLAINTEXT_HOST://0.0.0.0:9092 - KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka:29092,PLAINTEXT_HOST://localhost:9092 - KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT - KAFKA_INTER_BROKER_LISTENER_NAME: PLAINTEXT - KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1 - depends_on: - - zookeeper - healthcheck: - test: kafka-topics --bootstrap-server localhost:9092 --list || exit 1 - interval: 10s - timeout: 5s - retries: 9 - networks: - - entity_net mongo: image: 'mongo:4.4.14' restart: 'always' diff --git a/src/documentation/3.4.0/dockerized/dockerFiles/docker-compose.yml b/src/documentation/3.4.0/dockerized/dockerFiles/docker-compose.yml index 727bdec..5bd8504 100644 --- a/src/documentation/3.4.0/dockerized/dockerFiles/docker-compose.yml +++ b/src/documentation/3.4.0/dockerized/dockerFiles/docker-compose.yml @@ -1,5 +1,36 @@ version: '3' services: + zookeeper: + image: 'confluentinc/cp-zookeeper:7.3.0' + ports: + - '2181:2181' + environment: + - ALLOW_ANONYMOUS_LOGIN=yes + - ZOOKEEPER_CLIENT_PORT=2181 + - ZOOKEEPER_TICK_TIME=2000 + networks: + - entity_net + kafka: + image: 'confluentinc/cp-kafka:7.3.0' + ports: + - '9092:9092' + environment: + KAFKA_BROKER_ID: 1 + KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181 + KAFKA_LISTENERS: PLAINTEXT://0.0.0.0:29092,PLAINTEXT_HOST://0.0.0.0:9092 + KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka:29092,PLAINTEXT_HOST://localhost:9092 + KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT + KAFKA_INTER_BROKER_LISTENER_NAME: PLAINTEXT + KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1 + depends_on: + - zookeeper + healthcheck: + test: kafka-topics --bootstrap-server localhost:9092 --list || exit 1 + interval: 10s + timeout: 5s + retries: 9 + networks: + - entity_net mongo: image: 'mongo:4.4.14' restart: 'always' From 8a966fe8fda72169668d138b0ba03ffc629c24df Mon Sep 17 00:00:00 2001 From: MallanagoudaB Date: Thu, 29 Jan 2026 17:23:09 +0530 Subject: [PATCH 16/19] push-for-native-setup --- .../dockerized/dockerFiles/docker-compose.yml | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/src/documentation/3.4.0/dockerized/dockerFiles/docker-compose.yml b/src/documentation/3.4.0/dockerized/dockerFiles/docker-compose.yml index 5bd8504..e7efec1 100644 --- a/src/documentation/3.4.0/dockerized/dockerFiles/docker-compose.yml +++ b/src/documentation/3.4.0/dockerized/dockerFiles/docker-compose.yml @@ -1,15 +1,17 @@ version: '3' services: zookeeper: - image: 'confluentinc/cp-zookeeper:7.3.0' + image: confluentinc/cp-zookeeper:7.3.0 + hostname: zookeeper + container_name: zookeeper ports: - '2181:2181' environment: - - ALLOW_ANONYMOUS_LOGIN=yes - - ZOOKEEPER_CLIENT_PORT=2181 - - ZOOKEEPER_TICK_TIME=2000 + ZOOKEEPER_CLIENT_PORT: 2181 + ZOOKEEPER_TICK_TIME: 2000 networks: - entity_net + kafka: image: 'confluentinc/cp-kafka:7.3.0' ports: @@ -24,11 +26,6 @@ services: KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1 depends_on: - zookeeper - healthcheck: - test: kafka-topics --bootstrap-server localhost:9092 --list || exit 1 - interval: 10s - timeout: 5s - retries: 9 networks: - entity_net mongo: From 0b1dfd7851054e7aa8bb7941cc06b4ca2093b871 Mon Sep 17 00:00:00 2001 From: MallanagoudaB Date: Fri, 30 Jan 2026 11:45:20 +0530 Subject: [PATCH 17/19] push-for-native-setup --- src/documentation/3.4.0/setup/docker/mac-os/README.md | 2 +- src/documentation/3.4.0/setup/docker/ubuntu/README.md | 2 +- src/documentation/3.4.0/setup/docker/windows/README.md | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/documentation/3.4.0/setup/docker/mac-os/README.md b/src/documentation/3.4.0/setup/docker/mac-os/README.md index 5485ecc..8da9227 100644 --- a/src/documentation/3.4.0/setup/docker/mac-os/README.md +++ b/src/documentation/3.4.0/setup/docker/mac-os/README.md @@ -59,7 +59,7 @@ This Service enables the creation and management of various entities and entityT > **Caution:** Before proceeding, please ensure that the ports given here are available and open. It is essential to verify their availability prior to moving forward. You can run below command in your terminal to check this ``` -for port in 5001 27017; do +for port in 5001 27017 9092; do if sudo lsof -iTCP:$port -sTCP:LISTEN &>/dev/null; then echo "Port $port is IN USE" else diff --git a/src/documentation/3.4.0/setup/docker/ubuntu/README.md b/src/documentation/3.4.0/setup/docker/ubuntu/README.md index c54d122..674139d 100644 --- a/src/documentation/3.4.0/setup/docker/ubuntu/README.md +++ b/src/documentation/3.4.0/setup/docker/ubuntu/README.md @@ -59,7 +59,7 @@ This Service enables the creation and management of various entities and entityT > **Caution:** Before proceeding, please ensure that the ports given here are available and open. It is essential to verify their availability prior to moving forward. You can run below command in your terminal to check this ``` -for port in 5001 27017; do +for port in 5001 27017 9092; do if sudo lsof -iTCP:$port -sTCP:LISTEN &>/dev/null; then echo "Port $port is IN USE" else diff --git a/src/documentation/3.4.0/setup/docker/windows/README.md b/src/documentation/3.4.0/setup/docker/windows/README.md index c3311d1..fd4d7d6 100644 --- a/src/documentation/3.4.0/setup/docker/windows/README.md +++ b/src/documentation/3.4.0/setup/docker/windows/README.md @@ -59,7 +59,7 @@ This Service enables the creation and management of various entities and entityT > **Caution:** Before proceeding, please ensure that the ports given here are available and open. It is essential to verify their availability prior to moving forward. You can run below command in your terminal to check this ``` -for port in 5001 27017; do +for port in 5001 27017 9092; do if sudo lsof -iTCP:$port -sTCP:LISTEN &>/dev/null; then echo "Port $port is IN USE" else From 77d260ea9632e7dc2249a2335bffd3255351528e Mon Sep 17 00:00:00 2001 From: MallanagoudaB Date: Fri, 13 Feb 2026 13:02:11 +0530 Subject: [PATCH 18/19] change-in-readMe --- .../commonFiles/{ => generics}/configFile.json | 0 .../3.4.0/setup/docker/mac-os/README.md | 16 ++++++++++------ .../3.4.0/setup/docker/ubuntu/README.md | 16 ++++++++++------ .../3.4.0/setup/docker/windows/README.md | 18 +++++++++++------- .../3.4.0/setup/native/mac-os/README.md | 14 +++++++++----- .../3.4.0/setup/native/ubuntu/README.md | 14 +++++++++----- .../3.4.0/setup/native/windows/README.md | 14 +++++++++----- 7 files changed, 58 insertions(+), 34 deletions(-) rename src/documentation/3.4.0/commonFiles/{ => generics}/configFile.json (100%) diff --git a/src/documentation/3.4.0/commonFiles/configFile.json b/src/documentation/3.4.0/commonFiles/generics/configFile.json similarity index 100% rename from src/documentation/3.4.0/commonFiles/configFile.json rename to src/documentation/3.4.0/commonFiles/generics/configFile.json diff --git a/src/documentation/3.4.0/setup/docker/mac-os/README.md b/src/documentation/3.4.0/setup/docker/mac-os/README.md index 8da9227..c5c38ca 100644 --- a/src/documentation/3.4.0/setup/docker/mac-os/README.md +++ b/src/documentation/3.4.0/setup/docker/mac-os/README.md @@ -38,7 +38,7 @@ This Service enables the creation and management of various entities and entityT # System Requirements -- **Operating System:** Ubuntu 22 +- **Operating System:** Mac - **Node.js:** v20 - **mongoDb:** v4 @@ -46,6 +46,10 @@ This Service enables the creation and management of various entities and entityT **Expectation**: Run single docker containerized service with existing local (in host) or remote dependencies. +## Prerequisites + +To set up the Entity-Management application, ensure you have Docker and Docker Compose installed on your system. For Ubuntu users, detailed installation instructions for both can be found in the documentation here: [How To Install and Use Docker Compose on Ubuntu](https://www.digitalocean.com/community/tutorials/how-to-install-and-use-docker-compose-on-ubuntu-20-04). To install and use Nodejs in Ubuntu machine, you can follow instructions here: [How To Install Nodejs in Ubuntu](https://nodejs.org/en/download/package-manager). For Windows and MacOS users, you can refer to the Docker documentation for installation instructions: [Docker Compose Installation Guide](https://docs.docker.com/compose/install/). Once these prerequisites are in place, you're all set to get started with setting up the Project application. + ## Installation **Create project Directory:** Establish a directory titled **project**. @@ -116,9 +120,9 @@ You can learn more about the full implementation of project-service [here](https # Open Source Dependencies -Several open source dependencies that have aided Mentoring's development: +This project uses several open-source tools and dependencies that supported its development -![NodeJS](https://img.shields.io/badge/node.js-6DA55F?style=for-the-badge&logo=node.js&logoColor=white) -![MongoDB](https://img.shields.io/badge/MongoDB-%234ea94b.svg?style=for-the-badge&logo=mongodb&logoColor=white) -![Git](https://img.shields.io/badge/git-%23F05033.svg?style=for-the-badge&logo=git&logoColor=white) -![Apache Kafka](https://img.shields.io/badge/Apache%20Kafka-000?style=for-the-badge&logo=apachekafka) +![NodeJS](https://img.shields.io/badge/node.js-6DA55F?style=for-the-badge&logo=node.js&logoColor=white) +![Apache Kafka](https://img.shields.io/badge/Apache%20Kafka-000?style=for-the-badge&logo=apachekafka) +![Git](https://img.shields.io/badge/git-%23F05033.svg?style=for-the-badge&logo=git&logoColor=white) +![MongoDB](https://img.shields.io/badge/MongoDB-4EA94B?style=for-the-badge&logo=mongodb&logoColor=white) diff --git a/src/documentation/3.4.0/setup/docker/ubuntu/README.md b/src/documentation/3.4.0/setup/docker/ubuntu/README.md index 674139d..749fb8e 100644 --- a/src/documentation/3.4.0/setup/docker/ubuntu/README.md +++ b/src/documentation/3.4.0/setup/docker/ubuntu/README.md @@ -38,7 +38,7 @@ This Service enables the creation and management of various entities and entityT # System Requirements -- **Operating System:** Ubuntu 22 +- **Operating System:** Ubuntu - **Node.js:** v20 - **mongoDb:** v4 @@ -46,6 +46,10 @@ This Service enables the creation and management of various entities and entityT **Expectation**: Run single docker containerized service with existing local (in host) or remote dependencies. +## Prerequisites + +To set up the Entity-Management application, ensure you have Docker and Docker Compose installed on your system. For Ubuntu users, detailed installation instructions for both can be found in the documentation here: [How To Install and Use Docker Compose on Ubuntu](https://www.digitalocean.com/community/tutorials/how-to-install-and-use-docker-compose-on-ubuntu-20-04). To install and use Nodejs in Ubuntu machine, you can follow instructions here: [How To Install Nodejs in Ubuntu](https://nodejs.org/en/download/package-manager). For Windows and MacOS users, you can refer to the Docker documentation for installation instructions: [Docker Compose Installation Guide](https://docs.docker.com/compose/install/). Once these prerequisites are in place, you're all set to get started with setting up the Project application. + ## Installation **Create project Directory:** Establish a directory titled **project**. @@ -116,9 +120,9 @@ You can learn more about the full implementation of project-service [here](https # Open Source Dependencies -Several open source dependencies that have aided Mentoring's development: +This project uses several open-source tools and dependencies that supported its development -![NodeJS](https://img.shields.io/badge/node.js-6DA55F?style=for-the-badge&logo=node.js&logoColor=white) -![MongoDB](https://img.shields.io/badge/MongoDB-%234ea94b.svg?style=for-the-badge&logo=mongodb&logoColor=white) -![Git](https://img.shields.io/badge/git-%23F05033.svg?style=for-the-badge&logo=git&logoColor=white) -![Apache Kafka](https://img.shields.io/badge/Apache%20Kafka-000?style=for-the-badge&logo=apachekafka) +![NodeJS](https://img.shields.io/badge/node.js-6DA55F?style=for-the-badge&logo=node.js&logoColor=white) +![Apache Kafka](https://img.shields.io/badge/Apache%20Kafka-000?style=for-the-badge&logo=apachekafka) +![Git](https://img.shields.io/badge/git-%23F05033.svg?style=for-the-badge&logo=git&logoColor=white) +![MongoDB](https://img.shields.io/badge/MongoDB-4EA94B?style=for-the-badge&logo=mongodb&logoColor=white) diff --git a/src/documentation/3.4.0/setup/docker/windows/README.md b/src/documentation/3.4.0/setup/docker/windows/README.md index fd4d7d6..c687993 100644 --- a/src/documentation/3.4.0/setup/docker/windows/README.md +++ b/src/documentation/3.4.0/setup/docker/windows/README.md @@ -38,14 +38,18 @@ This Service enables the creation and management of various entities and entityT # System Requirements -- **Operating System:** Ubuntu 22 +- **Operating System:** Windows - **Node.js:** v20 - **mongoDb:** v4 -## Dockerized Service With Local Dependencies - Ubuntu +## Dockerized Service With Local Dependencies - Windows **Expectation**: Run single docker containerized service with existing local (in host) or remote dependencies. +## Prerequisites + +To set up the Entity-Management application, ensure you have Docker and Docker Compose installed on your system. For Ubuntu users, detailed installation instructions for both can be found in the documentation here: [How To Install and Use Docker Compose on Ubuntu](https://www.digitalocean.com/community/tutorials/how-to-install-and-use-docker-compose-on-ubuntu-20-04). To install and use Nodejs in Ubuntu machine, you can follow instructions here: [How To Install Nodejs in Ubuntu](https://nodejs.org/en/download/package-manager). For Windows and MacOS users, you can refer to the Docker documentation for installation instructions: [Docker Compose Installation Guide](https://docs.docker.com/compose/install/). Once these prerequisites are in place, you're all set to get started with setting up the Project application. + ## Installation **Create project Directory:** Establish a directory titled **project**. @@ -128,9 +132,9 @@ You can learn more about the full implementation of project-service [here](https # Open Source Dependencies -Several open source dependencies that have aided Mentoring's development: +This project uses several open-source tools and dependencies that supported its development -![NodeJS](https://img.shields.io/badge/node.js-6DA55F?style=for-the-badge&logo=node.js&logoColor=white) -![MongoDB](https://img.shields.io/badge/MongoDB-%234ea94b.svg?style=for-the-badge&logo=mongodb&logoColor=white) -![Git](https://img.shields.io/badge/git-%23F05033.svg?style=for-the-badge&logo=git&logoColor=white) -![Apache Kafka](https://img.shields.io/badge/Apache%20Kafka-000?style=for-the-badge&logo=apachekafka) +![NodeJS](https://img.shields.io/badge/node.js-6DA55F?style=for-the-badge&logo=node.js&logoColor=white) +![Apache Kafka](https://img.shields.io/badge/Apache%20Kafka-000?style=for-the-badge&logo=apachekafka) +![Git](https://img.shields.io/badge/git-%23F05033.svg?style=for-the-badge&logo=git&logoColor=white) +![MongoDB](https://img.shields.io/badge/MongoDB-4EA94B?style=for-the-badge&logo=mongodb&logoColor=white) diff --git a/src/documentation/3.4.0/setup/native/mac-os/README.md b/src/documentation/3.4.0/setup/native/mac-os/README.md index 0a17ebe..d84ff84 100644 --- a/src/documentation/3.4.0/setup/native/mac-os/README.md +++ b/src/documentation/3.4.0/setup/native/mac-os/README.md @@ -47,6 +47,10 @@ This Service enables the creation and management of various entities and entityT **Expectation**: Run single service with existing local dependencies in host (**Non-Docker Implementation**). +## Prerequisites + +Before setting up the following ELEVATE-Entity-Management application, dependencies given below should be installed and verified to be running. Refer to the steps given below to install them and verify. + ## Installations ### Install Node.js LTS @@ -205,9 +209,9 @@ You can learn more about the full implementation of project-service [here](https # Open Source Dependencies -Several open source dependencies that have aided Mentoring's development: +This project uses several open-source tools and dependencies that supported its development -![NodeJS](https://img.shields.io/badge/node.js-6DA55F?style=for-the-badge&logo=node.js&logoColor=white) -![MongoDB](https://img.shields.io/badge/MongoDB-%234ea94b.svg?style=for-the-badge&logo=mongodb&logoColor=white) -![Git](https://img.shields.io/badge/git-%23F05033.svg?style=for-the-badge&logo=git&logoColor=white) -![Apache Kafka](https://img.shields.io/badge/Apache%20Kafka-000?style=for-the-badge&logo=apachekafka) +![NodeJS](https://img.shields.io/badge/node.js-6DA55F?style=for-the-badge&logo=node.js&logoColor=white) +![Apache Kafka](https://img.shields.io/badge/Apache%20Kafka-000?style=for-the-badge&logo=apachekafka) +![Git](https://img.shields.io/badge/git-%23F05033.svg?style=for-the-badge&logo=git&logoColor=white) +![MongoDB](https://img.shields.io/badge/MongoDB-4EA94B?style=for-the-badge&logo=mongodb&logoColor=white) diff --git a/src/documentation/3.4.0/setup/native/ubuntu/README.md b/src/documentation/3.4.0/setup/native/ubuntu/README.md index db61cc5..459ca53 100644 --- a/src/documentation/3.4.0/setup/native/ubuntu/README.md +++ b/src/documentation/3.4.0/setup/native/ubuntu/README.md @@ -47,6 +47,10 @@ This Service enables the creation and management of various entities and entityT **Expectation**: Run single service with existing local dependencies in host (**Non-Docker Implementation**). +## Prerequisites + +Before setting up the following ELEVATE-Entity-Management application, dependencies given below should be installed and verified to be running. Refer to the steps given below to install them and verify. + ## Installations ### Install Node.js LTS @@ -207,9 +211,9 @@ You can learn more about the full implementation of project-service [here](https # Open Source Dependencies -Several open source dependencies that have aided Mentoring's development: +This project uses several open-source tools and dependencies that supported its development -![NodeJS](https://img.shields.io/badge/node.js-6DA55F?style=for-the-badge&logo=node.js&logoColor=white) -![MongoDB](https://img.shields.io/badge/MongoDB-%234ea94b.svg?style=for-the-badge&logo=mongodb&logoColor=white) -![Git](https://img.shields.io/badge/git-%23F05033.svg?style=for-the-badge&logo=git&logoColor=white) -![Apache Kafka](https://img.shields.io/badge/Apache%20Kafka-000?style=for-the-badge&logo=apachekafka) +![NodeJS](https://img.shields.io/badge/node.js-6DA55F?style=for-the-badge&logo=node.js&logoColor=white) +![Apache Kafka](https://img.shields.io/badge/Apache%20Kafka-000?style=for-the-badge&logo=apachekafka) +![Git](https://img.shields.io/badge/git-%23F05033.svg?style=for-the-badge&logo=git&logoColor=white) +![MongoDB](https://img.shields.io/badge/MongoDB-4EA94B?style=for-the-badge&logo=mongodb&logoColor=white) diff --git a/src/documentation/3.4.0/setup/native/windows/README.md b/src/documentation/3.4.0/setup/native/windows/README.md index 330160f..754f05c 100644 --- a/src/documentation/3.4.0/setup/native/windows/README.md +++ b/src/documentation/3.4.0/setup/native/windows/README.md @@ -47,6 +47,10 @@ This Service enables the creation and management of various entities and entityT **Expectation**: Run single service with existing local dependencies in host (**Non-Docker Implementation**). +## Prerequisites + +Before setting up the following ELEVATE-Entity-Management application, dependencies given below should be installed and verified to be running. Refer to the steps given below to install them and verify. + ## Installations ### Install Node.js LTS @@ -204,9 +208,9 @@ You can learn more about the full implementation of project-service [here](https # Open Source Dependencies -Several open source dependencies that have aided Mentoring's development: +This project uses several open-source tools and dependencies that supported its development -![NodeJS](https://img.shields.io/badge/node.js-6DA55F?style=for-the-badge&logo=node.js&logoColor=white) -![MongoDB](https://img.shields.io/badge/MongoDB-%234ea94b.svg?style=for-the-badge&logo=mongodb&logoColor=white) -![Git](https://img.shields.io/badge/git-%23F05033.svg?style=for-the-badge&logo=git&logoColor=white) -![Apache Kafka](https://img.shields.io/badge/Apache%20Kafka-000?style=for-the-badge&logo=apachekafka) +![NodeJS](https://img.shields.io/badge/node.js-6DA55F?style=for-the-badge&logo=node.js&logoColor=white) +![Apache Kafka](https://img.shields.io/badge/Apache%20Kafka-000?style=for-the-badge&logo=apachekafka) +![Git](https://img.shields.io/badge/git-%23F05033.svg?style=for-the-badge&logo=git&logoColor=white) +![MongoDB](https://img.shields.io/badge/MongoDB-4EA94B?style=for-the-badge&logo=mongodb&logoColor=white) From b899c2dd49ca621427125349b87c909db07f7c1f Mon Sep 17 00:00:00 2001 From: MallanagoudaB Date: Fri, 13 Feb 2026 13:04:43 +0530 Subject: [PATCH 19/19] change-in-readMe --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 999cbb9..d85f46b 100644 --- a/README.md +++ b/README.md @@ -109,9 +109,9 @@ This README is focused on the **3.4.0 Setup Guide** for the Entity-Management Se --- -### Open Source Dependencies +# Open Source Dependencies -This Entity-Management Service uses several open-source tools and dependencies that supported its development +This project uses several open-source tools and dependencies that supported its development ![NodeJS](https://img.shields.io/badge/node.js-6DA55F?style=for-the-badge&logo=node.js&logoColor=white) ![Apache Kafka](https://img.shields.io/badge/Apache%20Kafka-000?style=for-the-badge&logo=apachekafka)