AppStore 应用商店 - 全平台离线部署
零依赖、开箱即用的应用商店系统支持 Windows / Linux / 飞牛NAS 三平台离线部署一、项目简介AppStore 是一款类似火绒应用商店的轻量级应用分发平台包含前端用户端分类浏览、搜索、下载应用管理后台应用管理、批量操作、多分类、用户管理、图标自动提取服务端Node.js Express SQLite无需额外安装数据库系统架构AppStore ├── 前端 (HTML/CSS/JS) │ ├── 用户端 (public/index.html) │ └── 管理后台 (public/admin/index.html) ├── 服务端 (Node.js Express) │ ├── REST API (src/app.js) │ ├── SQLite 数据库 (db/appstore.db) │ └── 文件上传 (uploads/) └── 运行时 ├── Windows: node.exe (自带) ├── Linux: node 二进制 (自带) └── NAS: Docker 镜像 (自带)二、部署包一览平台文件大小格式WindowsAppStore-Windows.zip~40MBZIPLinuxAppStore-Linux.tar.gz~60MBtar.gz飞牛NASAppStore-NAS.tar.gz~66MBtar.gz各包内容说明Windows 包runtime/- Node.js v22.22.3 运行时含 npm/npxserver/- 完整服务端代码 node_modulesstart.bat- 一键启动脚本README.md- 部署说明Linux 包runtime/- Node.js v22.22.3 Linux x64 运行时server/- 完整服务端代码 node_modules含 Linux 原生 better-sqlite3 模块start.sh- 启动/安装脚本支持 systemd 服务NAS 包appstore-nas.tar- Docker 镜像文件含完整运行环境start.sh- Docker 部署脚本docker-compose.yml- Docker Compose 配置文件三、Windows 平台部署3.1 系统要求Windows 10/11 64位端口 3000 未被占用解压工具系统自带3.2 部署步骤步骤 1解压将AppStore-Windows.zip解压到任意目录例如D:\AppStore。步骤 2启动双击start.bat出现如下界面即表示启动成功 AppStore 应用商店服务 Windows 离线版 ​ [启动] Node.js 版本: v22.22.3 ​ [启动] 服务即将启动按 CtrlC 停止... [访问] http://localhost:3000 [后台] http://localhost:3000/admin/ [账号] admin / admin123 步骤 3访问用户端http://localhost:3000管理后台http://localhost:3000/admin/默认账号admin / admin123步骤 4停止在命令行窗口按CtrlC停止服务。3.3 常见问题排查问题 1出现大量 不是内部或外部命令 错误现象启动时显示大量乱码命令名最后提示node 不是内部或外部命令原因start.bat使用了chcp 65001UTF-8设置代码页但 CMD 在某些环境下对 UTF-8 编码的批处理文件解析不稳定导致中文被错误解析为命令。解决确认使用的是 GBK/ANSI 编码的start.bat文件大小约 900 字节不是 1100 字节如果仍有问题手动修改 CMD 代码页chcp 936 start.bat问题 2提示 找不到模块 srcpp.js现象启动后显示Error: Cannot find module ...\srcpp.js实际应为app.js原因start.bat中src\app.js的反斜杠被错误编码。在 GBK 编码中\的编码是0x5C。如果编码错误如0x07反斜杠会变成其他字符导致路径拼接错误。解决用文本编辑器打开start.bat检查最后一行的路径是否为src\app.js如果显示为乱码如srcapp.js或src[乱码]app.js重新写入正确的反斜杠正确写法用 PowerShell 修复$bat Get-Content start.bat -Encoding Default $bat $bat -replace src.*?app\.js, src\app.js $bat | Set-Content start.bat -Encoding Default问题 3端口 3000 被占用现象启动时报错Error: listen EADDRINUSE: address already in use :::3000解决查找占用端口的进程netstat -ano | findstr :3000终止进程taskkill /PID PID /F或者修改服务端端口编辑server/src/app.js中的PORT变量四、Linux 平台部署4.1 系统要求Linux x86_64CentOS 7 / Ubuntu 18.04 / Debian 10glibc 2.17 或更高版本端口 3000 未被占用4.2 部署步骤步骤 1上传并解压# 上传 AppStore-Linux.tar.gz 到服务器 # 解压 tar -xzf AppStore-Linux.tar.gz cd AppStore-Linux步骤 2赋予执行权限chmod x start.sh chmod x runtime/bin/node步骤 3启动前台模式./start.sh步骤 4安装为 systemd 服务推荐生产环境# 安装服务 ./start.sh install ​ # 启动服务 sudo ./start.sh start ​ # 查看状态 sudo systemctl status appstore ​ # 设置开机自启 sudo systemctl enable appstore4.3 常见问题问题 1glibc 版本过低导致 better-sqlite3 加载失败现象启动时报错Error: /lib64/libc.so.6: version GLIBC_2.28 not found解决cd server ../runtime/bin/npm rebuild better-sqlite3问题 2权限不足现象Permission denied或无法绑定端口解决# 使用 root 或 sudo 运行 sudo ./start.sh ​ # 或者修改端口为非特权端口1024五、飞牛NAS (fnOS) 平台部署5.1 系统要求飞牛NAS (fnOS) 系统Docker 已安装fnOS 应用中心自带可用存储空间 500MB5.2 部署步骤步骤 1上传并解压# 上传 AppStore-NAS.tar.gz 到 NAS # 解压 tar -xzf AppStore-NAS.tar.gz cd AppStore-NAS步骤 2一键部署chmod x start.sh ./start.sh脚本会自动加载 Docker 镜像appstore-nas.tar创建数据目录uploads/、db/、logs/启动容器并映射端口步骤 3访问用户端http://NAS的IP:3000管理后台http://NAS的IP:3000/admin/5.3 自定义端口PORT8080 ./start.sh5.4 管理命令./start.sh stop # 停止容器 ./start.sh remove # 停止并删除容器 ​ # Docker 原生命令 docker logs -f appstore-server # 查看日志 docker restart appstore-server # 重启 docker exec -it appstore-server sh # 进入容器5.5 Docker Compose可选docker compose up -d # 启动 docker compose down # 停止 docker compose logs -f # 查看日志六、管理后台使用6.1 登录访问http://IP:3000/admin/使用默认账号登录用户名admin密码admin1236.2 核心功能功能说明应用管理新增/编辑/删除应用支持批量删除分类管理多分类标签一个应用可归多个分类用户管理管理员账号增删改查、重置密码图标自动提取上传 .exe/.msi 自动提取图标文件上传支持 .exe/.msi/.zip/.7z 及图片6.3 数据持久化所有数据保存在本地目录数据类型存储位置升级时保留数据库server/db/appstore.db是应用图标uploads/icons/是安装包uploads/packages/是日志logs/可选升级时保留db/和uploads/目录即可保留全部数据。七、系统功能特性应用商店前端分类浏览、搜索、一键下载管理后台完整的 CRUD 操作、批量删除多分类支持应用可归属多个分类组图标自动提取上传 Windows 安装包自动解析图标下载文件名保持与上传文件名一致全部应用导航始终可返回全部列表会话管理基于 express-session24小时有效期日志系统access.log / app.log / error.log 分类记录八、技术栈层级技术后端框架Express.js数据库SQLite (better-sqlite3)会话管理express-session文件上传Multer日志Morgan 自定义 Logger前端纯 HTML/CSS/JS零依赖运行时Node.js v22.22.3九、总结本文介绍了 AppStore 应用商店在三平台Windows/Linux/飞牛NAS的完整离线部署方案。核心设计原则零依赖自带 Node.js 运行时无需系统安装开箱即用解压后一键启动数据持久化本地文件存储升级不丢数据跨平台统一代码三平台独立打包部署过程中最常见的问题是 Windows 下的编码问题记住批处理文件使用 GBK 编码反斜杠使用0x5C。如有问题欢迎在评论区交流效果图1. 用户下载界面2. 管理员后台:下载地址https://download.csdn.net/download/Gyingxm/93199420

