Daytona ist eine Plattform für das Management von Entwicklungsumgebungen (DEM), die Anfang 2023 eingeführt wurde. Das Team hinter Daytona entwickelte ursprünglich Codeanywhere, eine der ersten cloudbasierten integrierten Entwicklungsumgebungen. Nachdem sie die Grenzen von Codeanywhere erkannt hatten und die sich entwickelnden Bedürfnisse der Entwicklergemeinschaft bemerkten, beschlossen sie, eine robustere und flexiblere Lösung zu schaffen, was zur Geburt von Daytona führte.
Daytona verspricht dabei eine effiziente Verwaltung von Entwicklungsumgebungen. Laut der Daytona Seite gibt es sogar das folgende Statement:
Daytona is a radically simple open source development environment manager. (Daytona ist ein radikal einfacher Open-Source-Manager für Entwicklungsumgebungen.)
Aber was macht Daytona denn nun genau? Hier ein paar Details, welche man auf der Webseite lesen kann.
Mit Daytona wird die gesamte Entwicklungsumgebung von Grund auf automatisiert. Es beginnt mit der Bereitstellung der notwendigen Instanz und der intelligenten Interpretation sowie Anwendung der gewünschten Konfiguration. Anschließend richtet Daytona Prebuilds ein, die den Entwicklern sofort einsatzbereite Umgebungen bieten. Die sichere VPN-Verbindung sorgt dafür, dass alle Daten geschützt sind, während die Möglichkeit, sowohl lokale als auch Web-IDEs zu verbinden, maximale Flexibilität bietet.
Mit Daytona wird der gesamte Entwicklungsprozess nahtlos und effizient gestaltet, sodass Sie und Ihr Team sich auf das Wesentliche konzentrieren können: das Schreiben des Codes.
Zunächst muss ich erwähnen, dass ich anfangs viel Geduld gebraucht habe, damit ich Daytona benutzen konnte. Es gab dabei verschiedene Arten von Fehlern, aber letztendlich hat es dann doch geklappt. Ich werde im Verlauf des Techups noch auf die einzelnen Fehler eingehen. Ausserdem ist wichtig zu erwähnen, dass ich mir ausschliesslich die Open-Source Version von Daytona angeschaut habe, welche seit dem 06. März 2024 verfügbar ist und damit auch noch sehr jung ist. Dies ist wichtig zu erwähnen, da der Funktionsumfang von der Open-Source Variante und der Enterprise Variante wohl sehr unterschiedlich ist.
Aber wollen wir uns nun mal anschauen, wie das Ganze in der Praxis aussieht.
Setup
Als Erstes installieren wir die Daytona CLI. Dazu führen wir in einem Terminal den folgenden Befehl aus:
|
|
Daraufhin erhalten wir die folgende Ausgabe:
|
|
Erster Workspace
Wir können nun direkt loslegen und einen neuen Workspace erstellen. Wir wählen also den Punkt daytona create
aus. Hier können wir einfach eine Git-Url und einen Workspace Namen eingeben um zu starten.
|
|
Sobald die Informationen eingegeben wurde, wird der Workspace initialisiert. In der Log-Ausgabe sehen wir, dass ein daytonaio/workspace-project
Docker-Image heruntergeladen wird, mit welchem uns später unser Workspace provisioniert wird. Wie wir hier schon sehen können, brauchen wir Docker auf unserem Rechner, im Daytona nutzen zu können. Danach wird noch das Daytona Binary installiert und ein SSH Daemon gestartet.
Sobald alles fertig initialisiert ist, können wir das Projekt lokal öffnen. Dazu können wir im Terminal einfach den folgenden Befehl eingeben.
|
|
Wir sehen unseren Workspace und können diesen einfach auswählen. Es erscheint die folgende Meldung und es öffnet sich VSCode mit dem gewünschten Projekt.
|
|
Aber wo genau läuft denn unser Projekt jetzt? Wie wir sehen können, wird eine SSH Verbindung zu unserem Projekt hergestellt. Der aufmerksame Leser hat gesehen, dass bei der Initialisierung ein Docker Container gestartet wurde. Schauen wir uns einmal die laufenden Container auf dem System an.
Unser Projekt läuft also in einem Docker Container, mit welchem wir uns per SSH verbinden können.
Wer nun nicht gerne mit VSCode arbeitet, für den gibt es eine gute Nachricht. Daytona bietet auch andere Entwicklungsumgebungen an. Eine Liste können wir uns mit dem folgenden Befehl ausgeben lassen.
|
|
Ich oute mich hier mal als IntelliJ User und wähle als default IDE also “IntelliJ IDEA Ultimate” aus.
Nun können wir wieder den Befehl daytona code
ausführen und es sollte sich IntelliJ öffnen.
Leider funktioniert das nicht so einfach wie bei VSCode. Beim Öffnen des Projekts kam erstmal der folgende Fehler:
![Screenshot 2024-05-06 at 13.42.53](Screenshot 2024-05-06 at 13.42.53.png)
Dieser Fehler ist allerdings schnell gelöst. Wir müssen erstmal das Jetbrains Gateway installieren, damit wir eine Remoteverbindung zu unserem Docker Container aufbauen können. Es wird dann eine SSH Remote Connection hergestellt und IntelliJ gestartet. Leider wurde beim Starten dann auch wieder ein Fehler geworfen.
Es hat mich gewundert das hier eine relativ alte IntelliJ Version (2023.2.2) verwendet wird, welche fix im Code hinterlegt ist. Daher habe ich beschlossen einen Pull Request zu erstellen in dem dann immer die aktuellste Version genommen wird. https://github.com/daytonaio/daytona/pull/541
Leider konnte ich diesen Fehler aber nicht lösen und muss wohl doch erstmal mit VSCode weiterarbeiten.
Schauen wir uns aber mal an, was Daytona uns weiterhin noch anbietet. Wenn man in der Konsole daytona --help
eingibt, erhält man eine Übersicht aller Kommandos, welche die CLI unterstützt.
|
|
Git Providers
Ich will jetzt nicht auf alle Kommandos eingehen, aber mal ein paar rauspicken, welche noch ganz interessant sind. Mit git-providers
kann man sich, wie der Name schon sagt verschiedene Git Anbieter bei Daytona hinterlegen, auf die man dann zugreifen kann.
|
|
Wollen wir uns das am Beispiel Github mal anschauen. Um einen neuen Git Anbieter hinzuzufügen, benötigt man einen Personal Access Token, damit man auch Zugriff auf Non-Public Repositories hat. Geben wir nun wieder daytona create
ein, sehen wir das wir den bereits angelegten Git Anbieter, in unserem Fall Github, auswählen können.
Wenn wir Github nun selektieren, sehen wir alle persönlichen Repositories und können hier eins auswählen. Leider habe ich es nicht geschafft auch die Firmen Repositories anzuzeigen. Deswegen ist die Funktion aktuell für meine Zwecke nicht wirklich brauchbar und ich muss den Umweg über die Eingabe einer Custom Repository URL gehen, was aber auch nicht wirklich schlimm ist.
Ein weiteres interessantes Kommando ist profile
. Damit können wir theoretisch mehrere API-Server nutzen. Vorstellbar wäre hier zum Beispiel für verschiedene Cloud Provider verschiedene Profile zu erstellen, wo der API Server deployed ist.
Noch zu erwähnen ist provider
. Damit können wir bestimmen, wie unsere Container zur Verfügung gestellt werden. In der OpenSource Variante gibt es hier nur den Docker Provider.
Da Daytona ja wie bereits erwähnt Open-Source ist, kann man sich hier wohl aber nach Lust und Laune weitere Provider schreiben, was ich mir aber nicht angeschaut habe. In der Enterprise Variante wird aber wohl auch Kubernetes und OpenShift unterstützt.
Fazit
Daytona ist von der Idee her super, allerdings ist die Open-Source Variante noch sehr rudimentär gehalten und auch noch stark verbesserungsbedürftig. Leider gibt es auch nicht wirklich eine Dokumentation, aus welcher man sich die Informationen ziehen kann. Auch hier müsste noch nachgebessert werden. Daytona soll wohl durch ein Plugin-Prinzip erweiterbar sein, aber auch hierzu findet man auf der Github Seite derzeit noch keinerlei Informationen. Ich werde das Produkt aber auf jeden Fall weiter im Auge behalten und für interne Projekte auch mal im Team versuchen. Wer gerne über das Thema up-to-date gehalten werden möchte, der kann mir gerne auf LinkedIn folgen.