DigitalOcean Kubernetes上にEclipse Theia Cloud IDEプラットフォームを設定する方法

著者は、寄付プログラムの一環としてフリー・オープンソース基金を受け取ることを選択しました。

はじめに

開発者ツールがクラウドに移行する中、クラウドIDE(統合開発環境)プラットフォームの作成と採用が増えています。クラウドIDEは、ウェブブラウザからあらゆる種類のモダンデバイスからアクセス可能であり、リアルタイムの共同作業シナリオに多くの利点を提供します。クラウドIDEで作業することは、チーム全体のために統一された開発およびテスト環境を提供し、プラットフォームの互換性の問題を最小限に抑えます。クラウド技術をベースにしているため、クラスターを利用してタスクを実行することができ、これにより単一の開発コンピュータのパワーと信頼性を大幅に上回ることが可能です。

Eclipse Theiaは、リモートサーバー上で実行され、ウェブブラウザからアクセス可能な拡張可能なクラウドIDEです。外観上は、Microsoft Visual Studio Codeと類似した見た目と振る舞いに設計されており、多くのプログラミング言語をサポートし、柔軟なレイアウト、統合ターミナルを備えています。Eclipse Theiaを他のクラウドIDEソフトウェアから区別するのは、その拡張性です。カスタム拡張機能を使用して変更でき、ニーズに合ったクラウドIDEを作成することができます。

このチュートリアルでは、デジタルオーシャンのKubernetesクラスターにEclipse TheiaクラウドIDEプラットフォームのデフォルトバージョンをセットアップし、Let’s Encrypt証明書で保護し、訪問者に認証を要求してドメインで公開します。最終的には、KubernetesクラスターでHTTPS経由でEclipse Theiaを実行し、訪問者にログインする必要があります。

前提条件

  • A DigitalOcean Kubernetes cluster with your connection configured as the kubectl default. Instructions on how to configure kubectl are shown under the Connect to your Cluster step when you create your cluster. To create a Kubernetes cluster on DigitalOcean, read the Kubernetes Quickstart.
  • ローカルマシンにHelm 3パッケージマネージャーがインストールされていること。Helm 3パッケージマネージャーを使用したKubernetesクラスターにソフトウェアをインストールする方法のステップ1を完了してください。
  • 外部DNSをIngressリソースで使用するために、Helmを使用してクラスターにNginx Ingress Controllerをインストールする必要があります。これを行うには、デジタルオーシャンKubernetesでHelmを使用してNginx Ingressをセットアップする方法に従ってください。
  • A fully registered domain name. This tutorial will use theia.your_domain throughout. You can purchase a domain name on Namecheap, get one for free on Freenom, or use the domain registrar of your choice.

ステップ1 — Eclipse Theiaのインストールと公開

Eclipse TheiaをDigitalOcean Kubernetesクラスターにインストールします。次に、Nginx Ingressを使用して、希望のドメインに公開します。

前提条件として2つの例のデプロイメントとリソースを作成したので、次のコマンドを実行して自由に削除できます:

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

このチュートリアルでは、デプロイメント構成をローカルマシンに保存し、eclipse-theia.yamlという名前のファイルに保存します。次のコマンドを使用して作成します:

  1. nano eclipse-theia.yaml

ファイルに以下の行を追加します:

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

この構成は、Namespace、Deployment、Service、およびIngressを定義しています。Namespaceはtheiaと呼ばれ、Eclipse Theiaに関連するすべてのKubernetesオブジェクトをクラスターの残りから分離して含みます。 Deploymentには、コンテナーでポート3000が公開されたTheia Dockerイメージの1つのインスタンスが含まれています。 Serviceは、Deploymentを検索し、コンテナーポートを通常のHTTPポートである80にリマップし、クラスター内でEclipse Theiaへのアクセスを許可します。

Ingressには、外部ポート80でServiceを提供するルールが含まれています。その注釈では、リクエスト処理にNginx Ingress Controllerを使用するように指定されています。theia.your_domainをクラスターのロードバランサーにポイントした希望のドメインで置き換えて、ファイルを保存して閉じてください。

ファイルを保存して閉じます。

次に、次のコマンドを実行してKubernetesで構成を作成します:

  1. kubectl apply -f eclipse-theia.yaml

出力は次のようになります:

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

Eclipse TheiaのPodの作成を観察するには、次を実行します:

  1. kubectl get pods -w -n theia

