Tutorial

Einrichten der Eclipse Theia Cloud IDE-Plattform unter DigitalOcean Kubernetes

NginxLet's EncryptKubernetes

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

Einführung

Die Erstellung und Einführung von Cloud-IDE-Plattformen (IDE: Integrated Development Environment) nimmt zu, da Entwickler-Tools immer häufiger cloudbasiert sind. Cloud-IDEs sind per Webbrowser über beliebige moderne Geräte zugänglich und bieten zahlreiche Vorteile für echtzeitbasierte Zusammenarbeit. Eine Cloud-IDE bietet Ihnen und Ihrem Team eine einheitliche Entwicklungs- und Testumgebung und minimiert gleichzeitig Plattform-Inkompatibilitäten. Da die Plattformen nativ auf Cloud-Technologien basieren, können sie unter Verwendung des Clusters Aufgaben erledigen, die deutlich über die Leistung und Zuverlässigkeit einzelner Entwicklungscomputer hinausgehen.

Eclipse Theia ist eine erweiterbare Cloud IDE, die auf einem Remote-Server läuft und von einem Web-Browser aus zugänglich Aussehen und Verhalten ähneln Microsoft Visual Studio-Code​​​, was heißt, dass viele Programmiersprachen unterstützt werden und es ein flexibles Layout sowie ein integriertes Terminal gibt. Was Eclipse Theia von einer anderen Cloud IDE-Software unterscheidet, ist die Erweiterbarkeit; sie kann mit benutzerdefinierten Erweiterungen modifiziert werden, damit Sie eine Cloud IDE für Ihre Bedürfnisse erstellen können.

In diesem Tutorial richten Sie die Standardversion der Eclipse Theia Cloud IDE-Plattform in Ihrem DigitalOcean Kubernetes-Cluster ein und machen sie in Ihrer Domäne verfügbar, gesichert mit Let’s Encrypt-Zertifikaten und mit vorgeschriebener Authentifizierung des Benutzers. Zum Schluss wird Eclipse Theia in Ihrem Kubernetes-Cluster ausgeführt, der über HTTPS verfügbar ist; dabei muss sich der Benutzer anmelden.

Voraussetzungen

  • Ein DigitalOcean Kubernetes-Cluster, bei dem Ihre Verbindung standardmäßig als kubectl konfiguriert ist. Eine Anleitung zur Konfiguration von kubectl finden Sie unter dem Schritt Verbinden mit Ihrem Cluster, wenn Sie Ihren Cluster erstellen. Um einen Kubernetes-Cluster in DigitalOcean zu erstellen, lesen Sie unser Dokument Kubernetes Schnellstart.

  • Der auf Ihrem lokalen Rechner installierte Helm-Paketmanager und das in Ihrem Cluster installierte Tiller. Führen Sie dazu die Schritte 1 und 2 des Tutorials Installieren von Software in Kubernetes-Clustern mit dem Helm-Paketmanager aus.

  • Der Nginx Ingress Controller und Cert Manager, in Ihrem Cluster mit Helm installiert, um Eclipse Theia mit Ingress Resources verfügbar zu machen. Folgen Sie dazu den Anweisungen unter Einrichten eines Nginx Ingress unter DigitalOcean Kubernetes mit Helm.

  • Ein vollständig registrierter Domänenname zum Hosten von Eclipse Theia. Dieses Tutorial verwendet in allen Bereichen theia.your_domain. Sie können einen Domänennamen unter Namecheap günstig erwerben oder einen kostenlosen von Freenom herunterladen,. oder einfach die Domänenregistrierngsstelle Ihrer Wahl verwenden.

Schritt 1 — Installieren und Verfügbarmachen von Eclipse Theia

Installieren Sie zunächst Eclipse Theia in Ihrem DigitalOcean Kubernetes-Cluster. Dann machen Sie die Plattform in Ihrer gewünschten Domäne mit einem Nginx Ingress verfügbar.

Da Sie im Rahmen der Voraussetzungen zwei Beispielumgebungen und eine Ressource erstellt haben, können Sie diese durch Ausführung folgender Befehle bei Bedarf löschen:

  • kubectl delete -f hello-kubernetes-ingress.yaml
  • kubectl delete -f hello-kubernetes-first.yaml
  • kubectl delete -f hello-kubernetes-second.yaml

In diesem Tutorial speichern Sie die Bereitstellungskonfiguration auf Ihrem lokalen Rechner, in einer Datei namens eclipse-theia.yaml. Erstellen Sie diese mit dem folgenden Befehl:

  • nano eclipse-theia.yaml

Fügen Sie der Datei folgende Zeilen hinzu:

