Docker compose and README

This commit is contained in:
Manuel Hude 2021-01-16 17:45:08 +01:00
parent 5012c8943f
commit c7e58cad59
10 changed files with 22111 additions and 26 deletions

10
.env Normal file
View File

@ -0,0 +1,10 @@
# Add anything that might need to be configured here
COMPOSE_PROJECT_NAME=AIC_G4T2
# Externally exposed ports (i.e. ports mapped on host system)
MONGO_DB_PORT=27017
FRONTEND_PORT=8080
DATA_PATH= /aic/g2/

15
Makefile Normal file
View File

@ -0,0 +1,15 @@
# If you want you can use this Makefile to specify debug commands, test scripts, etc.
# Some examples below
start:
docker-compose build && docker-compose up -d
restart:
docker-compose restart
build:
docker-compose build
purge:
docker-compose down -v --rmi all --remove-orphans

View File

@ -1,4 +1,57 @@
# AIC Federated Storage Project # AIC Federated Storage Project
* Start both middleware AND frontend dev server simultaneously ## Teammembers
* See README of subfolder for further information
+ Tobias Eidelpes (01527193)
+ Manuel Hude (01502712)
+ Martin Schett (01633073)
+ Martin Weick (01627760 )
+ Marco Zeisler (0162830)
## Who worked on what?
+ Tobias Eidelpes - Update Functionality, Docker Deployment, AWS Config, Presentation 2
+ Manuel Hude - Mongo DB CRD, Parts IoT Client, Docker Deployment, Presentation 1
+ Martin Schett - IoT Client, Recovery Logic, AWS Config, Presentation 1
+ Martin Weick - AWS Service, IoT Client Simulation, Presentation 2
+ Marco Zeisler - Hashing, User Frontend, Presentation 2
## How to start the program
* In the project root run: `docker-compose up -d`
* Go to `http://localhost:8080` for the frontend
* Run `docker ps` to see the container ID of the image aic_g4t2_iot_client
* Enter `docker exec -it <ContainerID> /bin/bash` to enter the shell of the iot_client
* Get a usage message by entering `help`
## Technologies used
* Python 3.8.6 with Django for the backend
* Angular 9 for the frontend
* Dropbox API for an image storage
* AWS S3 as an object storage
* MongoDB as a metadata storage
## Detailed description of a usecase
Follow: [How to start the program](#How-to-start-the-program) to setup the program. To simulate that a device sent some
picture enter `trigger` into the iot_client. You can now see the pictures distributed over the
different storages. Write `set 0` to position the cursor to the first image sent. Issue `update` to update the image.
The new image shows up in the dashboand and a new version in the corresponding storages is created. Navigate to the Map
in the frontend to see a location marker where the image was taken.
## Credentials for AWS and Dropbox
### AWS
* Login URL: https://www.awseducate.com/student/s/
* Mail: e1633073@student.tuwien.ac.at
* Passwort: OH2uMfNTwlOYBB364zqf!
* Bucket: https://s3.console.aws.amazon.com/s3/buckets/aic-fun-bucket-2020?region=us-east-1&tab=objects
### Dropbox
* Username: e01633073@student.tuwien.ac.at
* Password: aicdropboxpassword

51
docker-compose.yml Normal file
View File

@ -0,0 +1,51 @@
version: "3"
services:
mongo_db:
image: mongo
restart: always
container_name: mongodb
volumes:
- db-data:/data/db
ports:
- 27017:27017
middleware:
container_name: middleware
build:
context: ./middleware
dockerfile: ./Dockerfile
command: python manage.py runserver 0.0.0.0:8000
ports:
- 8000:8000
depends_on:
- mongo_db
frontend:
container_name: frontend
build:
context: ./frontend
dockerfile: ./Dockerfile
ports:
- 8080:80
depends_on:
- mongo_db
iot_client:
container_name: iot_client
build:
context: ./iotclient
dockerfile: ./Dockerfile
depends_on:
- frontend
- middleware
stdin_open: true # docker run -i
tty: true # docker run -t
volumes:
- /aic/g2:/code/images_real
volumes:
db-data: # db-data is a volume that will be generated by docker compose

21980
frontend/package-lock.json generated

File diff suppressed because it is too large Load Diff

16
iotclient/Dockerfile Normal file
View File

@ -0,0 +1,16 @@
FROM python:3.8-slim
ENV PYTHONUNBUFFERED 1
RUN python -m venv /opt/venv
ENV PATH="/opt/venv/bin:$PATH"
RUN python -m pip install --upgrade pip
ENV PATH="/opt/venv/bin:$PATH"
RUN mkdir /code
WORKDIR /code
COPY requirements.txt /code/
RUN pip install -r requirements.txt
COPY . /code/

View File

@ -36,7 +36,7 @@ def send_image(identifier, image_path, metadata_payload):
return False return False
file_payload = file_encoded_b64.decode('utf-8') file_payload = file_encoded_b64.decode('utf-8')
baseurl = "http://127.0.0.1:8000" baseurl = "http://middleware:8000"
post_url = "/image/post" post_url = "/image/post"
body = build_post_payload(identifier, metadata_payload, file_payload) body = build_post_payload(identifier, metadata_payload, file_payload)

View File

@ -0,0 +1 @@
requests

View File

@ -17,3 +17,5 @@ COPY requirements.txt /code/
RUN pip install -r requirements.txt RUN pip install -r requirements.txt
COPY . /code/ COPY . /code/
EXPOSE 8000

View File

@ -14,7 +14,8 @@ class MongoManager:
if MongoManager.__instance != None: if MongoManager.__instance != None:
raise Exception("This class is a singleton!") raise Exception("This class is a singleton!")
else: else:
MongoManager.__instance = pymongo.MongoClient('127.0.0.1', port=27017, serverSelectionTimeoutMS=1000) print("TEST IM MANAGER")
MongoManager.__instance = pymongo.MongoClient('mongodb://mongo_db', port=27017)
db = MongoManager.__instance.AIC db = MongoManager.__instance.AIC
coll = db.metadata coll = db.metadata
db.coll["identifier"] db.coll["identifier"]