Hinweis: Das Projekt wurde auf GitLab verschoben: GitLab
Das Backend des CO2 Rechner, welcher im Rahmen des Bachelorpraktikums für das Büro für Nachhaltigkeit und das Institut für Fluidsystemtechnik entwickelt wurde.
Dieses Projekt ermöglicht eine Erfassung von CO2 Emissionen von TU Einheiten und anschließende Auswertung.
- Anmeldungssteuerung
- Emissionsberechnung
- Datenbankinteraktionen
Das Backend kann nicht unabhängig betrieben werden.
Das Frontend, welches eine webbasierte Interaktionsseite bietet, ist hier einsehbar: Github
Die Interaktionen zwischen Frontend und Backend sind in einer REST artigen API definiert, welche hier eingesehen werden kann: Github
Das Projekt ist in der Sprache Go geschrieben. Der CO2-Rechner verwendet die folgenden direkten Abhängigkeiten, um die Funktionalität bereitzustellen:
- Go v1.23 - Go Entwicklungssprache
- go chi v5.1.0 - Go Router für HTTP Dienste
- is v1.4.1 - Test Framework
- mongo-driver v1.16.1 - Mongodb Treiber für Go
- lumberjack v2.2.1 - Logger
- gocloak v13.9.0 - Go Keycloak Client
Für das Entwicklungssetup wird eine lokale Installation von Go benötigt. Die Docker Compose Datei enthält die folgenden Container für die Entwicklung:
- MongoDB als Datenbank
- NGINX als Webserver und Reverse Proxy
- Keycloak zur Authentifizierung und Kommunikation mit externen Diensten
- Postgres als Datenbank für Keycloak
Das Frontend und Backend müssen unabhängig von der Docker Compose lokal gestartet werden.
Die default Konfiguration erwartet das Frontend unter localhost:8081
und das Backend unter localhost:3000
.
Fürs Setup muss eine dump der Datenbank in den Ordner development/dump
gelegt werden.
Zusätzlich muss eine config.go
Datei erstellt und in den Ordner config
abgelegt werden.
Ein Beispiel für die config.go
Datei ist in config/config.go.example
zu finden.
Ob das Backend in prod
oder dev
Modus startet, wird über die Variable mode
in main.go
gesteuert.
Die Variable kann entweder manuell oder per symbol substitution während link time gesetzt werden.
Für symbol substitution muss die folgende Flag gesetzt werden:
-ldflags "-X main.mode=dev"
für dev mode-ldflags "-X main.mode=prod"
für prod mode