# fn-coder **Repository Path**: yanfanVIP/fn-coder ## Basic Information - **Project Name**: fn-coder - **Description**: No description available - **Primary Language**: Unknown - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-06-18 - **Last Updated**: 2026-06-30 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # VS Code(飞牛原生版) 飞牛 fnOS 原生 code-server 应用:统一网关接入、系统账户认证、内置 x86_64 二进制。 ## 要求 - fnOS **V1.1.3100+** - **x86_64**(`platform = x86`) ## 架构 ``` 浏览器 → 飞牛网关 /app/fncoder → Unix Socket fncoder.sock → code-server ``` - 网关前缀 `/app/fncoder`:打包时对二进制打补丁,启动时注入 `CODE_SERVER_GATEWAY_PREFIX` - 安装时在 `TRIM_PKGVAR/config.yaml` 写入:`socket`、`auth: none`(无 TCP 端口) - 端口转发:启动时注入 `VSCODE_PROXY_URI=/app/fncoder/proxy/{{port}}/` 与 `--abs-proxy-base-path=/app/fncoder` - 应用以 **root** 运行([应用权限](https://developer.fnnas.com/docs/core-concepts/privilege)),code-server 以 **`TRIM_RUN_USERNAME`**(当前操作用户)启动 - 默认工作区:飞牛 `TRIM_PKGHOME`(通常为 `/vol1/@apphome/fncoder`) - 每位用户独立数据目录:`var/users/<用户名>/data` ## 打包 ```bash bash scripts/init.sh # 下载二进制并打补丁(仅打包前) fnpack build ``` 或手动: ```bash VERSION=$(curl -fsSL https://api.github.com/repos/coder/code-server/releases/latest | grep -Po '"tag_name": "v\K[^"]*') curl -fL "https://github.com/coder/code-server/releases/download/v${VERSION}/code-server-${VERSION}-linux-amd64.tar.gz" | tar -xz -C app/server mv "app/server/code-server-${VERSION}-linux-amd64" app/server/code-server ``` ## 控制台 桌面另有 **VS Code 控制台** 入口(iframe),功能: - 启动 / 停止 code-server(应用启动时**不自动**运行,需在控制台手动启动) - 卡片方式管理项目目录(数据保存在 `var/projects.json`) - 点击项目打开:`{当前域名}{gatewayPrefix}?folder={项目路径}` ## 端口转发 | 机制 | 作用 | |------|------| | `VSCODE_PROXY_URI` | Ports 面板生成的 **/proxy/** 公网链接(如 `/app/fncoder/proxy/8080/`) | | `--abs-proxy-base-path` | **/absproxy/** 转发到本地应用时的路径前缀(React 等需 absproxy 时用) | | `gateway-proxy-path` 补丁 | 子路径路由 + 修正 301 重定向 `Location`(避免跳到 `/proxy/...` 丢失 `/app/fncoder`) | `config.yaml` 里的 `abs-proxy-base-path` **不能**修正 Ports 面板链接,已改为启动参数 + 环境变量。 | 方式 | 地址示例 | |------|----------| | proxy(默认,Ports 面板) | `https://{域名}/app/fncoder/proxy/8080/` | | absproxy | `https://{域名}/app/fncoder/absproxy/8080/` | 修改后需**重新执行 `bash scripts/init.sh` 并 fnpack build**,再重启 code-server。 若仍无法访问,请确认本地服务监听 `0.0.0.0` 或 `127.0.0.1`(code-server 转发到 `0.0.0.0:<端口>`)。 ## 目录 ``` app/www/index/ # 控制台前端 app/ui/index.cgi # CGI 静态资源与 API app/server/index-api.sh # 控制台 API + 启停 code-server app/server/code-server/ # 内置二进制(init.sh 补丁后打包) scripts/patch/ # 补丁脚本(仅开发机构建用,不打入 fpk) app/ui/config # 网关与应用入口 cmd/main # fnOS 生命周期(自包含,不引用其他目录) ``` ## 文档 - [统一网关注册](https://developer.fnnas.com/docs/core-concepts/gateway-registration) - [登录认证](https://developer.fnnas.com/docs/core-concepts/gateway-authentication)