Profio Application is a monorepo project built with Nx technology. It is a set of extensible dev tools for monorepos, which helps you develop like Google, Facebook, and Microsoft.
- Overview
- Tentative technologies
- Building blocks
- Screenshots
- Getting Started
- API development
- Open API
- Dependency Graph
- CI/CD
- External services
- Our Presentation
- Contributing
- Contributors
- Support and Organization
- License
- Project Reference
Profio - the symbol of professionalism in transportation management. Whether you need a solution for managing a fleet of vehicles or ships, Profio provides a powerful tool, optimizing and simplifying the process, ensuring every movement is quick, safe, and efficient.
This is a product of the CJ Code your Future 2023 contest. The purpose of this project is to help CJ Logistics improve the quality of transportation management. All components in the project are free. This project is not for commercial purposes 👍
We are a group of students from Hutech University. We are very happy to be able to participate in this contest. We hope that our project will be useful to CJ Logistics and CJ Olive Networks Vina in the future 🤝
📑 Read documentation for more information about the project.
If you want to find out more about the contest, please visit the CJ Code Your Future from the Hutech IT Fanpage.
- Next.js 13
- ASP.NET Core
- Flutter 3.13
- Python 3.11
- RabbitMQ
- Redis
- PostgreSQL
- EMQX
- DeepSource
- Github Action
- Keycloak
- K8s, Helm
- Teraform
- Bicep
- OpenTelemetry
- Grafana, Prometheus, Jaeger, Seq, Zipkin
Name | Usecase | Technology |
---|---|---|
CMS |
It will show the information of orders, vehicles, drivers, and other information related to the transportation process. It will also provide a dashboard for managers to monitor the transportation process. |
Next.js |
Customer Website |
It will provide pages for customers look up the information of orders. It will also provide a table for customers to see the history of orders. |
Blazor Server |
Load Balancer |
It will distribute the load to the available servers. It will also provide a dashboard for managers to monitor the load of the servers. |
YARP |
Driver App |
It provides a dashboard for drivers to monitor the transportation process. It will send the location of the vehicle to the server. |
Flutter |
MQTT Broker |
It will receive the location of the vehicle from the driver app and send it to the server. |
EMQX |
Identity Server |
It will manage the users of the application. It will also provide a dashboard for managers to manage the users. We have set up the SSO for the application. |
Keycloak |
API Server |
It will receive the location of the vehicle from the MQTT Broker and send it to the database. It will also send the information of orders, vehicles, drivers, and other information related to the transportation process to the client. |
ASP.NET Core |
Database |
It will store the information of orders, vehicles, drivers, and other information related to the transportation process. We use Redis to cache the data. |
PostgreSQL, Redis |
OpenTelemetry Collector |
It will receive the telemetry data from the OpenTelemetry. It will send the telemetry data to the OpenTelemetry Processor. |
OpenTelemetry Collector |
Health Check |
It will check the health of the servers. It will send the health status of the servers to the Load Balancer. |
ASP.NET Core |
Exporter |
It will export the telemetry data to the OpenTelemetry Collector. |
Grafana, Prometheus, Jaeger, Seq, Zipkin |
Note If you want to see more, please visit the
Getting Started
section below.
- Nx - Nx is a set of extensible dev tools for monorepos.
- node.js - Node. js® is a JavaScript runtime built on Chrome's V8 JavaScript engine.
- npm - npm is the package manager for the Node JavaScript platform.
- Flutter - Flutter is Google's toolkit for creating sleek apps across mobile, web, and desktop from a single codebase.
- Docker (Kubernetes Enabled) / Podman - Docker is an open platform for app development and management. Podman is a daemonless container engine for OCI Containers on Linux.
- Kubernetes / AKS / Nomad - The container orchestration platform for Kubernetes, AKS, and Nomad.
- Helm - Helm is the best way to find, share, and use software built for Kubernetes.
- Tye - Tye is a tool that makes developing, testing, and deploying applications easier.
- WSL 2 - Ubuntu OS - WSL 2 enables running Linux ELF64 binaries on Windows.
- Visual Studio Code - Visual Studio Code is a code editor for modern web and cloud app development.
- JetBrains Rider / Visual Studio 2022 - JetBrains Rider is a cross-platform .NET IDE built on IntelliJ and ReSharper. Visual Studio is Microsoft's IDE.
- .NET Core 7 - .NET Framework and .NET Core, including ASP.NET and ASP.NET Core.
- Python - Python is a programming language that lets you work quickly and integrate systems more effectively.
- Render - Render is a unified platform for apps and websites with free SSL, global CDN, private networks, and Git auto-deploys.
- Redis Labs - Redis Labs is the home of Redis, the world’s most popular in-memory database.
- Azure - Azure is an ever-expanding set of cloud computing services to help your organization meet its business challenges.
- CloudAMQP - CloudAMQP automates RabbitMQ setup, running, and scaling on all major platforms.
- EMQX - EMQ X Broker is an open-source, scalable MQTT messaging broker for IoT, M2M, and mobile apps, handling millions of concurrent clients.
- Google Cloud Platform - Google Cloud Platform (GCP) is a suite of cloud services running on the same infrastructure as Google's user products like Search, Gmail, and YouTube.
- Supabase - Supabase is an open-source alternative to Firebase that adds real-time and RESTful APIs to your PostgreSQL database without any coding.
- Twilio - Twilio is a cloud communications platform as a service company based in San Francisco, California.
First, clone the repository to your local machine:
git clone https://github.com/HutechCJ/ProfioApp.git
Next, navigate to the root directory of the project and install the dependencies:
npm install --force
To learn more about the project, please visit the Wiki
For the CMS, navigate to the apps/cms
directory and run the following command:
npx nx serve cms --verbose
It will open the CMS in your browser at http://localhost:4200/.
For the API, navigate to the apps/Profio.Api
directory and run the following command:
npx nx serve Profio.Api --verbose
It will open the API in your browser at http://localhost:9023/.
For the Proxy, navigate to the apps/Profio.Proxy
directory and run the following command:
npx nx serve Profio.Proxy --verbose
It will open the Proxy in your browser at http://localhost:7221/.
For the Web App, navigate to the apps/Profio.Website
directory and run the following command:
npx nx serve Profio.Website --verbose
It will open the Web App in your browser at http://localhost:5272/.
For the documentation, navigate to the apps/docs
directory and run the following command:
npx nx serve docs --verbose
It will open the documentation in your browser at http://localhost:3000/.
For the Driver App, navigate to the apps/profio-app
directory and run the following command:
npx nx serve profio-app --verbose
For running all applications, navigate to the root directory of the project and run the following command:
npx nx run-many --target=serve --all
For running by tye
, navigate to the root directory of the project and run the following command:
tye run --dashboard
Warning All connections strings will be unavailable when this repository is public.
For running all external services, navigate to the root directory of the project and run the following command:
podman-compose|docker-compose up -d
For running api
& proxy
, navigate to the root directory of the project and run the following command:
# Pull the latest images
docker pull ghcr.io/hutechcj/profio-api:latest
docker pull ghcr.io/hutechcj/profio-proxy:latest
docker pull ghcr.io/hutechcj/profio-cms:latest
docker pull ghcr.io/hutechcj/profio-webiste:latest
# Run the containers
docker run -d -p 5023:80 ghcr.io/hutechcj/profio-api:latest
docker run -d -p 7221:80 ghcr.io/hutechcj/profio-proxy:latest
docker run -d -p 4200:80 ghcr.io/hutechcj/profio-cms:latest
docker run -d -p 5272:80 ghcr.io/hutechcj/profio-webiste:latest
We use Clean Architecture for the API development. You can read more about Clean Architecture here. The CQRS and Mediator patterns are also used in the API development. Besides, we also use some design patterns such as: Repository Pattern, Unit of Work, Specification Pattern, Inversion of Control / Dependency injection, Options Pattern.
Clean Architecture
CQRS with Mediator
Note We have implemented Redoc to generate the API documentation.
You can see the dependency graph of the project by running the following command:
npx nx dep-graph
Here is the dependency graph of the project, generated by Nx:
We used the Portainer service to manage the containers. Portainer is an open-source lightweight management UI which allows you to easily manage your Docker environments.
For the API health check, We have used the ASP.NET Core Health Checks library to monitor the health of the application. The health check endpoint is exposed at /hc or /hc-ui and can be accessed via HTTP GET.
For the monitoring service, We have used the Prometheus and Grafana services to collect and analyze metrics.
For the tracing service, We have used the Jaeger service to collect and analyze traces.
We also set up the Zipkin service to collect and analyze traces.
We set up the seq service to collect and analyze logs.
For the database management service, We have used the PgAdmin service to manage the PostgreSQL database.
For the identity server, We have used the Keycloak service to manage the users. With SSO, you can log in to multiple applications with a single account. You can also use Keycloak to manage the users of your applications.
We have presented our project at the school-level finals and the city-level finals of the Code Your Future competition. We also presented our project at the final round of the Code Your Future competition.
- The school-level finals of the Code Your Future competition
- The city-level finals of the Code Your Future competition
- Project Proposal
Wanna be here? Contribute.
- Fork this repository.
- Create your new branch with your feature:
git checkout -b my-feature
. - Commit your changes:
git commit -am 'feat: My new feature'
. - Push to the branch:
git push origin my-feature
. - Submit a pull request 👌.
Thanks goes to these wonderful people (emoji key)
Xuan Nhan |
Hong Thai |
Truong Nhon |
Tien Dat |
Thuc Van |
This project is made available under the MIT license. See the LICENSE file for details