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.
- In AWS Umgebung starten
- AWS Credentials übertragen
- AWS Umgebung aufsetzen
- Nginx Image bauen und ausliefern
- Lokale Entwicklungsumgebung konfigurieren
- Devcontainer Dockerfile erweitern
- Eine eigene Applikation erstellen
- Eine eigene Applikation deployen
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
docker compose up devcontainer -d
## Ein Terminal im Container starten
docker exec -it devcontainer /bin/bash
- Link zur Doku auf der Modulwebseite
- Offizielle Doku: Developing inside a Container
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