TechShop 同时提供 fnOS 应用包与 Docker 镜像两种交付方式。 在前者,它是一个符合 fnOS 规范的应用,可随系统启停、在应用中心统一更新; 在后者,它通过 Docker Compose 拉起,可以跑在任何支持容器的 x86_64 或 arm64 主机上。
fnOS 应用包可直接在应用中心安装;Docker 镜像与编排文件不公开发布, 需要时请联系我们获取。两种形态共用同一套业务代码与数据格式 —— 今天用 Docker 试跑,明天迁到 fnOS 应用包,只涉及数据目录的搬运, 不需要改配置或重新初始化。
| 对比项 | fnOS 应用包 | Docker |
|---|---|---|
| 获取方式 | 应用中心直接安装 | 联系技术支持获取 |
| 安装方式 | 应用中心 / appcenter-cli | docker compose up |
| 随系统启停 | 支持 | 由容器策略控制 |
| 数据位置 | 向导中指定 | 挂载卷指定 |
| 端口管理 | 向导配置 | 编排文件映射 |
| 卸载保留数据 | 可选 | 保留挂载目录即可 |
| 适用场景 | 飞牛 fnOS 设备 | 其它 Linux / NAS 平台 |
Docker 版本需要单独获取,详见联系我们。
把商品、订单、优惠券、钱包、落地页、邮件与风控拆成彼此独立的模块, 模块之间通过明确的函数边界交互。运行时不引入外部中间件, 因此没有消息队列堆积、连接池打满这类额外的故障来源。
这些模块全部跑在同一个 Node 进程里。请求先经 fnOS 统一网关转发进来, 再在这一进程内处理完毕 —— 省去的是应用内部的服务间调用, 而不是说整条链路只有一个进程。
每个模块自带数据结构与处理逻辑,修改支付风控不会波及其它模块。新增业务时按域扩展,而不是在既有代码里打补丁。
业务模块同处一个进程,请求在进程内直接调用完成,省去服务间序列化与网络往返。常规商品页与后台操作不涉及额外跳转。
商品分类、下单字段、邮件模板、风控阈值都留有配置项,多数定制无需改动代码即可完成。
数据文件解析失败时自动回退到最近一次可用快照,避免单次写入异常导致整站不可用。
运行日志、请求统计与安全日志都由同一进程输出,排障时不必在多个服务间来回翻找。
业务数据以结构化的可读文件保存,出问题时可以直接查看内容,也可以用脚本批量处理。
安全机制分四层落地:凭据不落明文、会话可撤销、访问受控、交易有风控。 管理后台与对外前台走不同的入口,敏感操作单独校验, 所有越权尝试都会写入安全日志。
| 机制 | 解决的问题 |
|---|---|
| scrypt 口令哈希 | 数据文件被读取后无法直接还原口令 |
| 独立管理会话 | 用户账号无法借道获得后台权限 |
| CSRF 令牌 | 阻断跨站伪造的管理端写操作 |
| 访问频率限制 | 抑制口令爆破与接口刷取 |
| 人机验证 | 降低脚本批量下单与刷券 |
| 支付风控阈值 | 大额交易触发二次确认 |
| 安全日志与告警 | 异常行为可回溯、可邮件通知 |
自托管产品最容易劝退人的地方,是安装之后还有一堆初始化工作。 TechShop 把这部分收进了向导:不建数据库、不写配置文件、不改环境变量。
管理员口令在 fnOS 安装向导里就设好了;首次打开进入的是站点名称、收款方式等内容配置,底部还有「全部跳过」可以直接进后台。
预置商品分类与示例商品,先看到完整界面,再替换成自己的内容。
保存、发信、测试连接等操作都有明确的成功或失败提示,不需要翻日志猜测结果。
通过 fnOS 登录态确认身份后可重置管理口令,不必重装应用或手改数据文件。
应用本身是一个 Node 进程(未启用 cluster 多进程),前端由 fnOS 统一网关转发。 安装包 2.1 MB,不依赖外部数据库或缓存服务。 静态资源走白名单直接输出并启用 gzip 压缩, 后台与前台页面都做了首屏资源精简,避免被外部 CDN 同步阻塞。
它也并不是「完全单线程」的。从 1.0.029 起可以调节工作线程数(1–16,默认 4), 文件读写、加密与压缩都交给 Node 的线程池真正并行执行, 不再排在同一条队列里排队等待;相对上一版,I/O 与加密/压缩的并行度都有提升。 设备核数较多、商品与订单量较大时,收益更明显。
1.0.030 又把口令哈希从同步换成异步:在此之前,每次管理员登录或改密 都会把事件循环卡住约 100 ms,期间其它请求只能排队;现在这段计算不再挡住别人。
边界说明:并发的是文件 I/O、加密与压缩这三类操作; JS 业务逻辑仍在单个事件循环上顺序处理 —— 这是 Node 自身的运行模型, 不是本项目的取舍。
| 项目 | 说明 |
|---|---|
| 安装包体积 | 约 2.1 MB |
| 运行时依赖 | Node.js 22 |
| 外部数据库 | 不需要 |
| 外部缓存 | 不需要 |
| 应用进程 | 1 个 Node 进程(未启用 cluster) |
| 请求入口 | fnOS 统一网关,经 Unix Socket 转发 |
| 工作线程数 | 默认 4,可设 1–16 |
| 数据写入 | 原子替换(临时文件 + 改名) |
| 启动耗时 | 秒级,启动后立即接受请求 |
不是把一个 Web 应用丢进 NAS 就算完成适配。TechShop 按 fnOS 的应用规范实现了入口、 权限、数据目录与网关接入,尽量贴合系统本身的使用习惯。
可通过系统域名访问,并复用 NAS 登录态,无需在两处各维护一套账号。
需要用户查看或导出的内容会声明为共享目录,在 fnOS 文件管理器中可直接打开。
符合 fnOS 的应用生命周期约定,支持安装、升级、配置变更与卸载各阶段的回调处理。
支持配置多个发件邮箱并提供连接测试,订单通知与验证码按用途分开发送。
不依赖私有编排格式,可直接接入既有的容器管理面板与镜像仓库。
数据目录结构清晰,复制目录即可完成迁移或离线备份,不绑定专有格式。
订单金额、优惠抵扣与退款数额全部在服务端重新计算, 不采信客户端提交的价格与总额。储值、余额变动与优惠券核销都写入流水, 出问题时可以按订单逐笔核对。
待付款 → 已付款 → 处理中
↓
已发货 → 已完成
↓
退款中 → 退款成功