Using virtualisation to effect portable building and deployment of software applications
This project demonstrates the use of virtualization technologies to build and deploy a portable software application designed for job seekers. Our application, the Job Application Tracker, helps students and job seekers efficiently manage their job search process. It operates across three different virtual machines (VMs), showcasing the power of distributed systems and cloud-ready software development practices.
The Job Application Tracker allows users to record and monitor the companies and roles they've applied to, including key information such as application status, submission dates and additional notes.
- Frontend: React.js & Tailwind CSS
- Backend: Python Flask REST API
- Database: Supabase
.github/workflows- Contains the GitHub Actions workflow for CI/CDfrontend- Contains the React frontend projectbackend- Contains the Python Flask backend projectdatabase- Contains the Supabase database configuration
Running the project locally requires Docker to be installed on your machine.
- Clone the Repository using the following command:
git clone https://github.com/JamesRobionyRogers/Assignment01-VirtualisingSoftware.git- Change into the project directory:
cd Assignment01-VirtualisingSoftware- Build and run the Job Tracker:
docker compose build
docker compose up -d- Access the application via the following URLs:
- Job Tracker Application:
http://localhost:80 - Supabase Studio Dashboard:
http://localhost:8000 - Python Flask API:
http://localhost:5001
- Shut down the Job Tracker:
docker compose downThis projects is build utilising three containers. The containers are as follows:
- Frontend Tier: This container hosts the React.js application interface via nginx.
- Backend Tier: This container runs the Python Flask REST API.
- Database Tier: The database tier is a collection of services running in containers that run make up the Supabase database and its services.
By separating the application into different containers, we can achieve a modular design where each container handles a distinct aspect of the application. This setup enhances scalability, maintenance, and isolation of services.
The containers are all connected via the backend container. Http requests are sent between the containers to allow them to communicate.
The project uses Docker Compose to manage the setup of all necessary services. The docker-compose.yml file in the root directory defines the services required to run the application. After the initial setup, the application will preload test data for demonstration purposes.
Through the build process, the application will automatically download and configure all required components. For a fresh build, this involves downloading Docker images and setting up containers, with approximate download volumes specified in the project report.
The application comes preloaded with example data to demonstrate its functionality. The example data includes two users, each with their own applications. The users are as follows:
| Name | Email Address | Password |
|---|---|---|
| John Doe | john.doe@example.com | password123 |
| Jane Smith | jane.smith@example.com | password123 |
The Job Application Tracker is a versatile application that can be extended in various ways. Below are links to the various tiers README files to get up to speed with development on the project.
