ProMag is the graduated project for my engineering degree. It is a web application that helps members in a project team can easily to collaborate and manage personal tasks, and the project's progress too!
The project is built with microservice architecture using .NET 8 and ReactJS. In addition, it can run locally with Docker or any Kubernetes cluster, or cloud services. Moreover, it also provide monitoring tools for tracing logging and metrics, CI/CD pipelines for building and testing.
-
.NET 8
-
GraphQL with HotChocolate using as a GraphQL Server and Gateway
-
Inter-service communication with gRPC
-
Message Broker with RabbitMQ and MassTransit
-
SQL Database with PostgreSQL
-
Secrets Management with Vault
-
Accessing database with Entity Framework Core
-
In-process messaging with MediatR
-
OAuth2 and OIDC implementation with Duende IdentityServer
-
Containerization and manage them with Docker, Docker Compose, Kubernetes, Helm
-
Frontend with ReactJS, Apollo Client, Ant Design
npm install
dotnet build Promag.sln
From the root directory promag
of the project, run the following command:
docker compose -f docker-compose.yml -f docker-compose.override.yml -p promag up -d --build
- Docker Desktop
- Docker Compose
- Kubernetes
- Helm
- Lens (Optional)
Step 1. Enable Kubernetes in Docker Desktop and enable dns
, helm3
, registry
, storage
Step 2. Get into the promag
directory:
cd <path-to-promag-directory>
Step 3. Create a namespace for the project named local
:
kubectl create namespace local
Step 4. Run a local registry using this command at port 32000
:
docker run -d -p 32000:5000 --restart=always --name registry registry:2
Step 1. Build the images:
sh ./deploy-all.sh --image-build --skip-infrastructure --skip-service
Step 2. Push the images to the local registry:
sh ./deploy-all.sh --image-push --skip-clean --skip-service --skip-infrastructure
Step 3. Deploy the infrastructure using helm for secret
, pvc
, rabbitmq
, mailhog
, postgresql
:
sh ./deploy-all.sh --skip-clean --skip-service
Step 4. Deploy the services, including identity server
, graphql gateway
, api gateway
, masterdata api
, personaldata api
, portal api
, communication
, services status
:
sh ./deploy-all.sh --skip-clean --skip-infrastructure
Step 5. Checking the status of the components:
kubectl get pods --namespace=local
kubectl get services --namespace=local
After all the pods are running, you can access the services via the following URLs:
- GraphQL Gateway: http://localhost:31100/graphql
- Identity Server: http://localhost:31101