1 Star 0 Fork 0

仗剑天涯 / idea-serverless

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
MIT

IntelliJ IDEA on web, but serverless

Package type Package version Package download

应用背景

在云的时代,我们已经能够轻松地在阿里云函数计算上,部署一个在线版 VSCode。然而 VSCode 的后端开发体验仍然不如 IntelliJ IDE。虽然市面上已经出现了 Eclipse Che云效云端开发平台 DevStudio 等支持 IntelliJ 的在线开发平台,但是部署复杂、不够轻量。由此引发思考:能不能把 IntelliJ IDE 也搬上 Serverless?享受 Serverless 即搭即用、按量付费的特性呢?

技术架构实现、原理以及亮点

Architecture

我是如何使用阿里云的一个或者多个 Serverless 服务实现 Web IDE 服务?

  1. 通过 projector-server 将 IDE 封装为远程服务。
  2. IDE 解压后有近 2 GB 的大小,可将 IDE 的依赖(jbrlibplugins)拆到各自的函数层(layer)中,以降低单次部署需要上传的包大小。
  3. 编写 Java 程序实现配置同步、代码同步,同步源可选阿里云 OSS。

相比官方给的默认示例,我有什么亮点?

  1. 不重复造轮子!截至 2022 年 7 月 14 日,Google 搜索 中还未出现成功将 Intellij IDE 部署到 Serverless 函数计算的实践案例。
  2. IDEA 的 Java 开发体验更好,默认示例使用的 VSCode 难以胜任 Java 等语言开发场景。
  3. 集成 Serverless Devs CLI 等常用 FC 开发工具,支持快速开发和测试 FC Java runtime 函数。
  4. 配置同步、代码同步。

    我们实现了一个中间件管理浏览器与 Projector Server 之间的连接,用户通过 WebSocket 协议连接中间件,中间件将请求转发给 Projector,中间件可以监控连接,当连接断开时,会触发配置同步、代码同步,此外,每分钟也会定时自动同步,同步过程为打包(tgz)并上传到阿里云 OSS。此外,我们考虑到用户可能需要维护多个项目,所以开发了 workspace,当用户第一次访问时,会自动创建一个 workspace,可以在地址栏看到 workspace id,每个 workspace 都会同步到 OSS 中的一个独立的目录,当用户关闭并重新打开时,会根据地址中的 workspace id 恢复相应的配置和代码,以此来实现多项目管理。

  5. 多租安全隔离。

    在 IDEA 中实现多租隔离非常困难,即使前面我们已经为不同的用户分配了不同的 workspace,也无法阻止用户通过 IDE 中的 "Open Folder"、"Terminal" 功能访问其他租户的文件。好在阿里云函数计算的实例是天然支持安全隔离的,当 instanceConcurrency 设为 1 时,一个运行实例只接收一个连接,多个用户访问时,会自动启动新的实例,就不会冲突了。

接下来还要继续实现什么功能?

  1. TODO: 首屏加载时间过长。受限于 projector 的启动时间长,可以在 projector 启动过程时先返回一个静态 loading 页,页面风格可以参考云效和 GitHub Codespaces,每秒调 status API 询问启动状态,当启动状态为 true 时,再发起真正的 websocket 连接。

使用说明

您可以体验 demo 站点 额度已经耗尽了,demo 站点已删除,也可以一键部署到自己的阿里云账号。

一键部署

Deploy with Severless Devs

部署类型请选择“直接部署”,不要选择“通过代码仓库部署”,否则部署不成功。

通过 Cli 部署

需 Linux 环境,需安装 Node.js,按照 Cli 提示一步步操作。

npm i -g @serverless-devs/s
s init idea-webide
cd idea-webide
s deploy

视频演示

为了防止因无法使用影响评测,下面我提供了视频演示。
bilibili.com/video/BV1md4y1P7ZA

实现说明

  1. 该应用部署在阿里云帐号 1064348262863466 下,杭州区域。
  2. 该应用主要使用了阿里云如下服务:
    • 函数计算服务,服务名包括 idea-server
    • OSS服务,bucket名称是 imaegoo
  3. 该应用的实现代码在当前项目下。

参考资料

小白学习路径

  1. 函数计算官网
  2. 使用 Serverless-Devs 工具快速开发 FC cookbook

官方参考 DEMO

https://github.com/devsapp/start-serverless-webide

MIT License Copyright (c) 2022-present iMaeGoo Copyright (c) 2022-present TuWenlin Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

简介

IDEA SERVERLESS 展开 收起
MIT
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
1
https://gitee.com/everbest_admin/idea-serverless.git
git@gitee.com:everbest_admin/idea-serverless.git
everbest_admin
idea-serverless
idea-serverless
main

搜索帮助

53164aa7 5694891 3bd8fe86 5694891