序章
開発者ツールがクラウドに移行するにつれ、クラウドIDE(統合開発環境)プラットフォームの作成と採用が拡大しています。 Cloud IDEは、Webブラウザーを介してあらゆるタイプの最新デバイスからアクセスでき、リアルタイムコラボレーションシナリオに多くの利点を提供します。 クラウドIDEでの作業は、プラットフォームの非互換性を最小限に抑えながら、あなたとあなたのチームに統合された開発およびテスト環境を提供します。 ネイティブにクラウドテクノロジーに基づいているため、クラスターを利用してタスクを実行できます。これは、単一の開発コンピューターの能力と信頼性を大幅に超える可能性があります。
Eclipse Theia は、リモートサーバー上で実行され、Webブラウザーからアクセスできる拡張可能なクラウドIDEです。 視覚的には、 Microsoft Visual Studio Code と同様に表示および動作するように設計されています。つまり、多くのプログラミング言語をサポートし、柔軟なレイアウトを備え、端末が統合されています。 Eclipse Theiaを他のクラウドIDEソフトウェアと区別するのは、その拡張性です。 カスタム拡張機能を使用して変更できます。これにより、ニーズに合ったクラウドIDEを作成できます。
このチュートリアルでは、DigitalOceanKubernetesクラスターにEclipseTheiaクラウドIDEプラットフォームのデフォルトバージョンをセットアップし、Let’s Encrypt証明書で保護され、訪問者に認証を要求するドメインで公開します。 最終的には、KubernetesクラスターでEclipse Theiaを実行し、HTTPS経由で利用できるようになり、訪問者はログインする必要があります。
前提条件
- 接続が次のように構成されたDigitalOceanKubernetesクラスター
kubectl
デフォルト。 設定方法の説明kubectl
クラスターを作成すると、クラスターに接続ステップの下に表示されます。 DigitalOceanでKubernetesクラスタを作成するには、 KubernetesQuickstartをお読みください。 - ローカルマシンにインストールされているHelm3パッケージマネージャー。 Helm 3 PackageManagerチュートリアルを使用してKubernetesクラスターにソフトウェアをインストールする方法のステップ1を完了します。
- IngressリソースでExternalDNSを使用するために、Helmを使用してクラスターにインストールされたNginxIngressController。 これを行うには、Helmを使用してDigitalOceanKubernetesでNginxIngressを設定する方法に従ってください。
- 完全に登録されたドメイン名。 このチュートリアルでは、
theia.your_domain
全体を通して。 Namecheap でドメイン名を購入するか、 Freenom で無料でドメイン名を取得するか、選択したドメイン登録事業者を使用できます。
ステップ1—EclipseTheiaのインストールと公開
まず、EclipseTheiaをDigitalOceanKubernetesクラスターにインストールします。 次に、Nginx Ingressを使用して、目的のドメインで公開します。
前提条件の一部として2つのサンプルデプロイメントとリソースを作成したため、次のコマンドを実行してそれらを自由に削除できます。
- kubectl delete -f hello-kubernetes-ingress.yaml
- kubectl delete -f hello-kubernetes-first.yaml
- kubectl delete -f hello-kubernetes-second.yaml
このチュートリアルでは、展開構成をローカルマシンの次の名前のファイルに保存します。 eclipse-theia.yaml
. 次のコマンドを使用して作成します。
- nano 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
この構成は、名前空間、デプロイメント、サービス、および入力を定義します。 名前空間は呼ばれます theia
Eclipse Theiaに関連するすべてのKubernetesオブジェクトが含まれ、クラスターの残りの部分から分離されます。 デプロイメントは、ポートを備えたTheiaDockerイメージの1つのインスタンスで構成されます 3000
コンテナに露出。 サービスはデプロイメントを探し、コンテナポートを通常のHTTPポートに再マップします。 80
、EclipseTheiaへのクラスター内アクセスを許可します。
Ingressには、ポートでサービスを提供するためのルールが含まれています 80
希望するドメインの外部。 そのアノテーションで、リクエスト処理にNginxIngressControllerを使用するように指定します。 交換することを忘れないでください theia.your_domain
クラスタのロードバランサを指定した目的のドメインを使用して、ファイルを保存して閉じます。
ファイルを保存して終了します。
次に、次のコマンドを実行して、Kubernetesで構成を作成します。
- kubectl apply -f eclipse-theia.yaml
出力は次のようになります。
Outputnamespace/theia created
ingress.networking.k8s.io/theia-next created
service/theia-next created
deployment.apps/theia-next created
以下を実行することで、EclipseTheiaポッドの作成を見ることができます。
- kubectl get pods -w -n theia
出力は次のようになります。
OutputNAME READY STATUS RESTARTS AGE
theia-next-6f6b98dd4f-qknhb 1/1 Running 0 2m30s
しばらくすると、ステータスがに変わります RUNNING
、これは、EclipseTheiaがクラスターに正常にインストールされたことを意味します。
ブラウザでドメインに移動します。 デフォルトのEclipseTheiaエディターGUIが表示されます。
EclipseTheiaをDigitalOceanKubernetesクラスターにデプロイし、Ingressを使用して目的のドメインに公開しました。 次に、ログイン認証を有効にすることで、EclipseTheiaデプロイメントへのアクセスを保護します。
ステップ2—ドメインのログイン認証を有効にする
このステップでは、EclipseTheiaデプロイメントのユーザー名とパスワードの認証を有効にします。 これを実現するには、最初に、を使用して有効なログインの組み合わせのリストをキュレートします。 htpasswd
効用。 次に、そのリストを含むKubernetesシークレットを作成し、それに応じて訪問者を認証するようにIngressを設定します。 最終的に、訪問者が有効なユーザー名とパスワードの組み合わせを入力した場合にのみ、ドメインにアクセスできます。 これにより、ゲストやその他の不要な訪問者がEclipseTheiaにアクセスできなくなります。
htpasswdユーティリティはApacheWebサーバーから提供され、ログインの組み合わせのリストを格納するファイルを作成するために使用されます。 のフォーマット htpasswd
ファイルは1つです username:hashed_password
1行あたりの組み合わせ。これは、NginxIngressControllerがリストに準拠することを期待する形式です。
まず、パッケージマネージャーのキャッシュを更新します。
- sudo apt update
次に、インストールします htpasswd
次のコマンドを実行して、システムで次のコマンドを実行します。
- sudo apt install apache2-utils -y
リストをというファイルに保存します auth
. 次のコマンドを実行して作成します。
- touch auth
このファイルには名前を付ける必要があります auth
Nginx Ingress Controllerは、シークレットに次のキーが含まれていることを期待しているためです data.auth
. 欠落している場合、コントローラーはHTTP503を返します Service Unavailable
状態。
ユーザー名とパスワードの組み合わせをに追加します auth
次のコマンドを実行します。
- htpasswd auth username
交換することを忘れないでください username
ご希望のユーザー名で。 付随するパスワードの入力を求められ、その組み合わせがに追加されます auth
ファイル。 追加したい数のユーザーに対してこのコマンドを繰り返すことができます。
注:作業しているシステムに htpasswd
インストールすると、代わりにDocker化バージョンを使用できます。
マシンにDockerをインストールする必要があります。 その方法については、公式ドキュメントにアクセスしてください。
次のコマンドを実行して、ドッキングされたバージョンを実行します。
- docker run --rm -it httpd htpasswd -n <username>
交換することを忘れないでください <username>
使用するユーザー名を使用します。 パスワードの入力を求められます。 ハッシュ化されたログインの組み合わせはコンソールに書き出され、手動で最後に追加する必要があります auth
ファイル。 追加したい数のログインに対してこのプロセスを繰り返します。
完了したら、次のコマンドを実行して、ファイルの内容を使用してKubernetesに新しいシークレットを作成します。
- kubectl create secret generic theia-basic-auth --from-file=auth -n theia
あなたは秘密を見ることができます:
- kubectl get secret theia-basic-auth -o yaml -n theia
出力は次のようになります。
OutputapiVersion: 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を編集する必要があります。 編集のためにデプロイメント構成を開きます。
- nano 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
注釈は、認証が必要な理由の説明としてユーザーに表示されるメッセージを指定します。 このフィールドに含まれるメッセージを好みに合わせて変更できます。
ファイルを保存して閉じます。
変更をクラスターに伝達するには、次のコマンドを実行します。
- kubectl apply -f eclipse-theia.yaml
次の出力が表示されます。
Outputnamespace/theia unchanged
ingress.networking.k8s.io/theia-next configured
service/theia-next unchanged
deployment.apps/theia-next unchanged
ブラウザでドメインに移動します。ここで、ログインするように求められます。
ハッシュされたユーザー名とパスワードの組み合わせを含むシークレットを使用するように設定することで、Ingressで基本的なログイン認証を有効にしました。 次のステップでは、TLS証明書を追加してアクセスをさらに保護し、EclipseTheiaデプロイメント間のトラフィックが暗号化されたままになるようにします。
ステップ3—Let’sEncryptのHTTPS証明書を適用する
次に、Cert-Managerが自動的にプロビジョニングするIngressにLet’s Encrypt証明書を適用して、EclipseTheiaのインストールを保護します。 このステップを完了すると、EclipseTheiaのインストールにHTTPS経由でアクセスできるようになります。
開ける eclipse-theia.yaml
編集用:
- nano 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。 次に、 tls
セクションでは、保護する必要のある正確なドメインと、それらの証明書を保持するシークレットの名前を指定します。
ファイルを保存して終了します。
次のコマンドを実行して、変更をクラスターに適用します。
- kubectl apply -f eclipse-theia.yaml
出力は次のようになります。
Outputnamespace/theia unchanged
ingress.networking.k8s.io/theia-next configured
service/theia-next unchanged
deployment.apps/theia-next unchanged
証明書がプロビジョニングされ、完全に適用されるまでに数分かかります。 次のコマンドの出力を観察することで、進行状況を追跡できます。
- 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を構成したので、EclipseTheiaのデプロイメントがより安全になります。 これで、デフォルトのEclipseTheiaユーザーインターフェイスを確認できます。
ステップ4—EclipseTheiaインターフェースを使用する
このセクションでは、EclipseTheiaインターフェースのいくつかの機能について説明します。
IDEの左側には、サイドパネルで最も一般的に使用される機能を開く4つのボタンが縦に並んでいます。
このバーはカスタマイズ可能であるため、これらのビューを別の順序に移動したり、バーから削除したりできます。 デフォルトでは、最初のビューは、プロジェクトの構造のツリーのようなナビゲーションを提供するエクスプローラーパネルを開きます。 ここでフォルダとファイルを管理できます—必要に応じて、それらの作成、削除、移動、および名前の変更を行います。
ファイルメニューから新しいファイルを作成すると、空のファイルが新しいタブで開きます。 保存すると、エクスプローラのサイドパネルでファイルの名前を表示できます。 フォルダを作成するには、エクスプローラのサイドバーを右クリックし、新しいフォルダをクリックします。 フォルダの名前をクリックしたり、ファイルやフォルダを階層の上位にドラッグアンドドロップして新しい場所に移動したりすることで、フォルダを展開できます。
次のオプションは、検索および置換機能へのアクセスを提供します。 続いて、 Git など、使用している可能性のあるソース管理システムのビューを示します。
次のビューはデバッガーオプションです。これは、パネルでデバッグするためのすべての一般的なアクションを提供します。 デバッグ構成をに保存できます launch.json
ファイル。
最後のオプションでは、拡張機能を表示してインストールできます。
GUIの中心部分はエディターであり、コード編集用にタブで区切ることができます。 編集ビューをグリッドシステムまたはサイドバイサイドファイルに変更できます。 最新のすべてのIDEと同様に、EclipseTheiaはコードの構文の強調表示をサポートしています。
次のように入力すると、端末にアクセスできます CTRL+SHIFT+`
、または上部メニューのターミナルをクリックし、新しいターミナルを選択します。 ターミナルが下のパネルで開き、その作業ディレクトリがプロジェクトのワークスペースに設定されます。このワークスペースには、エクスプローラのサイドパネルに表示されるファイルとフォルダが含まれています。
クラスター上のEclipseTheiaデプロイメントを破棄する場合は、次のコマンドを実行します。
- kubectl delete -f eclipse-theia.yaml
Eclipse Theiaインターフェースの概要を調べ、最も一般的に使用される機能のいくつかを確認しました。
結論
これで、汎用性の高いクラウドIDEであるEclipseTheiaがDigitalOceanKubernetesクラスターにインストールされました。 無料のLet’sEncryptTLS証明書で保護し、訪問者からのログインを要求するようにインスタンスを設定しました。 ソースコードとドキュメントを個別に処理することも、チームと協力することもできます。 追加の機能が必要な場合は、独自のバージョンのEclipseTheiaを作成してみることもできます。 これを行う方法の詳細については、 Theiadocsにアクセスしてください。