Kamal ist ein "Utility-Framework" mit deren Hilfe eine Web-Applikation als docker-image, auf einen beliebigen ubuntu Server ausgeliefert (deployt) werden kann.
Durch das AWS-Learner-Lab haben wir die Möglichkeit eine beliebige AWS Infrastruktur aufzubauen. Dieses Modul liegt jedoch den Fokus auf DevOps und nicht auf Cloud Infrastruktur.
Durch Kamal
brauchen wir auf AWS "nur" eine Ubuntu Instanz (mit all den Netzwerkpolicies und co.) aufzusetzen.
Der Rest wird durch Kamal
automatisiert. Es könnte z.B. Auch einfach eine DB gestartet werden.
Tip
Kamal
funktioniert Cloud-Provider unabhängig! Ihr könnt damit überall deployen, sogar auf eigene Server zu Hause!
- Via SSH zur
KAMAL_SERVER_IP
Verbinden docker
undcurl
auf dem Server installieren, wenn nicht schon vorhanden- In die Docker Registry einloggen.
- Das
Dockerfile
bauen. - Das Docker-Image von lokal in die Registry hochladen (pushen)
- Das Docker-Image auf dem Server von der Docker Registry herunterladen (pullen)
- Alle Environment Variablen vom .env zum Server laden
- Garantiert dass Traefik (ein Load-Balancer) auf Port 80 läuft
- Verbindet die App im Docker-Image via
Traefik
. Verwendet dazu einen Healthcheck auf dem Pfad/up
- Startet einen neuen Container mit dem neuen Docker-Image
- Stoppt den alten Container, sofern vorhanden, sobald das neue Image läuft.
- Löscht alte Container
[!INFO]
Dies alles erhält ihr durch
Kamal
gratis! So kann ohne downtime, einfach WebApps überall deployed werden.
Tip
Nach einem Setup kann auch kamal deploy
verwendet werden.
Kamal
ist von den Machern von RubyOnRails. Ist jedoch nicht darauf isoliert, wird aber vor allem in der Ruby Welt eingesetzt.
Lasst euch nicht von Ruby stören, ihr könnt euer Projekt in jeder beliebigen Sprache erstellen!