eclipse-theia.yaml
apiVersion: v1
kind: Namespace
metadata:
  name: theia
---
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: theia-next
  namespace: theia
  annotations:
    kubernetes.io/ingress.class: nginx
spec:
  rules:
  - host: theia.your_domain
    http:
      paths:
      - backend:
          serviceName: theia-next
          servicePort: 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: theiaide/theia:next
        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 verbunden sind, getrennt vom Rest des Clusters. Die Bereitstellung besteht aus einer Instanz des theiaide/theia:next-Docker-Image, wobei Port 3000 für den Container verfügbar ist. Der Dienst sucht nach der Bereitstellung und ordnet den Container-Port dem üblichen HTTP-Port 80 zu, um Zugriff im Cluster auf Eclipse Theia zu ermöglichen.

Der Ingress enthält eine Regel, um den Dienst bei Port 80 an Ihrer gewünschten Domäne extern bereitzustellen. In den Anmerkungen geben Sie an, dass zur Bearbeitung von Anfragen der Nginx Ingress Controller verwendet werden soll. Vergessen Sie nicht, theia.your_domain durch Ihre gewünschte Domäne zu ersetzen, die Sie auf den Load Balancer Ihres Clusters verwiesen haben. Speichern und schließen Sie dann die Datei.

Speichern und schließen Sie die Datei.

Erstellen Sie anschließend die Konfiguration in Kubernetes, indem Sie folgenden Befehl ausführen:

  • kubectl create -f eclipse-theia.yaml

Sie sehen die folgende Ausgabe:

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 überprüfen, indem Sie folgenden Befehl ausführen:

  • kubectl get pods -w -n theia

Die Ausgabe sieht in etwa folgendermaßen aus:

Output
NAME READY STATUS RESTARTS AGE theia-next-847d8c8b49-jt9bc 0/1 ContainerCreating 0 22s

Nach einer gewissen Zeit ändert sich der Status in RUNNING, was bedeutet, dass Sie Eclipse Theia erfolgreich in Ihrem Cluster installiert haben.

Navigieren Sie im Browser zu Ihrer Domäne. Sie sehen die Standardoberfläche des Eclipse Theia-Editors.

Die Standardoberfläche des Eclipse Theia-Editors

Sie haben Eclipse Theia in Ihrem DigitalOcean Kubernetes-Cluster bereitgestellt und in Ihrer gewünschten Domäne mit einem Ingress verfügbar gemacht. Als Nächstes sichern Sie den Zugriff auf Ihre Eclipse Theia-Bereitstellung, indem Sie die Anmeldeauthentifizierung aktivieren.

Schritt 2 — Aktivieren der Anmeldeauthentifizierung für Ihre Domäne

In diesem Schritt aktivieren Sie für Ihre Eclipse Theia-Umgebung die Authentifizierung mit Benutzername und Passwort. Sie erreichen dies, indem Sie zunächst mit dem Dienstprogramm htpasswd eine Liste mit gültigen Anmeldekombinationen zusammenstellen. Dann erstellen Sie ein Kubernetes-Geheimnis, das diese Liste enthält, und konfigurieren den Ingress, um eine entsprechende Authentifizierung von Besuchern vorzunehmen. Am Ende wird Ihre Domäne nur zugänglich sein, wenn der Besucher eine gültige Kombination aus Benutzername und Passwort eingibt. Dadurch werden Gäste und andere unerwünschte Besucher daran gehindert, auf Eclipse Theia zuzugreifen.

Das Dienstprogramm htpasswd stammt vom Apache-Webserver und dient zum Erstellen von Dateien, in denen Listen von Anmeldekombinationen gespeichert werden. Das Format von htpasswd ist eine username:hashed_password-Kombination pro Zeile, was das Format ist, das der Nginx Ingress Controller von der Liste erwartet.

Installieren Sie zunächst htpasswd in Ihrem System, indem Sie folgenden Befehl ausführen:

  • sudo apt install apache2-utils -y

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

  • touch auth

Die Datei muss auth heißen, da der Nginx Ingress Controller davon ausgeht, dass das Geheimnis einen Schlüssel namens data.auth enthält. Wenn der Schlüssel fehlt, gibt der Controller den HTTP 503-Status Dienst nicht verfügbar zurück.

Fügen Sie auth eine Kombination aus Benutzername und Passwort hinzu, indem Sie folgenden Befehl ausführen:

  • htpasswd auth username

Denken Sie daran, username durch Ihren gewünschten Benutzernamen zu ersetzen. Sie werden nach einem begleitenden Passwort gefragt, bevor die Kombination dann der Datei auth hinzugefügt wird. Sie können diesen Befehl für so viele Benutzer wiederholen, wie Sie hinzufügen möchten.

Anmerkung: Wenn im System, mit dem Sie arbeiten, htpasswd nicht installiert ist, können Sie stattdessen eine dockerisierte Version verwenden.

Dafür muss Docker auf Ihrem Rechner installiert sein. Eine Anleitung dazu finden Sie in der offiziellen Dokumentation.

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

  • docker run --rm -it httpd htpasswd -n <username>

Denken Sie daran, <username> durch den gewünschten Benutzernamen zu ersetzen. Sie werden nach einem Passwort gefragt. Die Anmeldekombination mit Hash wird in der Konsole ausgeschrieben; Sie müssen sie am Ende der Datei auth manuell hinzufügen. Wiederholen Sie diesen Vorgang für so viele Anmeldungen, wie Sie hinzufügen möchten.

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

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

Sie können das Geheimnis anzeigen mit:

  • kubectl get secret theia-basic-auth -o yaml -n theia

Die Ausgabe sieht ungefähr so aus:

Output
apiVersion: v1 data: auth: c2FtbXk6JGFwcjEkVFMuSDdyRWwkaFNSNWxPbkc0OEhncmpGZVFyMzEyLgo= kind: Secret metadata: creationTimestamp: "..." name: theia-basic-auth namespace: default resourceVersion: "10900" selfLink: /api/v1/namespaces/default/secrets/theia-basic-auth uid: 050767b9-8823-4fd3-b498-5f11074f768b type: Opaque

Als Nächstes müssen Sie den Ingress so bearbeiten, dass er das Geheimnis verwendet. Öffnen Sie die Bereitstellungskonfiguration zum Bearbeiten:

  • nano eclipse-theia.yaml

Fügen Sie in Ihrer Datei die hervorgehobenen Zeilen hinzu:

eclipse-theia.yaml
apiVersion: v1
kind: Namespace
metadata:
  name: theia
---
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: theia-next
  namespace: theia
  annotations:
    kubernetes.io/ingress.class: nginx
    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:
  rules:
  - host: theia.your_domain
    http:
      paths:
      - backend:
          serviceName: theia-next
          servicePort: 80
...

Geben Sie zuerst in der Anmerkung auth-type an, dass der Authentifizierungstyp basic ist. Das bedeutet, dass Nginx vom Benutzer verlangt, einen Benutzernamen und ein Passwort einzugeben. Dann geben Sie in auth-secret an, dass das Geheimnis, das die Liste mit gültigen Kombinationen enthält, theia-basic-auth lautet. Dieses Geheimnis haben Sie gerade erstellt. Die verbleibende Anmerkung auth-realm gibt eine Nachricht an, die dem Benutzer als Erklärung zur vorgeschriebenen Authentifizierung angezeigt wird. Sie können die in diesem Feld enthaltene Nachricht nach Belieben ändern.

Speichern und schließen Sie die Datei.

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

  • kubectl apply -f eclipse-theia.yaml

Sie sehen die folgende Ausgabe:

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

Navigieren Sie im Browser zu Ihrer Domäne, wo Sie sich anmelden müssen.

Sie haben für Ihren Ingress die grundlegende Anmeldeauthentifizierung aktiviert, indem Sie ihn so konfiguriert haben, dass das Geheimnis mit der Hash-Kombination aus Benutzername und Passwort verwendet wird. Im nächsten Schritt sichern Sie den Zugriff durch Hinzufügen von TLS-Zertifikaten, sodass der Datenverkehr zwischen Ihnen und Ihrer Eclipse Theia-Umgebung verschlüsselt bleibt.

Schritt 3 — Anwenden von Let’s Encrypt-HTTPS-Zertifikaten

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

Öffnen Sie eclipse-theia.yaml, um die Datei zu bearbeiten:

  • nano eclipse-theia.yaml

Fügen Sie die hervorgehobenen Zeilen Ihrer Datei hinzu und ersetzen Sie dabei die Platzhalterdomäne durch Ihre eigene Domäne:

eclipse-theia.yaml
apiVersion: v1
kind: Namespace
metadata:
  name: theia
---
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: theia-next
  namespace: theia
  annotations:
    kubernetes.io/ingress.class: nginx
    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
  rules:
  - host: theia.your_domain
    http:
      paths:
      - backend:
          serviceName: theia-next
          servicePort: 80
...