出力は次のようになります:

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

しばらくすると、ステータスがRUNNINGに変わります。これは、Eclipse Theiaがクラスタに正常にインストールされたことを意味します。

ブラウザでドメインに移動してください。デフォルトのEclipse TheiaエディタGUIが表示されます:

あなたはEclipse TheiaをDigitalOcean Kubernetesクラスタに展開し、それを希望のドメインでIngressで公開しました。次に、Eclipse Theiaデプロイメントへのアクセスをセキュリティで保護します。

ステップ2 — ドメインのログイン認証の有効化

このステップでは、Eclipse Theiaデプロイメントのユーザー名とパスワード認証を有効にします。まず、htpasswdユーティリティを使用して有効なログインの組み合わせのリストを作成します。次に、そのリストを含むKubernetesシークレットを作成し、Ingressをそれに従って訪問者を認証するように構成します。最終的には、訪問者が有効なユーザー名とパスワードの組み合わせを入力した場合にのみ、ドメインにアクセスできるようになります。これにより、ゲストや他の不要な訪問者がEclipse Theiaにアクセスするのを防ぎます。

htpasswd ユーティリティは、Apache Webサーバーから提供され、ログイン組み合わせのリストを格納するファイルを作成するために使用されます。 htpasswd ファイルの形式は、1行ごとに1つの username:hashed_password の組み合わせであり、これはNginx Ingress Controllerがリストを準拠する形式として期待する形式です。

まず、パッケージマネージャーキャッシュを更新します:

  1. sudo apt update

次に、次のコマンドを実行してシステムに htpasswd をインストールします:

  1. sudo apt install apache2-utils -y

リストを auth という名前のファイルに保存します。次のコマンドを実行して作成します:

  1. touch auth

このファイルは auth という名前である必要があります。なぜなら、Nginx Ingress Controllerはシークレットに data.auth というキーを含むことを期待しているからです。欠落している場合、コントローラーはHTTP 503 Service Unavailable ステータスを返します。

auth にユーザー名とパスワードの組み合わせを追加するには、次のコマンドを実行します:

  1. htpasswd auth username

希望するユーザー名で username を置き換えてください。関連するパスワードを入力するように求められ、その組み合わせが auth ファイルに追加されます。これを追加したいユーザー数だけ繰り返すことができます。

注意: システムに htpasswd がインストールされていない場合は、代わりにDocker化されたバージョンを使用できます。

マシンにDockerがインストールされている必要があります。その手順については、公式ドキュメントを参照してください。

次のコマンドを実行して、Docker化されたバージョンを実行します:

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

<username>を使用したいユーザー名に置き換えてください。パスワードが求められます。ハッシュ化されたログインの組み合わせがコンソールに書き出され、手動でそれをauthファイルの末尾に追加する必要があります。このプロセスを追加するログイン数だけ繰り返してください。

完了したら、次のコマンドを実行してファイルの内容でKubernetes内に新しいシークレットを作成します:

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

シークレットは次のコマンドで確認できます:

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

出力は次のようになります:

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

次に、シークレットを使用するようにIngressを編集する必要があります。編集用にデプロイメント構成を開きます:

  1. nano eclipse-theia.yaml

ファイルに次の行を追加します:

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
...

最初に、auth-typeアノテーションで認証タイプがbasicであることを指定します。これは、Nginxがユーザーにユーザー名とパスワードの入力を要求することを意味します。次に、auth-secretで、有効な組み合わせのリストを含むシークレットがtheia-basic-authであることを指定します。これは、さきほど作成したものです。残りのauth-realmアノテーションでは、ユーザーに認証が必要な理由の説明として表示されるメッセージが指定されます。このフィールドに含まれるメッセージはお好みで変更できます。

ファイルを保存して閉じます。

変更をクラスタに伝播するには、次のコマンドを実行します:

  1. kubectl apply -f eclipse-theia.yaml

出力は次のようになります:

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

ブラウザでドメインに移動すると、ログインを求められるようになります。

Ingressに基本的なログイン認証を有効にし、ハッシュ化されたユーザー名とパスワードの組み合わせを含むシークレットを使用するように構成しました。次のステップでは、TLS証明書を追加してアクセスをさらに保護し、自分とEclipse Theiaデプロイメント間のトラフィックが暗号化されるようにします。

