#import "../Helpers/code-snippets.typ": code

#pagebreak()
== Ausführen der Applikation
=== Vorausssetzungen
Das Ausführen der Applikation hat folgende Vorausssetzungen:
- Container Registry (fürs Pushen und Pullen der Frontend und Backend Images)
- Kubernetes Cluster (fürs Deployen der Frontend und Backend Pods)
- Traefik Ingress Controller im Kubernetes Cluster (fürs Routen der Anfragen an die richtigen Services und Basic Auth)
- PostgreSQL Datenbank (fürs Speichern der Daten)
- Bash mit `docker` (eingeloggt auf Container Registry) und `kubectl` (konfiguriert auf Kubernetes Cluster) installiert
=== Deployment
Um die Applikation zu deployen, müssen folgende Schritte durchgeführt werden:
1. Images bauen mithilfe der Dockerfiles im `frontend` und `backend` Verzeichnis und in die Container Registry pushen.
#code(numbers: true)[```bash
export CI_REGISTRY_IMAGE= # z.B. registry.example.com/repository
export VERSION_BACKEND= # z.B. 1.0
export VERSION_FRONTEND= # z.B. 1.0
cd backend/
docker build -t ${CI_REGISTRY_IMAGE}/backend:${VERSION_BACKEND} .
docker push ${CI_REGISTRY_IMAGE}/backend:${VERSION_BACKEND}
cd ../frontend/
docker build -t ${CI_REGISTRY_IMAGE}/frontend:${VERSION_FRONTEND} .
docker push ${CI_REGISTRY_IMAGE}/frontend:${VERSION_FRONTEND}
```]
2. Deployment Umgebungsvariablen setzen
#code(numbers: true)[```bash
export BASIC_AUTH_PASSWORD= # Basic Auth Passwort bei POST/DELETE Requests an API
export BASIC_AUTH_USERNAME= # Basic Auth User bei POST/DELETE Requests an API
export CI_DEPLOY_PASSWORD= # Passwort fürs Pullen der Images
export CI_DEPLOY_USER= # User fürs Pullen der Images
export CI_REGISTRY= # Registry fürs Pullen der Images, z.B. registry.example.com
export DB_HOST= # Hostname/IP der PostgreSQL Datenbank
export DB_NAME= # Name der PostgreSQL Datenbank
export DB_PASSWORD= # Passwort der PostgreSQL Datenbank
export DB_PORT= # Port der PostgreSQL Datenbank
export DB_USER= # Benutzername der PostgreSQL Datenbank
export HOST= # Externer Hostname der Site Pulse 360 Applikation
```]
3. Kubernetes Deployment ausführen
#code(numbers: true)[```bash
kubectl create ns site-pulse-360
kubectl create secret docker-registry registry-gitlab-diller --docker-server ${CI_REGISTRY} --docker-username ${CI_DEPLOY_USER} --docker-password ${CI_DEPLOY_PASSWORD} -n site-pulse-360
for folder in kubernetes/*; do cat $folder/* | envsubst | kubectl apply -f -; done
```]