Deliverable: Projektkonzept
Infrastruktur
Die Produktivumgebung des Webservice wird auf der Google Cloud Platform (GCP) gehostet:
-
Details zur Infrastruktur:
- Maschinentyp: e2-small (1 vCPU, 2 GB RAM)
- Region: Berlin (wenn verfügbar, Europa)
- Betriebssystem: Ubuntu 22.04
- Festplatte: 20 GB
- Tags für Firewall: http-server,https-server
Ressourcenmanagement
- Dynamische Zuweisung: Ressourcen werden nach Bedarf zugewiesen und nach Nutzung entzogen, um Google Cloud-Credits effizient zu nutzen
- Skalierung: Compute Engine-Instanzen werden nach Ressourcenbedarf skaliert
Bereitstellungsprozess
- OpenTofu: Deklarative Verwaltung der Cloud-Infrastruktur
- Ansible: Konfigurationsmanagement und Anwendungsbereitstellung
Technologiewahl
- Programmiersprache: Go
- Container-Runtime: Podman
- CI/CD: GitLab
Umgebungen
- Entwicklung: Lokal mit Vagrant
- Produktion: Erweiterte Sicherheitsmaßnahmen und Monitoring
Dienste
- Compute Engine: Hostet VMs für Webservice und Redis-Datenbank
- Cloud Monitoring: Überwacht Leistung, bietet Einblicke in Logs, Metriken und Alarme
Visuelle Hilfsmittel
- Architekturdiagramm: Erstellung mit draw.io
- TODO
CI/CD Pipeline
Die Konfiguration für den Build des Webservices erfolgt in der GitLab CI/CD-Pipeline. Diese unterscheidet die Stages Test, Build und Publish. Bei Merge-Requests oder Pushes auf den main
- oder prod
-Branch wird die Pipeline aktiviert.
- Test: Tests mit golang:1.21 Docker-Image
- Build: Baut Webservice für linux_amd64-Systeme und speichert Artefakte in der Package Registry
- Publish: Veröffentlicht Docker-Container in der Container Registry
Abhängig vom Branch führt die Pipeline Tests aus, erstellt ein Static Binary und veröffentlicht einen Docker-Container, bei welchem die Versionierung auf der Pipeline-ID basiert.
Persistenzschicht (Datenbank)
Für die Persistenz wird Redis verwendet, welches in einer separaten Compute Engine-Instanz innerhalb der GCP-Umgebung betrieben wird.
Die Einrichtung und Konfiguration erfolgt über Ansible.
Lifecycle
-
DEV: Workstation als GitLab Runner: Deploy-Job auf der lokalen Workstation wird durch Registrierung der Workstation als GitLab Runner ausgeführt. Der Runner wird im Hochschul-GitLab registriert und bei Pushes auf den
dev
-Branch getriggert. -
MAIN: Main to Prod: Änderungen vom Hauptzweig (
main
) werden in die Produktionsumgebung (prod
) übernommen - FEATURES: Feature to Prod: Feature-Zweige werden in den Hauptzweig gemerged und schließlich in die Produktionsumgebung überführt
-
Pipeline Trigger: Die Pipeline wird durch Merge-Requests oder Pushes auf
main
,dev
oderprod
aktiviert
Weitere Konfigurationen
- Monitoring: Die Anwendung wird mithilfe von GCP (siehe Dienste) ü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 soll nachgewiesen werden, dass die Seite über einen Alias per HTTPS verfügbar ist