- A Job Portal where employers can post job listings and candidates can apply for jobs or create profiles showcasing their skills.
This project involves building a modern Job Portal application leveraging a microservices architecture. Below, you'll find a detailed description of the skills and technologies used in this project.
- Introduction
- Project Structure
- Technologies and Skills
- Getting Started
- API Documentation
- Deployment
- Testing
- Troubleshooting
- Contributing
- License
This project demonstrates the development of a sophisticated Job Portal application using modern technologies and tools. The architecture is based on microservices, enabling scalability and maintainability. Each microservice is developed with NodeJS and Express, containerized with Docker, and orchestrated with Kubernetes.
/project-root
/auth-service
/job-service
/application-service
/common
/client
/infra
docker-compose.yml
README.md
Handles user authentication and authorization.
Manages job postings and listings.
Processes and manages job applications.
Contains shared utilities and models.
The frontend application built with React.
Infrastructure-related configurations and files.
- React: Building an intuitive job portal application.
- TypeScript: Ensuring type safety and robustness in the frontend code.
- Redux Toolkit RTK Query: Efficient data fetching and caching.
- NodeJS and Express: Developing and designing REST APIs.
- TypeScript: Ensuring type safety and robustness in the backend code.
- MongoDB, MySQL, PostgreSQL: Using multiple databases for different services.
- Docker: Creating containers for microservices.
- Kubernetes: Orchestrating microservices on Minikube and AWS EKS clusters.
- Jenkins: Setting up Continuous Integration/Delivery pipelines both locally and on the cloud.
- RabbitMQ: Setting up microservices communication.
- Elasticsearch, Kibana, Prometheus, Grafana: Implementing observability and monitoring.
- Redis: Using for caching.
- Docker Compose: Setting up services locally.
- JWT: Setting up access to microservices using JWT-based authentication.
- Node.js
- Docker
- Kubernetes
- Minikube
- Skaffold
- Jenkins
-
Clone the repository:
git clone <repository-url> cd <repository-directory>
-
Install dependencies for each service:
cd auth-service npm install cd ../job-service npm install cd ../application-service npm install
-
Set up environment variables:
- Create
.env
files in each service directory. - Example for
auth-service
:MONGO_URI=mongodb://<mongo-url> JWT_KEY=<your-jwt-key>
- Create
-
Start the services using Docker Compose:
docker-compose up
-
Access the frontend application at
http://localhost:3000
.
-
Start Minikube:
minikube start
-
Deploy the services with Skaffold:
skaffold dev
-
Access the frontend application at the Minikube IP.
- POST /api/users/signup: Create a new user.
- POST /api/users/signin: Authenticate a user.
- GET /api/jobs: List all job postings.
- POST /api/jobs: Create a new job posting.
- POST /api/applications: Submit a job application.
- GET /api/applications: List all applications for a job.
-
Build Docker images for each service:
docker build -t <your-dockerhub-username>/auth-service . docker build -t <your-dockerhub-username>/job-service . docker build -t <your-dockerhub-username>/application-service .
-
Push Docker images to Docker Hub:
docker push <your-dockerhub-username>/auth-service docker push <your-dockerhub-username>/job-service docker push <your-dockerhub-username>/application-service
-
Deploy to Kubernetes cluster:
kubectl apply -f k8s/
- Run unit tests for each service:
cd auth-service npm test cd ../job-service npm test cd ../application-service npm test