Skip to content
Snippets Groups Projects
Commit a227536c authored by schnarkus's avatar schnarkus
Browse files

Merge branch 'main' into dev

parents ecefbf90 9056aa49
No related branches found
No related tags found
No related merge requests found
Pipeline #68920 passed
......@@ -4,8 +4,19 @@ FROM ubuntu:22.04
COPY artifact.bin /artifact.bin
# Set more environment variables for the web service
ENV VERSION=1.0.0
ENV FONT_COLOR=blue
ENV LOG_LEVE=error
ENV ENV_NAME=development
ENV HOST=0.0.0.0
ENV PORT=8080
ENV DB_HOST=redis_container
ENV DB_PORT=6379
ENV DB_NAME=0
ENV DB_USERNAME=
ENV DB_PASSWORD=
EXPOSE 8080
CMD ["/artifact.bin"]
Lifecycle.png

56.7 KiB | W: | H:

Lifecycle.png

208 KiB | W: | H:

Lifecycle.png
Lifecycle.png
Lifecycle.png
Lifecycle.png
  • 2-up
  • Swipe
  • Onion skin
......@@ -2,9 +2,16 @@
## Technologiewahl
- **Programmiersprache**: Go
- **Container-Runtime**: Podman
- **CI/CD**: GitLab
- **Go**:
Vorgegebene Programmiersprache für den Webservice.
- **GitLab CI/CD**:
Das Hochschul-GitLab bietet die Infrastruktur für die CI/CD-Pipeline, inklusive Container-Registry und Quellcode-Verwaltung.
- **Podman**:
Container-Runtime zur Verwaltung, ähnlich wie Docker, jedoch auch ohne Administratorrechte benutzbar.
- **Kubernetes**:
Plattform für Cluster- und Pod-Management, Schnittstelle zur Google Cloud sowie zahlreiche Dienste wie Redis und integrierte Dashboards zur Überwachung der Systeme.
- **OpenTofu**:
Management-Tool für deklarative Infrastrukturverwaltung, ermöglicht idempotenten Aufbau der Zielstruktur.
## Umgebungen
......@@ -33,8 +40,8 @@ Die Produktivumgebung des Webservice wird auf der Google Cloud Platform (GCP) ge
- **Netzwerk**: `devops24-network`
- **Subnetz**: `devops24-subnetwork`
- **Kubernetes Deployment**: Deployment mit drei Replikaten
- **LoadBalancer-Service**: Zugang über IPv4 und IPv6
- **Ingress-Controller**: Nginx
- **LoadBalancer-Service**: Lastverteilung auf mehrere Pods oder Dienste im Cluster
- **Ingress-Controller (Nginx)**: Routen von eingehendem HTTP(S)-Verkehr im Cluster
- **Datenbank**: Für die Persistenz wird Redis verwendet, welches in einer separaten Compute Engine-Instanz innerhalb der GCP-Umgebung betrieben wird.
......@@ -43,7 +50,7 @@ Die Produktivumgebung des Webservice wird auf der Google Cloud Platform (GCP) ge
Die Konfiguration für den Build des Webservices erfolgt in der GitLab CI/CD-Pipeline. Diese Pipeline unterscheidet die Stages Test, Build und Publish und wird bei Merge-Requests oder Pushes auf die Branches `main`, `dev` oder `prod` aktiviert.
- **Test**: Durchführung von Tests mit dem Docker-Image `golang:1.21`
- **Build**: Erstellung des Webservice-Binaries für `linux_amd64` und Speicherung der Artefakte in der Package Registry
- **Build**: Erstellung des Webservice-Binaries für `linux_amd64` und Speicherung der Artefakte in der Container Registry
- **Publish**: Veröffentlichung des Docker-Images in der Container Registry mit Versionierung auf der Basis der Pipeline-ID
## Lifecycle
......@@ -56,5 +63,5 @@ Die Konfiguration für den Build des Webservices erfolgt in der GitLab CI/CD-Pip
## Weitere Konfigurationen
- **Monitoring**: Die Anwendung wird mithilfe von GCP-Monitoring überwacht.
- **Sicherheit**: TLS-Terminierung erfolgt durch ein selbstsigniertes Zertifikat in der Entwicklungsumgebung.
- **DNS**: In der Entwicklungsumgebung wird die DNS-Auflösung in der `/etc/hosts`-Datei konfiguriert; es wird überprüft, ob die Seite über einen Alias per HTTPS verfügbar ist.
- **TLS**: Wird wie DNS nur in der Entwicklungsumgebung konfiguriert. Durch ein selbstsigniertes Zertifikat erfolgt die Kommunikation über Nginx, welches den HTTPS-Traffic auf Port 8443 leitet.
- **DNS**: In der `/etc/hosts`-Datei konfiguriert; es wird überprüft, ob die Seite über einen Alias per HTTPS verfügbar ist.
#!/bin/bash
REDIS_CONTAINER_NAME="redis_container"
REDIS_PORT="6379"
# Stop and remove old Redis container
podman stop $REDIS_CONTAINER_NAME
podman rm -f $REDIS_CONTAINER_NAME
# Pull Redis images
podman pull redis
podman pull redis-server
# Run Redis container with persistent storage
podman run -d \
-v ./redis/data:/usr/local/etc/redis \
-p $REDIS_PORT:$REDIS_PORT \
--name $REDIS_CONTAINER_NAME \
redis redis-server --save 60 1 --loglevel warning
echo "Redis setup complete..."
#Look inside
#podman exec -it redis_container redis-cli
#KEYS *
#GET state:bar
#KEYS state:*
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment