Dieses Projekt ist als Prüfungsleistung im Rahmen des Moduls "Programmierprojekt" entstanden. Es repräsentiert die Leistung des Backend-Teams. Das Projekt stellt eine API bereit, mit der Datenpunkte mithilfe des Clustering-Algorithmus gruppiert werden können. Benutzer können ihre Daten in Form von Excel-Dateien hochladen, und die API gibt die geclusterten Datenpunkte zurück.
- Voraussetzungen
- Installation und Einrichtung
- Repository-Struktur
- Deployment
- API-Dokumentation
- Technologie-Stack
- Konfigurationsmanagement
- Beispielhaftes Bildmaterial
- Docker und Docker Compose: Zum Containerisieren der Anwendung.
- LazyDocker: Ein einfacher Terminal-UI für Docker (wird in der ./deploy.sh mitgeliefert).
Hinweis für Windows-Nutzer: Die Anwendung funktioniert nur unter Windows Subsystem for Linux (WSL). Sie können WSL mithilfe der offiziellen Dokumentation von Microsoft installieren und einrichten.
git clone https://github.com/axellotl22/progback
cd progback
Progback/
│
├── app/ # Hauptanwendungsverzeichnis
│ ├── routers/ # FastAPI-Endpunkte und Router
│ ├── models/ # Datenmodelle, Pydantic-Schemata
│ ├── services/ # Business-Logik, Dienstprogramme und Hilfsfunktionen
│ ├── database/ # Datenbankverbindung
│ ├── entitys/ # Datenbank Modelle für die App
│ └── main.py # Hauptanwendungsdatei (FastAPI-Instanz)
│
├── temp_files/ # Verzeichnis für temporäre Dateien (z.B. hochgeladene Dateien)
│
├── notebooks/ # Jupyter-Notebooks für Datenanalyse und Prototyping
│
├── tests/ # Testverzeichnis mit Testfällen und Fixtures
│
├── .github/ # GitHub-spezifische Dateien
│ └── workflows/ # CI/CD-Workflows und Automatisierungsskripte
│
├── deploy.sh # Skript für die automatisierte lokale Bereitstellung
├── docker-compose.yml # Docker-Compose-Konfigurationsdatei
├── Dockerfile # Docker-Konfigurationsdatei für den Anwendungscontainer
├── .gitignore # Liste von Dateien/Verzeichnissen, die von Git ignoriert werden
├── .env.example # Beispiel- und Vorlagendatei für Umgebungsvariablen
├── requirements.txt # Liste der Python-Abhängigkeiten
└── README.md # Dokumentation und allgemeine Projektinformationen
Ein Deployment der Clustering-API kann auf verschiedene Arten erfolgen. In diesem Abschnitt werden die Verfahren für die Verwendung von Docker, Docker Compose und dem bereitgestellten deploy.sh
-Skript beschrieben.
Docker ermöglicht es Ihnen, Ihre Anwendung in einem isolierten Container auszuführen. Um Ihre Anwendung mit Docker zu deployen, führen Sie die folgenden Schritte aus:
-
Erstellen Sie das Docker-Image:
docker build -t clustering-api --build-arg DEV_MODE=True .
-
Starten Sie den Container:
docker run -p 8080:8080 --env-file .env clustering-api
Docker Compose ermöglicht die Definition und den Betrieb von Multi-Container Docker-Anwendungen. Um die Clustering-API mit Docker Compose zu deployen, gehen Sie wie folgt vor:
# Erstellen Sie die Docker-Images und starten Sie die Container
docker-compose --env-file .env up --build
Das deploy.sh-Skript ist ein hilfreiches Werkzeug, das die Einrichtung und das Deployment der Clustering-API automatisiert. Um dieses Skript zu verwenden:
# Stellen Sie sicher, dass das Skript ausführbar ist
chmod +x deploy.sh
# Führen Sie das Skript aus:
./deploy.sh
Das Skript wird automatisch LazyDocker installieren (wenn es noch nicht installiert ist), alle bestehenden Container stoppen, neue Images erstellen, die Container starten und anschließend LazyDocker für die Containerüberwachung ausführen.
Die RESTful Webservice-API wird über Swagger dokumentiert. Die Dokumentation kann auf der folgenden URL aufgerufen werden: http://localhost:8080/docs
Bibliotheken: Einige der Schlüsselbibliotheken, die in diesem Projekt verwendet werden, sind:
- Pandas
- Numpy
- Scikit-learn (sklearn)
- SQLAlchemy
- Numba
-
.env Datei erzeugen:
cp .env.example .env
-
Umgebungsvariablen konfigurieren:
# Umgebungsvariablen konfigurieren TEST_MODE=False DEV_MODE=True # Database Config DB_HOST= DB_PORT= DB_PW= DB_SCHEMA= # User Config APP_SECRET= VERIFICATION_SECRET=
- column1, column2, column3 : 0, 1, 2
- distance_metric: EUCLIDEAN
- k_clusters : 3 (vorgegeben)
- kmeans_type: OptimizedKMeans
- normalize: True
- column1, column2, column3 : 0, 1, 2
- distance_metric: EUCLIDEAN
- kmeans_type: OptimizedKMeans
- normalize: True