Einrichtung der Eclipse Theia Cloud IDE-Plattform auf DigitalOcean Kubernetes

Der Autor hat den Free and Open Source Fund ausgewählt, um im Rahmen des Write for DOnations-Programms eine Spende zu erhalten.

Einführung

Mit der Verlagerung von Entwicklertools in die Cloud wächst die Entwicklung und Verbreitung von Cloud-IDE (Integrated Development Environment)-Plattformen. Cloud-IDEs sind von jedem modernen Gerät über Webbrowser zugänglich und bieten zahlreiche Vorteile für Szenarien der Echtzeit-Zusammenarbeit. Die Arbeit in einer Cloud-IDE bietet Ihnen und Ihrem Team eine einheitliche Entwicklungsumgebung und Testumgebung und minimiert Plattforminkompatibilitäten. Da sie nativ auf Cloud-Technologien basieren, können sie den Cluster nutzen, um Aufgaben zu erledigen, die die Leistung und Zuverlässigkeit eines einzelnen Entwicklungssystems bei weitem übertreffen können.

Eclipse Theia ist eine erweiterbare Cloud-IDE, die auf einem Remote-Server läuft und über einen Webbrowser zugänglich ist. Visuell ist sie so gestaltet, dass sie ähnlich wie Microsoft Visual Studio Code aussieht und sich verhält, was bedeutet, dass sie viele Programmiersprachen unterstützt, ein flexibles Layout hat und über ein integriertes Terminal verfügt. Was Eclipse Theia von anderen Cloud-IDE-Software unterscheidet, ist ihre Erweiterbarkeit; sie kann mithilfe von benutzerdefinierten Erweiterungen modifiziert werden, die es Ihnen ermöglichen, eine Cloud-IDE nach Ihren Bedürfnissen zu gestalten.

In diesem Tutorial richten Sie die Standardversion der Eclipse Theia Cloud-IDE-Plattform auf Ihrem DigitalOcean Kubernetes-Cluster ein und stellen sie unter Ihrer Domain bereit. Die Plattform ist mit Let’s Encrypt-Zertifikaten gesichert und erfordert, dass sich der Besucher authentifiziert. Am Ende haben Sie Eclipse Theia auf Ihrem Kubernetes-Cluster laufen, erreichbar über HTTPS und mit der Anforderung, dass sich der Besucher einloggt.

Voraussetzungen

Schritt 1 – Installation und Bereitstellung von Eclipse Theia

Um zu beginnen, installieren Sie Eclipse Theia auf Ihrem DigitalOcean Kubernetes-Cluster. Anschließend werden Sie es unter Ihrer gewünschten Domain mithilfe eines Nginx Ingress freigeben.

Da Sie zwei Beispielbereitstellungen und eine Ressource als Teil der Voraussetzungen erstellt haben, können Sie sie frei löschen, indem Sie die folgenden Befehle ausführen:

  1. kubectl delete -f hello-kubernetes-ingress.yaml
  2. kubectl delete -f hello-kubernetes-first.yaml
  3. kubectl delete -f hello-kubernetes-second.yaml

Für dieses Tutorial werden Sie die Bereitstellungskonfiguration auf Ihrem lokalen Rechner in einer Datei mit dem Namen eclipse-theia.yaml speichern. Erstellen Sie diese mit dem folgenden Befehl:

  1. nano eclipse-theia.yaml

Fügen Sie die folgenden Zeilen zur Datei hinzu:

eclipse-theia.yaml
apiVersion: v1
kind: Namespace
metadata:
  name: theia
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: theia-next
  namespace: theia
spec:
  ingressClassName: nginx
  rules:
  - host: theia.your_domain
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: theia-next
            port:
              number: 80
---
apiVersion: v1
kind: Service
metadata:
 name: theia-next
 namespace: theia
spec:
 ports:
 - port: 80
   targetPort: 3000
 selector:
   app: theia-next
---
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: theia-next
  name: theia-next
  namespace: theia
spec:
  selector:
    matchLabels:
      app: theia-next
  replicas: 1
  template:
    metadata:
      labels:
        app: theia-next
    spec:
      containers:
      - image: francoisvans/theia-docker-test
        imagePullPolicy: Always
        name: theia-next
        ports:
        - containerPort: 3000