相关新闻

西门子200smart PLC脉冲除尘器控制程序详解

西门子200smart PLC脉冲除尘器控制程序详解

1. 西门子200smart PLC脉冲除尘器程序解析在工业自动化领域,PLC(可编程逻辑控制器)作为核心控制设备,广泛应用于各类生产线的自动化控制。西门子200smart系列PLC以其稳定可靠的性能和友好的编程环境,成为中小型自动化项…

2026/10/25 22:42:50 阅读更多 →
越华环保全周期合规管控平台:美丽蓝天申报全链路数字化架构

越华环保全周期合规管控平台:美丽蓝天申报全链路数字化架构

一、技术痛点 / 背景 当前美丽蓝天项目申报已进入全流程监管阶段,传统 “先建设、后补材料” 的后置式人工申报模式存在显著技术短板,已无法匹配监管要求。 从技术架构视角看,传统模式属于碎片化、单点式的人工管理,缺乏全链路统一…

2026/10/24 10:53:28 阅读更多 →
为什么你的孩子还在死记硬背?AI动态语义锚定技术已让《唐诗三百首》记忆准确率跃升至98.6%!

为什么你的孩子还在死记硬背?AI动态语义锚定技术已让《唐诗三百首》记忆准确率跃升至98.6%!

更多请点击: https://kaifayun.com 第一章:为什么你的孩子还在死记硬背?AI动态语义锚定技术已让《唐诗三百首》记忆准确率跃升至98.6%! 传统古诗教学长期依赖机械重复与孤立字词记忆,导致理解浅表、遗忘率高。而AI动态…

2026/10/25 8:04:47 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年,我大部分时间都在跟浏览器标签页打交道,直到第一次把桌面应用跑起来,才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词,最开始是在某段时间频繁出现在同事的讨论里,一个用HTML…

2026/10/26 12:00:21 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介:亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档,主要面向智能锁安装人员、终端用户及售后维护者,帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件,大小4.37MB,内容结构清晰&#xff…

2026/10/25 22:36:10 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统,整车要求空载跑到8m/s,电机转速已经拉到额定点,驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令,转速纹丝不动,三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/10/26 4:52:12 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年,用它写过嵌入式驱动、做过游戏服务端,也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词,我其实挺感慨的——这门语言的难点从来不是语法多,而是知识点之间的耦合太深…

2026/10/26 12:00:21 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介:亚太天能T109滑盖智能锁产品说明书以PDF格式发布,适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开,先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能,再给出完整安装步骤&…

2026/10/26 5:00:37 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历:翻开源码注释、论文摘要或者一份专业报告,每个字都认识,连在一起却像天书。想找人聊聊,身边要么没人懂,要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型,几秒钟之后&a…

2026/10/26 3:16:46 阅读更多 →

日新闻

周新闻

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/26 12:00:19 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/25 13:21:54 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/26 8:34:37 阅读更多 →