From b59a74645f4dc813ea02f6fc4b88071bf33ad75a Mon Sep 17 00:00:00 2001 From: michivonah Date: Tue, 22 Apr 2025 14:49:44 +0200 Subject: [PATCH] implement cors + add Dockerfile for frontend + compose --- docker-compose.yml | 44 +++++++++++++++++++++++++++++++++++++++ frontend/Dockerfile | 12 +++++++++++ webservice/Dockerfile.txt | 6 +++--- webservice/webservice.py | 16 +++++++++++++- 4 files changed, 74 insertions(+), 4 deletions(-) create mode 100644 docker-compose.yml create mode 100644 frontend/Dockerfile diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..c88ee6b --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,44 @@ +services: + db: + image: postgres:17.4 + restart: unless-stopped + volumes: + - ./db:/var/lib/postgresql/data + ports: + - 5432:5432 + environment: + - POSTGRES_USER=bbzw-horizon + - POSTGRES_DB=bbzw-horizon + - POSTGRES_PASSWORD= + + + webservice-inp21b: + build: + dockerfile: Dockerfile + context: /app/webservice-inp21b + restart: unless-stopped + ports: + - 8080:8080 + environment: + - DB_CONNECTION_STRING=postgresql://bbzw-horizon:@db/bbzw-horizon + + frontend: + build: + dockerfile: Dockerfile + context: /app/frontend + restart: unless-stopped + ports: + - 5173:5173 + + grafana-inp21b: + image: grafana/grafana:latest + ports: + - "3000:3000" + environment: + - GF_DATABASE_TYPE=sqlite3 + - GF_DATABASE_SQLITE3_PATH=/var/lib/grafana/grafana.db + volumes: + - ./grafana-inp21b:/var/lib/grafana + restart: unless-stopped + user: 0:0 + diff --git a/frontend/Dockerfile b/frontend/Dockerfile new file mode 100644 index 0000000..463a603 --- /dev/null +++ b/frontend/Dockerfile @@ -0,0 +1,12 @@ +FROM node:22-alpine + +RUN mkdir app +WORKDIR /app/ + +COPY git/ . + +RUN npm install + +EXPOSE 8080 + +CMD [ "npm", "run", "dev", "--", "--host", "0.0.0.0" ] \ No newline at end of file diff --git a/webservice/Dockerfile.txt b/webservice/Dockerfile.txt index ae089ce..13b5cb8 100644 --- a/webservice/Dockerfile.txt +++ b/webservice/Dockerfile.txt @@ -23,8 +23,8 @@ COPY webservice.py . COPY crypto.py . COPY dbfunctions.py . COPY models.py . -COPY certs/key.pem . -COPY certs/cert.pem . +COPY certs/server.key . +COPY certs/server.crt . # Start app -CMD ["uvicorn", "webservice:app", "--host", "0.0.0.0", "--port", "8443", "--ssl-keyfile=key.pem", "--ssl-certfile=cert.pem"] \ No newline at end of file +CMD ["uvicorn", "webservice:app", "--host", "0.0.0.0", "--port", "8443", "--ssl-keyfile=server.key", "--ssl-certfile=server.crt"] \ No newline at end of file diff --git a/webservice/webservice.py b/webservice/webservice.py index 2e26564..ab489f7 100644 --- a/webservice/webservice.py +++ b/webservice/webservice.py @@ -3,6 +3,7 @@ ################ IMPORTS ################ from fastapi import FastAPI, Depends, HTTPException, Header, Body, Query +from fastapi.middleware.cors import CORSMiddleware from sqlmodel import Session from dbfunctions import List, Optional, get_db, save_sensor_data, get_client_id_by_name, validate_token_with_access, engine, save_token_to_db, get_recent_sensor_data, get_all_clients from models import SensorDataIn, SensorData, MessageOnly, User, Client, ClientCreate, TokenResponse, Session as SessionModel @@ -14,7 +15,20 @@ app = FastAPI( title="BBZW-Horizon", description="BBZW-Horizon ist ein Tool, welches entwickelt wurde, um durch die Erfassung und Auswertung von Luftqualitätsmesswerten die Luftqualität in den Schulzimmern des BBZW Sursee zu verbessern. Bei dieser API handelt es sich um die Kommunikationsschnittstelle, zwischen den Arduinos, welche mit Sensoren die Daten erfassen und an die API senden. Diese API speichert die Daten dann in der Datenbank, damit diese durch das Frontend abgerufen und visualisiert werden können.", summary="Die BBZW-Horizon API dient als Kommunikationsschnittstelle, um Luftqualitätsmesswerte von Arduinos, die mit Sensoren ausgestattet sind, zu erfassen", - version="0.0.5" + version="0.0.6" +) + +# CORS +origins = [ + "*", +] + +app.add_middleware( + CORSMiddleware, + allow_origins=origins, + allow_credentials=True, + allow_methods=["*"], + allow_headers=["*"], ) # DB Session