Architecture and Deployment

High-level Architecture Diagram

Connection between microservices of solution

Description of the Components

Frontend (React)

The frontend of our application is built using React, a popular JavaScript framework for building user interfaces. It is configured to work with Nginx as a reverse proxy server. We use npm run build to compile the React code into optimized static files. These files are then served by Nginx, ensuring efficient delivery of the frontend assets to the users.

Backend (Django)

The backend of our application is developed using Django, a powerful Python web framework. It is deployed using uWSGI, a high-performance application server. Django is run within a virtual environment to manage dependencies and isolate the project's Python environment. This approach ensures a clean and self-contained deployment of the backend application.

Nginx

Nginx is used as a reverse proxy server, handling incoming requests and forwarding them to the appropriate backend services. It acts as an intermediary between the users and the application servers, improving performance and providing additional security features. Nginx is responsible for routing requests to the frontend and backend services based on the defined rules and configurations.

Nginx configuration for Django

SSL Certificate Setup

To secure the communication between our application and its users, we have obtained an SSL certificate using Certbot, a free and open-source tool for managing SSL/TLS certificates. The certificate is configured both in the frontend and backend components. It enables HTTPS encryption, ensuring that data transmitted between the users and the application remains confidential and protected.

AWS EC2 Instance Deployment

Our application is deployed on an AWS EC2 instance, which provides us with scalable and flexible compute resources in the cloud. We have chosen EC2 as our deployment environment to have full control over the virtual server environment, including the operating system, networking, and storage configurations.

Networking Configuration (VPC, Subnets, Security Groups)

Within our AWS environment, we have set up a Virtual Private Cloud (VPC) to isolate our application's network and resources. We have defined subnets to divide the network into smaller segments, ensuring proper separation and network management. Security groups are utilized to control inbound and outbound traffic, enabling fine-grained access control and enhancing network security.

AWS Services Used (CloudWatch, IAM)

We leverage several AWS services to enhance our application's monitoring and security capabilities. CloudWatch is used for collecting and monitoring metrics, logs, and events, providing insights into the performance and health of our application. IAM (Identity and Access Management) is employed to manage access control and permissions, ensuring secure authentication and authorization of users within our AWS environment.

Please refer to the accompanying diagrams and visuals for a better understanding of the architecture and deployment of our application.

Last updated