118 lines
2.3 KiB
Markdown
118 lines
2.3 KiB
Markdown
|
# Overview of the APP
|
||
|
|
||
|
This is a product management application for admin. Here you can upload, edit, delete products. Probably a front-end
|
||
|
will show these products to the user if future.
|
||
|
|
||
|
*Edit functionality is not implemented at this moment*
|
||
|
|
||
|
![homepage](images/product-manager-homepage.png?raw=true "System Architecture")
|
||
|
|
||
|
# Requirements
|
||
|
|
||
|
The basic system requirements are as follows
|
||
|
|
||
|
- Any OS, preferably Linux
|
||
|
- Docker
|
||
|
- Docker compose
|
||
|
|
||
|
# Architecture
|
||
|
|
||
|
![System design diagram](images/product-manager.jpg?raw=true "System Architecture")
|
||
|
|
||
|
### Technology used
|
||
|
|
||
|
- Django (Backend Rest API)
|
||
|
- React (Frontend)
|
||
|
- Postgres - as persistent database
|
||
|
|
||
|
# Docker environment
|
||
|
|
||
|
For shipping and deploying the application docker-compose is used. All the configurations are in the docker-compose.yml
|
||
|
file.
|
||
|
|
||
|
Key points of the docker-compose.yml is given below.
|
||
|
|
||
|
## services
|
||
|
|
||
|
- **backend:** runs the Django web API.
|
||
|
- **db** runs the postgres database required for the backend API
|
||
|
- **web** this is the service for front-end application
|
||
|
|
||
|
## Virtual networks
|
||
|
|
||
|
One virtual network is used
|
||
|
|
||
|
- main
|
||
|
|
||
|
## Volumes
|
||
|
|
||
|
For persisting the data of the db container docker volume bind is used.
|
||
|
|
||
|
- pg-data
|
||
|
|
||
|
## list of the containers
|
||
|
|
||
|
### product-manager-backend
|
||
|
|
||
|
This container runs under the service name backend. The dockerfile user for this container is located
|
||
|
at `product-manager-backend/Dockerfile`. This container is based on python:3.9 image.
|
||
|
|
||
|
### product-manager-frontend
|
||
|
|
||
|
The frontend container for the application. The dockerfile is located
|
||
|
at `product-manager-frontend/.docker/dev/Dockerfile`. Base image used to build this container is `Node:14`.
|
||
|
|
||
|
### db container
|
||
|
|
||
|
The container is built using the official `postgres:latest` image pulled from dockerhub.
|
||
|
|
||
|
## Preparation
|
||
|
|
||
|
To prepare the environment for the first time run the following command
|
||
|
|
||
|
```shell
|
||
|
bash prepare-app.sh
|
||
|
```
|
||
|
|
||
|
## Running
|
||
|
|
||
|
Run the app background
|
||
|
|
||
|
```shell
|
||
|
bash start-app.sh
|
||
|
```
|
||
|
|
||
|
see the logs of backend
|
||
|
|
||
|
```
|
||
|
docker-compose logs -f backend
|
||
|
```
|
||
|
|
||
|
see the logs of forntend
|
||
|
|
||
|
```
|
||
|
docker-compose logs -f web
|
||
|
```
|
||
|
|
||
|
see the logs of database
|
||
|
|
||
|
```
|
||
|
docker-compose logs -f db
|
||
|
```
|
||
|
|
||
|
## Stopping
|
||
|
|
||
|
```shell
|
||
|
bash stop-app.sh
|
||
|
```
|
||
|
|
||
|
## Removing containers
|
||
|
|
||
|
```shell
|
||
|
bash remove-app.sh
|
||
|
```
|
||
|
|
||
|
# Viewing the app
|
||
|
|
||
|
After running the app. visit [http://localhost:3000](http://localhost:3000) to view the app
|