Diese Konfiguration definiert einen Namespace, eine Bereitstellung, einen Dienst und einen Ingress. Der Namespace heißt theia und enthält alle Kubernetes-Objekte, die mit Eclipse Theia zusammenhängen, getrennt vom Rest des Clusters. Die Bereitstellung besteht aus einer Instanz des Theia-Docker-Images mit dem Port 3000, der im Container freigegeben ist. Der Dienst sucht nach der Bereitstellung und remappt den Containerport auf den üblichen HTTP-Port 80, was den In-Cluster-Zugriff auf Eclipse Theia ermöglicht.

Der Ingress enthält eine Regel, um den Dienst extern unter Port 80 an Ihrer gewünschten Domain bereitzustellen. In seinen Anmerkungen geben Sie an, dass der Nginx Ingress Controller für die Anforderungsverarbeitung verwendet werden soll. Denken Sie daran, theia.ihre_domain durch Ihre gewünschte Domain zu ersetzen, die Sie auf den Load Balancer Ihres Clusters verwiesen haben, und speichern Sie dann die Datei.

Speichern und schließen Sie die Datei.

Erstellen Sie dann die Konfiguration in Kubernetes, indem Sie den folgenden Befehl ausführen:

  1. kubectl apply -f eclipse-theia.yaml

Die Ausgabe wird ähnlich aussehen:

Output
namespace/theia created ingress.networking.k8s.io/theia-next created service/theia-next created deployment.apps/theia-next created

Sie können die Erstellung des Eclipse Theia-Pods beobachten, indem Sie Folgendes ausführen:

  1. kubectl get pods -w -n theia

Die Ausgabe sieht wie folgt aus:

Output
NAME READY STATUS RESTARTS AGE theia-next-6f6b98dd4f-qknhb 1/1 Running 0 2m30s

Nach einiger Zeit wird der Status auf RUNNING umschalten, was bedeutet, dass Sie Eclipse Theia erfolgreich in Ihrem Cluster installiert haben.

Navigieren Sie in Ihrem Browser zu Ihrer Domain. Dort sehen Sie die Standard-Oberfläche des Eclipse Theia-Editors:

Sie haben Eclipse Theia erfolgreich auf Ihrem DigitalOcean Kubernetes-Cluster bereitgestellt und es unter Ihrer gewünschten Domain mit einem Ingress freigegeben. Als nächstes sichern Sie den Zugriff auf Ihre Eclipse Theia-Bereitstellung, indem Sie die Anmeldung aktivieren.

Schritt 2 – Aktivieren der Anmeldung für Ihre Domain

In diesem Schritt aktivieren Sie die Anmeldung mit Benutzername und Passwort für Ihre Eclipse Theia-Bereitstellung. Dazu erstellen Sie zunächst eine Liste gültiger Anmeldekombinationen mithilfe des htpasswd-Dienstprogramms. Anschließend erstellen Sie ein Kubernetes-Geheimnis, das diese Liste enthält, und konfigurieren den Ingress so, dass Besucher gemäß dieser Liste authentifiziert werden. Am Ende ist Ihre Domain nur zugänglich, wenn der Besucher eine gültige Benutzername- und Passwortkombination eingibt. Dies verhindert, dass Gäste und andere unerwünschte Besucher auf Eclipse Theia zugreifen.

Das Dienstprogramm htpasswd stammt vom Apache-Webserver und wird zum Erstellen von Dateien verwendet, die Listen von Anmeldekombinationen speichern. Das Format der htpasswd-Dateien ist eine Benutzername:gehashtes_Passwort-Kombination pro Zeile, was das Format ist, das der Nginx Ingress Controller erwartet, dass die Liste entspricht.

Zuerst aktualisieren Sie den Paketmanager-Cache:

  1. sudo apt update

Dann installieren Sie htpasswd auf Ihrem System, indem Sie den folgenden Befehl ausführen:

  1. sudo apt install apache2-utils -y

Sie werden die Liste in einer Datei namens auth speichern. Erstellen Sie sie, indem Sie folgenden Befehl ausführen:

  1. touch auth

Diese Datei muss auth heißen, weil der Nginx Ingress Controller erwartet, dass das Geheimnis einen Schlüssel namens data.auth enthält. Wenn er fehlt, wird der Controller HTTP 503 Service nicht verfügbar zurückgeben.

Fügen Sie einen Benutzernamen und ein Passwort zur Datei auth hinzu, indem Sie den folgenden Befehl ausführen:

  1. htpasswd auth username

Vergessen Sie nicht, Benutzername durch Ihren gewünschten Benutzernamen zu ersetzen. Sie werden nach einem passenden Passwort gefragt, und die Kombination wird in die Datei auth hinzugefügt. Sie können diesen Befehl für so viele Benutzer wiederholen, wie Sie hinzufügen möchten.

Hinweis: Wenn das System, an dem Sie arbeiten, htpasswd nicht installiert hat, können Sie stattdessen eine Dockerisierte Version verwenden.

Sie müssen Docker auf Ihrem Rechner installiert haben. Für Anweisungen dazu besuchen Sie die offizielle Dokumentation.

Führen Sie den folgenden Befehl aus, um eine dockerisierte Version auszuführen:

  1. docker run --rm -it httpd htpasswd -n <username>

Vergessen Sie nicht, <Benutzername> durch den Benutzernamen zu ersetzen, den Sie verwenden möchten. Sie werden nach einem Passwort gefragt. Die gehashte Anmeldedatenkombination wird auf der Konsole ausgegeben, und Sie müssen sie manuell am Ende der Datei auth hinzufügen. Wiederholen Sie diesen Vorgang für so viele Anmeldungen, wie Sie hinzufügen möchten.

Wenn Sie fertig sind, erstellen Sie ein neues Geheimnis in Kubernetes mit dem Inhalt der Datei, indem Sie den folgenden Befehl ausführen:

  1. kubectl create secret generic theia-basic-auth --from-file=auth -n theia

Sie können das Geheimnis mit folgendem Befehl anzeigen:

  1. kubectl get secret theia-basic-auth -o yaml -n theia

Die Ausgabe wird wie folgt aussehen:

Output
apiVersion
: v1 data: auth: ... kind: Secret metadata: creationTimestamp: "2021-12-31T17:16:29Z" name: theia-basic-auth namespace: theia resourceVersion: "32437" uid: 47461e23-e281-411b-acfd-cea82fcde41b type: Opaque

Als nächstes müssen Sie den Ingress bearbeiten, um das Geheimnis zu verwenden. Öffnen Sie die Bereitstellungskonfiguration zum Bearbeiten:

  1. nano eclipse-theia.yaml

Fügen Sie die markierten Zeilen zu Ihrer Datei hinzu:

eclipse-theia.yaml
apiVersion: v1
kind: Namespace
metadata:
  name: theia
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: theia-next
  namespace: theia
  annotations:
    nginx.ingress.kubernetes.io/auth-type: basic
    nginx.ingress.kubernetes.io/auth-secret: theia-basic-auth
    nginx.ingress.kubernetes.io/auth-realm: 'Authentication Required - Eclipse Theia'
spec:
  ingressClassName: nginx
  rules:
  - host: theia.your_domain
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: theia-next
            port:
              number: 80
...

Zuerst geben Sie in der Anmerkung auth-type an, dass der Authentifizierungstyp basic ist. Dies bedeutet, dass Nginx den Benutzer auffordert, einen Benutzernamen und ein Passwort einzugeben. Dann geben Sie in auth-secret an, dass das Geheimnis, das die Liste der gültigen Kombinationen enthält, theia-basic-auth ist, das Sie gerade erstellt haben. Die verbleibende Anmerkung auth-realm gibt eine Nachricht an, die dem Benutzer als Erklärung dafür angezeigt wird, warum eine Authentifizierung erforderlich ist. Sie können die Nachricht in diesem Feld nach Belieben ändern.

Speichern und schließen Sie die Datei.

Um die Änderungen in Ihrem Cluster zu propagieren, führen Sie den folgenden Befehl aus:

  1. kubectl apply -f eclipse-theia.yaml

Sie sehen die Ausgabe:

Output
namespace/theia unchanged ingress.networking.k8s.io/theia-next configured service/theia-next unchanged deployment.apps/theia-next unchanged

Öffnen Sie Ihren Domainnamen in Ihrem Browser, wo Sie nun aufgefordert werden, sich anzumelden.

Sie haben die grundlegende Anmeldeauthentifizierung für Ihren Ingress aktiviert, indem Sie ihn konfiguriert haben, um das Geheimnis zu verwenden, das die gehashten Benutzername- und Kennwortkombinationen enthält. Im nächsten Schritt werden Sie den Zugriff weiter sichern, indem Sie TLS-Zertifikate hinzufügen, damit der Datenverkehr zwischen Ihnen und Ihrer Eclipse Theia-Bereitstellung verschlüsselt bleibt.

Schritt 3 – Anwendung von Let’s Encrypt HTTPS-Zertifikaten

Als nächstes sichern Sie Ihre Eclipse Theia-Installation, indem Sie Let’s Encrypt-Zertifikate auf Ihren Ingress anwenden, die automatisch von Cert-Manager bereitgestellt werden. Nach Abschluss dieses Schritts ist Ihre Eclipse Theia-Installation über HTTPS erreichbar.

Öffnen Sie eclipse-theia.yaml zur Bearbeitung:

  1. nano eclipse-theia.yaml

Fügen Sie die markierten Zeilen zu Ihrer Datei hinzu und achten Sie darauf, den Platzhalter-Domänennamen durch Ihren eigenen zu ersetzen:

eclipse-theia.yaml
apiVersion: v1
kind: Namespace
metadata:
  name: theia
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: theia-next
  namespace: theia
  annotations:
    nginx.ingress.kubernetes.io/auth-type: basic
    nginx.ingress.kubernetes.io/auth-secret: theia-basic-auth
    nginx.ingress.kubernetes.io/auth-realm: 'Authentication Required - Eclipse Theia'
    cert-manager.io/cluster-issuer: letsencrypt-prod
spec:
  tls:
  - hosts:
    - theia.your_domain
    secretName: theia-prod
  ingressClassName: nginx
  rules:
  - host: theia.your_domain
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: theia-next
            port:
              number: 80
...

Zuerst geben Sie den letsencrypt-prod ClusterIssuer an, den Sie als Teil der Voraussetzungen erstellt haben, als den Issuer an, der verwendet wird, um Zertifikate für diesen Ingress bereitzustellen. Dann geben Sie im tls-Abschnitt die genaue Domäne an, die gesichert werden soll, sowie einen Namen für ein Geheimnis, das diese Zertifikate halten wird.

Speichern und verlassen Sie die Datei.

Wenden Sie die Änderungen auf Ihren Cluster an, indem Sie den folgenden Befehl ausführen:

  1. kubectl apply -f eclipse-theia.yaml

Die Ausgabe wird wie folgt aussehen:

Output
namespace/theia unchanged ingress.networking.k8s.io/theia-next configured service/theia-next unchanged deployment.apps/theia-next unchanged

Es wird einige Minuten dauern, bis die Zertifikate bereitgestellt und vollständig angewendet sind. Sie können den Fortschritt verfolgen, indem Sie die Ausgabe des folgenden Befehls beobachten:

  1. kubectl describe certificate theia-prod -n theia

Wenn es fertig ist, wird das Ende der Ausgabe ähnlich aussehen wie dies:

Output
... Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal GeneratedKey 42m cert-manager Generated a new private key Normal Requested 42m cert-manager Created new CertificateRequest resource "theia-prod-3785736528" Normal Issued 42m cert-manager Certificate issued successfully

Aktualisieren Sie Ihre Domain in Ihrem Browser. Sie sehen ein grünes Vorhängeschloss auf der linksten Seite der Adressleiste, das darauf hinweist, dass die Verbindung sicher ist.

Sie haben das Ingress so konfiguriert, dass Let’s Encrypt-Zertifikate verwendet werden, was Ihre Eclipse Theia-Bereitstellung sicherer macht. Nun können Sie die Standard-Benutzeroberfläche von Eclipse Theia überprüfen.