ステップ3 — Let’s Encrypt HTTPS証明書の適用

次に、IngressにLet’s Encrypt証明書を適用して、Cert-Managerが自動的にプロビジョニングします。このステップを完了すると、Eclipse TheiaインストールにHTTPS経由でアクセスできるようになります。

eclipse-theia.yamlを編集します:

  1. nano eclipse-theia.yaml

以下の強調表示された行をファイルに追加し、プレースホルダードメインをご自身のものに置き換えてください:

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
...

まず、先行条件の一環として作成したletsencrypt-prod ClusterIssuerを、このIngressの証明書をプロビジョニングするために使用する発行者として指定します。次に、tlsセクションで、セキュリティが確保される必要のある正確なドメインと、それらの証明書を保持するシークレットの名前を指定します。

ファイルを保存して終了します。

次のコマンドを実行して、クラスターに変更を適用します:

  1. kubectl apply -f eclipse-theia.yaml

出力は次のようになります:

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

証明書のプロビジョニングと完全な適用には数分かかります。次のコマンドの出力を観察することで進捗状況を追跡できます:

  1. kubectl describe certificate theia-prod -n theia

終了すると、出力の最後は次のようになります:

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

ブラウザでドメインを更新してください。アドレスバーの左端には、接続が安全であることを示す緑の南京錠が表示されます。

Let’s Encrypt証明書を使用するようにIngressを構成しましたので、Eclipse Theiaの展開がより安全になりました。これで、デフォルトのEclipse Theiaユーザーインターフェイスを確認できます。

ステップ4 — Eclipse Theia インターフェースの使用

このセクションでは、Eclipse Theiaインターフェースの機能のいくつかを探ります。

IDEの左側には、サイドパネルで最もよく使用される機能を開く4つのボタンの垂直列があります。

このバーはカスタマイズ可能ですので、これらのビューを異なる順序に移動したり、バーから削除したりすることができます。デフォルトでは、最初のビューがエクスプローラーパネルを開き、プロジェクトの構造をツリー状にナビゲートします。ここで、フォルダやファイルを作成、削除、移動、名前変更することができます。

ファイルメニューを通じて新しいファイルを作成すると、新しいタブで空のファイルが開きます。保存すると、エクスプローラーサイドパネルにファイルの名前が表示されます。フォルダを作成するには、エクスプローラーサイドバーを右クリックし、新しいフォルダをクリックします。フォルダを展開するには、その名前をクリックしたり、ファイルやフォルダを階層の上部にドラッグアンドドロップして新しい場所に移動させることもできます。

次のオプションでは、検索と置換機能にアクセスできます。その次に、Gitなどの使用しているソースコントロールシステムの表示が提供されます。

次の表示は、デバッガーオプションであり、パネル内のデバッグに関するすべての一般的なアクションが提供されます。デバッグ構成はlaunch.jsonファイルに保存できます。

最後のオプションでは、拡張機能を表示およびインストールできます:

GUIの中心部はエディタであり、コード編集用のタブで分割できます。編集ビューをグリッドシステムに変更したり、サイドバイサイドのファイルに変更したりできます。Eclipse Theiaは、すべての現代のIDEと同様に、コードのシンタックスハイライトをサポートしています。

ターミナルにアクセスするには、CTRL+SHIFT+` を入力するか、上部メニューのターミナルをクリックして新しいターミナルを選択します。ターミナルは下部パネルに開き、その作業ディレクトリはプロジェクトのワークスペースに設定されます。ワークスペースにはエクスプローラーサイドパネルに表示されるファイルとフォルダが含まれています。

クラスター上のEclipse Theiaデプロイメントを破棄する場合は、次のコマンドを実行してください:

  1. kubectl delete -f eclipse-theia.yaml

あなたはEclipse Theiaのインターフェースの高レベルな概要を探索し、最も一般的に使用される機能のいくつかを見直しました。

結論

今、あなたはDigitalOcean KubernetesクラスターにEclipse Theia、多機能なクラウドIDEをインストールしました。それを無料のLet’s Encrypt TLS証明書でセキュリティで保護し、訪問者からのログインを必要とするようにインスタンスを設定しました。個別にソースコードやドキュメントで作業したり、チームと共同作業したりできます。また、追加の機能が必要な場合は、独自のEclipse Theiaのバージョンをビルドすることもできます。その方法の詳細については、Theiaドキュメントをご覧ください。

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