作者选择了 自由和开源基金作为 写给捐款计划的一部分接受捐款。
介绍
随着开发人员的工具转向云,云 IDE(集成开发环境)平台的创建和采用正在增加。云 IDEs可以通过Web浏览器从任何现代设备访问,并且为实时协作场景提供了无数的优势。在云 IDE中工作为您和您的团队提供了一个统一的开发和测试环境,同时最大限度地减少平台不兼容性。
Eclipse Theia是一个可扩展的云 IDE,在远程服务器上运行,并可通过 Web 浏览器访问。视觉上,它设计的外观和行为类似于 Microsoft Visual Studio Code,这意味着它支持许多编程语言,具有灵活的布局,并具有集成的终端。 区分 Eclipse Theia 与其他云 IDE 软件是它的扩展性;它可以通过 自定义扩展进行修改,从而允许您创建适合您的需求的云 IDE。
在本教程中,您将在您的 DigitalOcean Kubernetes 集群上设置 Eclipse Theia 云 IDE 平台的默认版本,并将其暴露在您的域中,使用 Let’s Encrypt 证书进行安全保护,并要求访问者进行身份验证。
前提条件
您在 DigitalOcean 上创建一个 Kubernetes 集群时,请参阅 Kubernetes Quickstart。 在本地计算机上安装了 Helm 3 包管理器。 在 How To Install Software on Kubernetes Clusters with the Helm 3 Package Manager教程中完成 Step 1。 在 DigitalOcean 上创建 Kubernetes 集群时,请参阅 Kubernetes Quickstart。 在您的集群上使用 Helm 安装了 Nginx Ingress Controller,以便在您的本地计算机上使用 ExternalDNS 与 Ingress Resources。 要做到这一点,请遵循 [How To Set Up Ingress Software on DigitalOcean Kubernetes Kub
步骤 1 – 安装和暴露 Eclipse Theia
首先,您将安装 Eclipse Theia 到您的 DigitalOcean Kubernetes 集群中,然后,您将使用 Nginx Ingress 将其曝光到您想要的域。
由于您创建了两个示例部署和一个资源作为前提条件的一部分,您可以通过运行以下命令自由删除它们:
1kubectl delete -f hello-kubernetes-ingress.yaml
2kubectl delete -f hello-kubernetes-first.yaml
3kubectl delete -f hello-kubernetes-second.yaml
对于本教程,您将在本地机器上存储部署配置,以名为eclipse-theia.yaml
的文件。
1nano eclipse-theia.yaml
将以下行添加到文件中:
1[label eclipse-theia.yaml]
2apiVersion: v1
3kind: Namespace
4metadata:
5 name: theia
6---
7apiVersion: networking.k8s.io/v1
8kind: Ingress
9metadata:
10 name: theia-next
11 namespace: theia
12spec:
13 ingressClassName: nginx
14 rules:
15 - host: theia.your_domain
16 http:
17 paths:
18 - path: /
19 pathType: Prefix
20 backend:
21 service:
22 name: theia-next
23 port:
24 number: 80
25---
26apiVersion: v1
27kind: Service
28metadata:
29 name: theia-next
30 namespace: theia
31spec:
32 ports:
33 - port: 80
34 targetPort: 3000
35 selector:
36 app: theia-next
37---
38apiVersion: apps/v1
39kind: Deployment
40metadata:
41 labels:
42 app: theia-next
43 name: theia-next
44 namespace: theia
45spec:
46 selector:
47 matchLabels:
48 app: theia-next
49 replicas: 1
50 template:
51 metadata:
52 labels:
53 app: theia-next
54 spec:
55 containers:
56 - image: francoisvans/theia-docker-test
57 imagePullPolicy: Always
58 name: theia-next
59 ports:
60 - containerPort: 3000
此配置定义了一个名称空间、一个部署、一个服务和一个 Ingress. 名称空间被称为theia
,并将包含与 Eclipse Theia 相关的所有 Kubernetes 对象,与群集的其余部分分开。 部署由 Theia Docker 图像的一个实例组成,容器上显示的端口为3000
。 服务寻找了部署,并将容器端口重置到通常的 HTTP 端口为80
,允许集群内访问 Eclipse Theia。
Ingress 包含一个规则,以便在您所想要的域外在端口 80 服务。在其注释中,您指定应该使用 Nginx Ingress 控制器来处理请求。 请记住,用您指向群集的负载平衡器的所需域代替
theia.your_domain`,然后保存并关闭文件。
保存和退出文件。
然后,通过运行以下命令在 Kubernetes 中创建配置:
1kubectl apply -f eclipse-theia.yaml
结果将看起来像这样:
1[secondary_label Output]
2namespace/theia created
3ingress.networking.k8s.io/theia-next created
4service/theia-next created
5deployment.apps/theia-next created
您可以通过运行观看Eclipse Theia pod的创作:
1kubectl get pods -w -n theia
结果将是这样的:
1[secondary_label Output]
2NAME READY STATUS RESTARTS AGE
3theia-next-6f6b98dd4f-qknhb 1/1 Running 0 2m30s
过了一段时间,状态将转换为运行
,这意味着您已成功安装 Eclipse Theia 到您的集群中。
在您的浏览器中导航到您的域,您将看到默认的 Eclipse Theia 编辑器 GUI:
您已将 Eclipse Theia 部署到您的 DigitalOcean Kubernetes 集群中,并通过 Ingress 将其暴露在您想要的域中,接下来,您将通过启用登录身份验证来确保访问 Eclipse Theia 部署。
步骤 2 – 启用您的域名登录身份验证
在此步骤中,您将为您的Eclipse Theia部署启用用户名和密码身份验证。您将通过使用htpasswd
实用的有效登录组合列表来实现此目标。然后,您将创建包含该列表的Kubernetes秘密,并将Ingress配置为相应的访问者身份验证。最终,您的域名只有当访问者输入有效的用户名和密码组合时才可访问。
该 htpasswd
实用程序来自Apache网页服务器,用于创建存储登录组合列表的文件。 htpasswd
文件的格式是每行一个 username:hashed_password
组合,这是 Nginx Ingress Controller预计列表符合的格式。
首先,更新包管理器缓存:
1sudo apt update
然後,在您的系統上安裝「htpasswd」,執行以下命令:
1sudo apt install apache2-utils -y
您将将列表存储在名为auth
的文件中。
1touch auth
这个文件需要被命名为auth
,因为 Nginx Ingress 控制器预计秘密将包含一个名为data.auth
的密钥。
将用户名和密码组合添加到auth
,运行以下命令:
1htpasswd auth username
请记住用您想要的用户名替换用户名
。您将被要求提供附加密码,并将该组合添加到Auth
文件中。
<$>[注]
注: 如果您正在使用的系统没有安装htpasswd
,则可以使用 Dockerized 版本。
您需要在您的计算机上安装 Docker. 有关如何做到这一点的说明,请访问 官方文件。
运行以下命令来运行一个文件化版本:
1docker run --rm -it httpd htpasswd -n <username>
请记住用你想要使用的用户名代替<username>
。你将被要求提供密码。在控制台上将写出哈希登录组合,你将需要手动将其添加到auth
文件的末尾。
完成后,通过运行以下命令在 Kubernetes 中创建一个新的秘密与文件的内容:
1kubectl create secret generic theia-basic-auth --from-file=auth -n theia
你可以看到秘密与:
1kubectl get secret theia-basic-auth -o yaml -n theia
结果将看起来像:
1[secondary_label Output]
2apiVersion: v1
3data:
4 auth: ...
5kind: Secret
6metadata:
7 creationTimestamp: "2021-12-31T17:16:29Z"
8 name: theia-basic-auth
9 namespace: theia
10 resourceVersion: "32437"
11 uid: 47461e23-e281-411b-acfd-cea82fcde41b
12type: Opaque
接下来,您需要编辑 Ingress 以使其使用秘密。
1nano eclipse-theia.yaml
将突出的行添加到您的文件中:
1[label eclipse-theia.yaml]
2apiVersion: v1
3kind: Namespace
4metadata:
5 name: theia
6---
7apiVersion: networking.k8s.io/v1
8kind: Ingress
9metadata:
10 name: theia-next
11 namespace: theia
12 annotations:
13 nginx.ingress.kubernetes.io/auth-type: basic
14 nginx.ingress.kubernetes.io/auth-secret: theia-basic-auth
15 nginx.ingress.kubernetes.io/auth-realm: 'Authentication Required - Eclipse Theia'
16spec:
17 ingressClassName: nginx
18 rules:
19 - host: theia.your_domain
20 http:
21 paths:
22 - path: /
23 pathType: Prefix
24 backend:
25 service:
26 name: theia-next
27 port:
28 number: 80
29...
首先,在auth-type
注释中,您指定身份验证类型为基本
。这意味着 Nginx 将要求用户输入用户名和密码。然后,在auth-secret
中,您指定包含有效组合列表的秘密为theia-basic-auth
,您刚刚创建的秘密。剩余的auth-realm
注释指定了一个信息,将向用户显示为何需要身份验证。
保存并关闭文件。
若要将更改传播到您的集群中,请运行以下命令:
1kubectl apply -f eclipse-theia.yaml
你会看到输出:
1[secondary_label Output]
2namespace/theia unchanged
3ingress.networking.k8s.io/theia-next configured
4service/theia-next unchanged
5deployment.apps/theia-next unchanged
在您的浏览器中导航到您的域,您现在将被要求登录。
您已在您的 Ingress 上启用了基本登录身份验证,通过配置它以使用含有哈希用户名和密码组合的秘密。在下一步中,您将通过添加 TLS 证书来进一步保护访问,以便您和您的 Eclipse Theia 部署之间的流量保持加密。
步骤 3 – 应用 Let’s Encrypt HTTPS 证书
接下来,您将通过将 Let’s Encrypt 证书应用于您的 Ingress 来确保您的 Eclipse Theia 安装,Cert-Manager 将自动提供这些证书。
打开eclipse-theia.yaml
来编辑:
1nano eclipse-theia.yaml
将突出列出的行添加到您的文件中,确保您用自己的域名取代位置持有者:
1[label eclipse-theia.yaml]
2apiVersion: v1
3kind: Namespace
4metadata:
5 name: theia
6---
7apiVersion: networking.k8s.io/v1
8kind: Ingress
9metadata:
10 name: theia-next
11 namespace: theia
12 annotations:
13 nginx.ingress.kubernetes.io/auth-type: basic
14 nginx.ingress.kubernetes.io/auth-secret: theia-basic-auth
15 nginx.ingress.kubernetes.io/auth-realm: 'Authentication Required - Eclipse Theia'
16 cert-manager.io/cluster-issuer: letsencrypt-prod
17spec:
18 tls:
19 - hosts:
20 - theia.your_domain
21 secretName: theia-prod
22 ingressClassName: nginx
23 rules:
24 - host: theia.your_domain
25 http:
26 paths:
27 - path: /
28 pathType: Prefix
29 backend:
30 service:
31 name: theia-next
32 port:
33 number: 80
34...
首先,您指定您创建的‘letsencrypt-prod’ ClusterIssuer 作为发行商的先决条件的一部分,该发行商将用于为此 Ingress 提供证书,然后,在‘tls’ 部分中,您指定应该被保护的确切域名,以及将持有这些证书的秘密的名称。
保存和退出文件。
通过运行以下命令将更改应用于您的集群:
1kubectl apply -f eclipse-theia.yaml
结果将看起来像:
1[secondary_label Output]
2namespace/theia unchanged
3ingress.networking.k8s.io/theia-next configured
4service/theia-next unchanged
5deployment.apps/theia-next unchanged
需要几分钟才能提供证书并完全应用,您可以通过观察下列命令的输出来跟踪进展:
1kubectl describe certificate theia-prod -n theia
当它完成时,输出的结尾将看起来像这样:
1[secondary_label Output]
2...
3Events:
4 Type Reason Age From Message
5 ---- ------ ---- ---- -------
6 Normal GeneratedKey 42m cert-manager Generated a new private key
7 Normal Requested 42m cert-manager Created new CertificateRequest resource "theia-prod-3785736528"
8 Normal Issued 42m cert-manager Certificate issued successfully
在您的浏览器中更新您的域名,您将看到地址栏的左侧显示的绿色锁定,表示连接是安全的。
您已配置 Ingress 以使用 Let's Encrypt 证书,从而使您的 Eclipse Theia 部署更安全。
步骤 4 — 使用 Eclipse Theia 接口
在本节中,您将探索Eclipse Theia界面的一些功能。
在IDE的左侧,有一个四个按钮的垂直行,打开了侧面面板中最常用的功能。
此栏是可自定义的,所以您可以将这些视图移动到不同的顺序或从栏中删除它们. 默认情况下,第一个视图会打开 Explorer 面板,为项目结构提供树形导航。
通过 ** 文件 ** 菜单创建新文件后,你会看到一个空的文件在一个新的卡上打开. 一旦保存,你可以查看文件的名称在 Explorer 侧面面板. 要创建文件夹,右键单击 Explorer 侧面栏,然后单击 ** 新文件夹**. 您可以通过点击其名称来扩展文件夹,并将文件和文件夹拖放到层次的顶部,将其移动到一个新的位置。
下一个选项提供访问搜索和替换功能,然后下一个选项提供您可能正在使用的源控制系统的视图,例如 Git。
下一个视图是调试选项,该选项提供了面板中的所有常见调试操作,您可以将调试配置保存到launch.json
文件中。
最后的选项允许您查看和安装扩展:
GUI的中心部分是您的编辑器,您可以通过编辑代码的标签进行分离。您可以将编辑视图更改为网格系统或旁边的文件。
您可以通过键入CTRL+SHIFT+
来访问终端,或者在上方菜单中单击终端
并选择新终端
。
如果你想破坏你的群集上的Eclipse Theia部署,请运行以下命令:
1kubectl delete -f eclipse-theia.yaml
你已经探索了Eclipse Theia界面的高级概述,并审查了一些最常用的功能。
结论
您现在已在您的 DigitalOcean Kubernetes 集群上安装了 Eclipse Theia,一个多功能的云 IDE。您已使用免费的 Let's Encrypt TLS 证书保护它,并设置该实例以要求访问者登录。您可以单独处理源代码和文件,或与您的团队合作。如果您需要额外的功能,您还可以尝试构建您自己的 Eclipse Theia 版本。 有关如何做到这一点的更多信息,请访问 Theia docs。