Schritt 4 — Verwenden der Eclipse Theia-Oberfläche

In diesem Abschnitt werden einige der Funktionen der Eclipse Theia-Oberfläche erkundet.

Auf der linken Seite der IDE befindet sich eine vertikale Reihe von vier Schaltflächen, die die am häufigsten verwendeten Funktionen in einem Seitenbereich öffnen.

Diese Leiste ist anpassbar, sodass Sie diese Ansichten in eine andere Reihenfolge verschieben oder sie aus der Leiste entfernen können. Standardmäßig öffnet die erste Ansicht das Explorer-Panel, das eine baumartige Navigation durch die Struktur des Projekts bietet. Hier können Sie Ihre Ordner und Dateien verwalten, diese bei Bedarf erstellen, löschen, verschieben und umbenennen.

Nachdem Sie eine neue Datei über das Menü Datei erstellt haben, sehen Sie eine leere Datei, die in einem neuen Tab geöffnet ist. Nach dem Speichern können Sie den Dateinamen im Explorer-Seitenbereich anzeigen. Um Ordner zu erstellen, klicken Sie mit der rechten Maustaste auf die Explorer-Seitenleiste und klicken Sie auf Neuer Ordner. Sie können einen Ordner erweitern, indem Sie auf seinen Namen klicken, sowie Dateien und Ordner in obere Teile der Hierarchie ziehen und ablegen, um sie an einen neuen Ort zu verschieben.

Die nächste Option bietet Zugriff auf die Such- und Ersetzungsfunktion. Danach bietet die nächste die Ansicht von Versionskontrollsystemen, die Sie möglicherweise verwenden, wie Git.

Die nächste Ansicht ist die Debugger-Option, die alle gängigen Aktionen für das Debuggen im Panel bietet. Sie können Debugging-Konfigurationen in der Datei launch.json speichern.

Die letzte Option ermöglicht es Ihnen, Erweiterungen anzuzeigen und zu installieren:

Der zentrale Teil der GUI ist Ihr Editor, den Sie durch Registerkarten für die Bearbeitung Ihres Codes trennen können. Sie können Ihre Bearbeitungsansicht in ein Rastersystem oder in nebeneinanderliegende Dateien ändern. Wie alle modernen IDEs unterstützt Eclipse Theia die Syntaxhervorhebung für Ihren Code.

Sie können auf ein Terminal zugreifen, indem Sie STRG+UMSCHALT+` eingeben oder auf Terminal im oberen Menü klicken und Neues Terminal auswählen. Das Terminal wird in einem unteren Panel geöffnet, und sein Arbeitsverzeichnis wird auf den Projektarbeitsbereich festgelegt, der die im Explorer-Seitenbereich angezeigten Dateien und Ordner enthält.

Wenn Sie die Eclipse Theia-Bereitstellung auf Ihrem Cluster zerstören möchten, führen Sie den folgenden Befehl aus:

  1. kubectl delete -f eclipse-theia.yaml

Sie haben einen Überblick über die Eclipse Theia-Oberfläche erhalten und einige der am häufigsten verwendeten Funktionen überprüft.

Fazit

Sie haben jetzt Eclipse Theia, eine vielseitige Cloud-IDE, auf Ihrem DigitalOcean Kubernetes-Cluster installiert. Sie haben es mit einem kostenlosen Let’s Encrypt TLS-Zertifikat gesichert und die Instanz so eingerichtet, dass eine Anmeldung vom Besucher erforderlich ist. Sie können alleine an Ihrem Quellcode und Dokumenten arbeiten oder mit Ihrem Team zusammenarbeiten. Sie können auch versuchen, Ihre eigene Version von Eclipse Theia zu erstellen, wenn Sie zusätzliche Funktionalitäten benötigen. Weitere Informationen dazu finden Sie in der Theia-Dokumentation.

Source:
https://www.digitalocean.com/community/tutorials/how-to-set-up-the-eclipse-theia-cloud-ide-platform-on-digitalocean-kubernetes