ClassDodo is an open source class management system that helps teachers monitor their student performance The application provides students with test questions for each subject. It is ideal for lesson teachers and form teachers. It is developed to illustrate how to create an app using microservice architecture that scales. Visit live site
- Classroom dashbord displaying different subjects with test
- Teachers can sign up and, create new subjects and create multiple test for each project they've created
- Students can login and attempt tests in which they are graded and recorded
- The records of each students can be viewd to know their performance in certain subjects
- The main administrator can view all the records and add or remove users
To get started you need the following installed on your local machine
Python v>=3.5
npm v>=6.4.1
npm v>=6.4.1
Python v>=3.6
Backend developed using Django and django-rest-framework. The backend is hosted on the Backend service on a Docker containers in Kubernetes clusters.
- Django v3 for developing the backend
- django-rest-framework for api configuration
- django-rest-auth to enable token and session authentication
- django-allauth to allow custom user registration and authentication
- django-corsheaders to allow the frontend access to api
- In development mode, ensure to set
DEGUB=True
insettings.py
- Fork this project here
- Clone this repository
- Navigate into the root folder
- Open a terminal (bash preferably) from the folder
- Run
virtualenv env
to ensure that depencies are up to date - Run
source env/Scripts/activate
for windows users orsource env/bin/activate
on Mac or Linux - Run
pip install -r requirements.txt
Ensure you set the environment on your IDE to use the virtual enviroment - Run
python3 manage.py runserver
The client side for this application was
Enter these command on the command line
cd client
yarn build
ornpm run build
Builds the app for production to the build folder. It correctly bundles React in production mode and optimizes the build for the best performance.
The build is minified and the filenames include the hashes. The client is ready to be deployed!
The app using consist of two services; a backend service will contain the django app and serve as the api provider for the application
Setting up the docker image for the React App
- Make your image
DP=[YOUR_DOCKER_ID]/[NAME_YOUR_IMAGE:1.0]
docker run build
- Run the command
docker run -d -p 80:80 $DP
run the docker image - Login your docker account
docker login --username=[YOUR_DOCKER_ID]
- Push to a remote container repo
docker push $DP
Connecting to Google Cloud Platform
- Initialize the folder to be a gcloud repo
You will need to have the Google Cloud SDK installed on your system - Run
gcloud init
- Login using
gcloud login
Orgcloud config auth login
- Choose a project
gcloud config set project [PROJECT_ID]
- Pick a region
gcloud config set compute/region [COMPUTE_REGION]
Deploying on Kubernetes Engine
- Create a container cluster
gcloud container clusters create [CLUSTER_NAME]
- Create a Kubernetes deployment image kubectl create deployment [DEPLOYMENT_NAME e.g test] --image $DP
- Expose your deployment kubectl expose deployment [DEPLOYMENT_IMAGE_NAME] --type LoadBalancer --port 80 --target-port 80 To find the external IP address of your app kubectl get services Your Application should great :thumbs-up:
When contributing to this repository, please first discuss the change you wish to make via issue, email, or any other method with the owners of this repository before making a change.
Please note we have a code of conduct, please follow it in all your interactions with the project.
- Enabling teachers to create assignments
- Linking it up with Firestore
- Adding enrollments
- Feel free to sniff out bugs too
- Ensure any install or build dependencies are removed before the end of the layer when doing a build.
- Update the README.md with details of changes to the interface, this includes new environment variables, exposed ports, useful file locations and container parameters.
- Make all pull requests of new features to the develop branch so it can be project
This project uses MIT License