本文档概述了 code-server 的架构,解释了它如何实现 VS Code 在远程服务器上运行并通过 Web 浏览器访问。它涵盖了系统的核心组件及其交互,描述了从 CLI 参数到 HTTP 服务器初始化、VS Code 集成和代理功能的数据流。
code-server 的架构围绕几个关键组件设计
来源:src/node/cli.ts src/node/entry.ts src/node/http.ts src/node/routes/index.ts src/node/routes/vscode.ts src/node/routes/pathProxy.ts src/node/routes/domainProxy.ts
启动流程展示了 code-server 如何初始化,从解析命令行参数到启动服务器或连接到现有实例。
来源:src/node/entry.ts7-67 src/node/main.ts17-214 src/node/routes/index.ts31-180
CLI 系统负责处理命令行参数、配置文件和环境变量,以生成一组一致的配置选项。
CLI 处理包括
parse() 函数进行解析readConfigFile() 读取setDefaults() 应用PASSWORD 和 HASHED_PASSWORD 等环境变量来源:src/node/cli.ts322-459 src/node/cli.ts501-631 src/node/entry.ts7-67
Code-server 支持两种身份验证模式
| 身份验证类型 | 描述 | 配置 |
|---|---|---|
password | 基于密码的身份验证 | 通过 --password、--hashed-password、$PASSWORD 或 $HASHED_PASSWORD 配置 |
none | 无身份验证 | 使用 --auth none 设置 |
来源:src/node/cli.ts8-16 src/node/routes/login.ts src/node/http.ts98-139
HTTP 服务器基于 Express.js 构建,同时处理 HTTP 和 WebSocket 连接。
Express 路由器处理各种路由
/_static 路径提供静态资源/ 和 /vscode 路径提供 VS Code/login 和 /logout 处理登录和登出/proxy/:port/* 和基于域名的代理管理代理/healthz 提供健康检查来源:src/node/routes/index.ts31-180 src/node/http.ts25-425
Code-server 通过动态加载其服务器模块并为其代理请求来与 VS Code 集成。
VS Code 集成包括
来源:src/node/routes/vscode.ts27-248 src/node/routes/index.ts164-167
code-server 的一个独特功能是其代理能力,允许通过相同的身份验证层访问服务器上运行的 Web 服务。
基于路径的代理工作方式如下:
/proxy/:port/* 的请求来源:src/node/routes/pathProxy.ts8-73 src/node/http.ts80-95
基于域名的代理使用 code-8080.domain.tld 这样的模式来代理到本地端口。
来源:src/node/routes/domainProxy.ts8-108
身份验证系统通过基于密码的身份验证来保护 code-server 的访问。
身份验证系统
来源: src/node/routes/login.ts11-121 src/node/http.ts98-139 src/node/util.ts134-291
Code-server 支持多种自定义,包括:
| 功能 | 描述 | 配置 |
|---|---|---|
| 自定义域名 | 代理到特定服务 | --proxy-domain |
| 自定义区域设置 | 设置 UI 语言 | --locale |
| 自定义欢迎文本 | 自定义登录页面 | --welcome-text |
| 自定义应用名称 | 更改应用名称 | --app-name |
| 遥测 | 启用/禁用遥测 | --disable-telemetry |
来源: src/node/cli.ts63-291 patches/telemetry.diff patches/display-language.diff
下图显示了 code-server 的不同组件如何相互通信
来源: src/node/routes/index.ts31-180 src/node/wsRouter.ts7-83 src/node/routes/vscode.ts27-248
此图说明了用户与 code-server 交互时的数据流
来源: src/node/main.ts120-214 src/node/routes/vscode.ts27-248
Code-server 的架构巧妙地结合了几个关键组件,可在浏览器中提供无缝的 VS Code 体验
这种架构使开发人员能够随时随地访问其开发环境,同时保持完整的 VS Code 体验,包括扩展、终端访问和调试功能。