Geben Sie zunächst den letsencrypt-prod-ClusterIssuer an, den Sie im Rahmen der Voraussetzungen erstellt haben, da dieser Aussteller der Bereitstellung von Zertifikaten für diesen Ingress dient. Dann geben Sie im Abschnitt tls die genaue Domäne, die gesichert werden soll, sowie einen Namen für ein Geheimnis an, das diese Zertifikate enthalten wird.

Speichern und schließen Sie die Datei.

Wenden Sie die Änderungen in Ihrem Cluster an, indem Sie folgenden Befehl ausführen:

  • kubectl apply -f eclipse-theia.yaml

Die Ausgabe sieht ungefähr so aus:

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

Es dauert einige Minuten, bis die Zertifikate bereitgestellt und vollständig angewendet werden. Sie können den Fortschritt verfolgen, indem Sie die Ausgabe des folgenden Befehls überprüfen:

  • kubectl describe certificate theia-prod -n theia

Wenn der Befehl abgeschlossen ist, sieht das Ende der Ausgabe ungefähr so aus:

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 Domäne in Ihrem Browser. Sie sehen auf der linken Seite der Adressleiste ein grünes Schloss, was darauf hinweist, dass die Verbindung gesichert ist.

Sie haben den Ingress so konfiguriert, dass Let’s Encrypt-Zertifikate verwendet werden, um Ihre Eclipse Theia-Installation sicherer zu machen. Jetzt können Sie die Standardbenutzeroberfläche von Eclipse Theia überprüfen.

Schritt 3 — Benutzen der Eclipse Theia-Benutzeroberfläche

In diesem Abschnitt werden Sie einige Funktionen von Eclipse Theia erkunden.

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

Eclipse-Theia-GUI – Seitenbereich

Diese Leiste ist anpassbar: Sie können diese Ansichten in eine andere Reihenfolge bringen oder aus der Leiste entfernen. Standardmäßig öffnet die erste Ansicht das Explorer-Feld, das eine baumartige Navigation der Struktur des Projekts bereitstellt. Hier können Sie Ihre Ordner und Dateien verwalten – erstellen, löschen, verschieben und umbenennen je nach Bedarf.

Sobald Sie über das Menü Datei eine neue Datei erstellt haben, öffnet sich eine leere Datei in einer neuen Registerkarte. Sobald sie gespeichert wurde, können Sie den Namen der Datei im Seitenfeld des Explorers sehen. Erstellen Sie Ordner durch Rechtsklick 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.

Eclipse Theia-GUI – Neuer Ordner

Die beiden nächsten Optionen bieten Zugriff auf die Funktion zum Suchen und Ersetzen. Die darauffolgende Option bietet eine Ansicht von Versionsverwaltungssystemen, die Sie möglicherweise verwenden, wie z. B. Git.

Die letzte Ansicht ist die Debugger-Option, die alle gängigen Aktionen zum Debuggen in dem Feld bereitstellt. Debugging-Konfigurationen können Sie in der Datei launch.json speichern.

Debugger-Ansicht mit launch.json geöffnet

Der zentrale Teil der GUI ist Ihr Editor, den Sie für die Codebearbeitung durch Tabs trennen können. Sie können in der Bearbeitungsansicht zwischen einem Rastersystem oder Dateien nebeneinander wechseln. Eclipse Theia unterstützt, wie alle modernen IDEs, Syntaxhervorhebung für Ihren Code.

Rasteransicht des Editors

Sie können sich Zugriff auf ein Terminal verschaffen, indem Sie Strg+Umschalt+` eingeben oder im oberen Menü auf Terminal klicken und Neues Terminal auswählen. Das Terminal öffnet sich in einem unteren Feld und sein Arbeitsverzeichnis wird auf den Arbeitsbereich des Projekts festgelegt, der die im Explorer-Seitenbereich angezeigten Dateien und Ordner erhält.

Terminal geöffnet

Sie haben sich nun einen Überblick über die Eclipse Theia-Benutzeroberfläche und einige der am häufigsten verwendeten Funktionen verschafft.

Zusammenfassung

Sie haben nun Eclipse Theia, eine vielseitige Cloud-IDE, in Ihrem DigitalOcean Kubernetes-Cluster installiert. Sie haben sie mit einem kostenlosen Let’s Encrypt-TLS-Zertifikat gesichert und die Instanz so eingerichtet, dass eine Anmeldung des Benutzers vorgeschrieben ist. Sie können damit an Ihrem Quellcode und Dokumenten einzeln arbeiten oder im Team zusammenarbeiten. Sie können auch versuchen, Ihre eigene Version von Eclipse Theia zu erstellen, wenn Sie zusätzliche Funktionen benötigen. Weitere Informationen dazu finden Sie unter Theia Docs.

Creative Commons License