Skip to content

Beispiel CI/CI nach AWS eines simplen Nginx Image

Notifications You must be signed in to change notification settings

codingluke/bbzbl-modul-324-template

Repository files navigation

BBZBL Modul 324: Web-Applikation Template

Beispiel einer CI/CD Pipeline in die AWS Academy Umgebung.

  • Es wird die AWS Umgebung mit Hilfe von Terraform aufgesetzt
  • Es wird eine Web-Applikation in die AWS Umgebung mit Hilfe von Kamal deployed
  • Standardmässig wird die app ./nginx deployed

Important

Das Repository dient als Vorlage um die Projekte im Modul 324 zu starten.

💁 Anleitungen auf der Modulwebseite

📁 Ordnerstruktur

Der Ordner /docs beinhaltet allgemeine Dokumentation. Hier könnt Ihr eure Gedanken zum Projekt in markdown-Dateien niederschreiben.

Important

📁 ./docs/reflections

  • Jedes Projektmitglied sollte in diesem Ordner seine Sprint Reflektionen erfassen.
  • Am besten erstellt jeder einen Unterordner /docs/reflections/ihr-nachname.
  • Für jede Sprint-Reflexion sollte eine neue Datei erstellt werden.

Der Ordner /nginx beinhaltet alle Dateien die benötigt werden, um ein nginx docker image zu erstellen. Das darin liegende /nginx/Dockerfile beinhaltet die Beschreibung vom Image.

Note

Dies ist die Standardapplikation um das deployment nach AWS zu testen

Der Ordner /kamal beinhaltet die Konfiguration um ein Docker-image mit Hilfe des Utility-Frameworks Kamal zu deployen.

Es ist möglich eine Web-Applikation inclusive einer Datenbank auf eine beliebige VM zu deployen.

Note

Mehrere Web-Applikationen (Dockerfiles) werden erst ab der Version >2.0.0 unterstützt. Das Modul basiert noch auf der Version 1.9.2. Daher ist momentan nur möglich eine Web-Applikation zu erstellen.

Dies betrifft vor allem Projekte welche aus einem Backend-Api und einem Frontend bestehen.

  • 💡 Das Modul ist erfahrungsgemäss zu kurz um dies zu bewerkstelligen. Daher würde ich mich aufs Frontend konzentrieren.

Der Ordner /terraform beinhaltet die Konfiguration der AWS Umgebung. Terraform ermöglicht es für alle die AWS Umgebung einheitlich, automatisch aufzusetzen. Zusätzlich beinhaltet es utility Scripts um z.B. die aktuelle IP vom Server herauszufinden.

Im Ordner .github befinden sich GitHub spezifische Dateien. Dies sind in unserem Fall vor allem GitHub Action Workflows im Unterordner .github/workflows. Dieser beinhaltet folgende zwei Dateien:

  • Setup Infrastructure on Amazon AWS ./.github/workflows/aws-infrastructure.yml

    Die Action "Setup Infrastructure on Amazon AWS" verbindet sich mit der AWS Umgebung und erstellt alle AWS Ressourcen wie z.B. Netzwerk, Routing, Docker Registry und Ubuntu Instanz.

  • Deploy to Amazon AWS ./.github/workflows/deploy.yml

    Die Action "Deploy to Amazon AWS" baut das Docker-Image, ladet es in die Docker-Registry der AWS Umgebung und startet das Docker-Image als Container auf der Ubuntu VM.

Im Ordner .devcontainer befindet sich das Dockerfile für den DevContainer sowie auch die Spezifikation des devcontainers. Das ./.devcontainer/Dockerfile dient dazu eine einheitliche Entwicklungsumgebung für alle Projektmitglieder zur Verfügung zu stellen.

Important

  • ✅ Zuerst sollte Docker-Desktop auf dem Computer installiert und gestartet sein!
  • ❗ Der Devcontainer brauch den Port 3000, wenn bereits ein Prozess auf dem Port gestartet ist kann der Container nicht gestartet werden.

Starten vom Devcontainer im Terminal

## Starten
docker compose up devcontainer -d
## Ein Terminal im Container starten
docker exec -it devcontainer /bin/bash

Starten vom DevContainer in VS-Code

Der Ordner ./local-template beinhaltet Beispieldateien, wenn man im DevContainer mit Hilfe der aws-cli und kamal direkt auf die AWS-Umgebung zugreifen möchte.

Important

Optional, das Modul kommt auch ohne den Ordner aus.

Caution

In diesen Ordner müssen Credentials kopiert werden. Diese sollen NIE eingecheckt werden!

  • ❗ Der Ordner muss nach local umbenannt werden bevor die Credentials eingefügt werden
  • 💡 Der Ordner local befindet sich im .gitignore und wird nicht eingecheckt