1 theia 介绍
theia 安装后的样子:
theia 是一套构建基于 web 的云端工具和 IDE 的开源框架。theia 提供了一个工作框架、模块系统、和 git 集成等一些可重用的特性。基于 theia 的工具可以远程部署,并通过浏览器或桌面应用如 Electron 进行访问。theia 基于 Typescript、HTML、CSS、LSP(Language Server Protocol)和 VS Code 提供的 Monaco 代码编辑器构建。
它是一套开源框架,而不是一个最终产品,开发者可以基于 theia 构建和自定义一款属于自己的 IDE 或工具,例如 gitpod、建模工具等。
1.1 优点
- 为终端用户提供完整的多语言 IDE(不仅仅是智能编辑器)。
- 同时支持桌面和云端的 IDE。
- 和 VS Code 体验高度一致,大大降低学习成本。
- 方便扩展,开发者可定制自己的 IDE。
- 由 Eclipse 基金会托管,是一个与厂商无关的项目。
1.2 不足
- 第一次打开界面或刷新界面时,会加载所有插件,耗时较长,20s~1min。
- 增加一个新插件需要重新编译整个 IDE。
- 默认只支持 nodejs 语言,其它语言可在扩展处安装,或者在 theia 自带的命令行终端中安装。
- 通过界面操作,只能打开服务器上已有的项目或新建文件夹。不能上传项目,但是可以在 theia 上自带的终端执行 git 命令拉取 git 项目,也可以通过其它命令如 rsync 或 scp 命令自行将本地项目拷贝到远程服务器。
2 theia 安装
有如下几种方式:
本文介绍第 1 种方式,即通过源码安装。
为了提高安装速速,并且避免网络错误,可在腾讯云硅谷买一台 CVM,操作系统为 ubuntu 18。
安装 node 10 和 yarn:
wget https://nodejs.org/dist/latest-v10.x/node-v10.22.0-linux-x64.tar.gz
tar zxvf node-v10.21.0-linux-x64.tar.gz -C /usr/local
echo "export PATH=/usr/local/node-v10.21.0-linux-x64/bin:$PATH" >> /etc/profile
echo "export PATH=/usr/local/node-v10.21.0-linux-x64/bin:$PATH" >> /etc/bash.bashrc
source /etc/profile
npm install -g yarn
theia 前置安装:
apt-get install -y g++ gcc make
apt-get install -y pkg-config
apt-get install -y build-essential
apt-get install -y libx11-dev libxkbfile-dev
apt-get install -y git
安装 theia
git clone https://github.com/eclipse-theia/theia
cd theia
yarn
cd examples/browser
yarn run start --hostname 0.0.0.0 --port 3000
如果安全组开放了 3000 端口,此时便可以通过 http://IP:3000 访问了。
3 登录认证
theia 没有登录认证功能,任何人都可以访问,不安全,可借助 ngx_http_auth_digest 模块进行登录认证。
下载 ngx_http_auth_digest:
wget https://github.com/atomx/nginx-http-auth-digest/archive/v1.0.0.tar.gz
tar zxvf v1.0.0.tar.gz
编译安装 nginx 时,加上参数:
--add-module=nginx-http-auth-digest的路径
生成登录密码:
apt-get install -y apache2-utils
htdigest -c /usr/local/passwd.digest theia admin
其中
- /usr/local/passwd.digest 为密码文件路径
- theia 为 realm,必须与后面要提到的 nginx 配置文件保持一致。
- admin 为登录用户名
在 nginx 配置文件中添加 server 段:
server {
listen 80 default_server;
auth_digest_user_file /usr/local/passwd.digest;
auth_digest_shm_size 8m; # the storage space allocated for tracking active sessions
location / {
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
auth_digest 'theia';
auth_digest_timeout 60s; # allow users to wait 1 minute between receiving the
# challenge and hitting send in the browser dialog box
auth_digest_expires 600s; # after a successful challenge/response, let the client
# continue to use the same nonce for additional requests
# for 600 seconds before generating a new challenge
auth_digest_replays 60; # also generate a new challenge if the client uses the
# same nonce more than 60 times before the expire time limit
proxy_pass http://127.0.0.1:3000;
}
}
其中,
- auth_digest_user_file 必须与设置密码的 htdigest 命令中的密码文件参数保持一致。
- auth_digest 必须与设置密码的 htdigest 命令的 realm 参数保持一致。
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
这两行必须有,否则不能正确代理 websocket。
这个配置相当于每 (auth_digest_timeout+auth_digest_expires)=660s 允许 auth_digest_shm_size/((48 + ceil(auth_digest_replays/8))bytes)=(8*1024*1024)/(48+8)=149.8k 次请求,即每 660s 允许约 149.8k 次请求。登录认证 10min 后过期。
最后启动 nginx,会弹出登录认证框,输入用户名和密码后即可登录,跳转到 theia 界面。
为了更加安全,需要先停掉 theia,将启动方式
yarn run start --hostname 0.0.0.0 --port 3000
改为:
yarn start
默认监听端口为 3000。
参考
https://github.com/eclipse-theia/theia/blob/master/doc/Developing.md#quick-start
https://www.nginx.com/resources/wiki/modules/auth_digest
https://www.yangyang.cloud/blog/2015/07/17/session-with-express-and-nginx