Mix Space Core
Mix Space 核心服务;基于
nestjs
(nodejs),需安装mongoDB
和Redis
方可完整运行。
此项目不带主站,可以使用以下项目(选一)进行部署。
接口文档通过开发环境 Swagger 查阅。
现有的比较有意思的一些小玩意的实现:
- 实时日志输出。通过 Socket.IO + 劫持
process.stdout
实现。 - PTY 支持。
- 云函数
Docker 部署(建议)
cd
mkdir -p mx/server
cd mx/server
wget https://fastly.jsdelivr.net/gh/mx-space/mx-server@master/docker-compose.yml
docker-compose up -d
宿主部署
需要以下环境:
- Node.js 16.10+
- MongoDB
- Redis
现有 macOS(x86)、Linux(x86) 的已构建产物。使用以下脚本可免手动构建直接运行。
curl https://cdn.jsdelivr.net/gh/mx-space/mx-server@master/scripts/download-latest-asset.js >> download.js
zx ./download.js
cd mx-server
node index.js
或者手动下载 release,之后解压然后
node index.js
所有的依赖都打包进了产物,无需黑洞一般的 node_modules
开发环境
git clone https://github.com/mx-space/mx-server
cd mx-server
pnpm i
pnpm dev
项目结构
.
├── app.config.ts # 主程序配置,数据库、程序、第三方,一切可配置项
├── app.controller.ts # 主程序根控制器
├── app.module.ts # 主程序根模块,负责各业务模块的聚合
├── common # 存放中间件
│ ├── adapters # Fastify 适配器的配置
│ ├── decorator # 业务装饰器
│ ├── exceptions # 自定义异常
│ ├── filters # 异常处理器
│ ├── guard # 守卫与鉴权
│ ├── interceptors # 拦截器, 数据过滤与响应格式化处理
│ ├── middlewares # 传统意义上的中间件
│ └── pipes # 管道
├── constants # 常量
├── main.ts # 引入配置,启动主程序,引入各种全局服务
├── modules # 业务逻辑模块
├── processors # 核心辅助模块
│ ├── cache # Redis 缓存相关
│ ├── database # Mongo 数据库相关
│ ├── gateway # Socket.IO 相关
│ ├── helper # 辅助类
│ └── logger # 自定义 Logger
├── shared # 通用模型
│ ├── dto # 数据验证模型
│ ├── interface # 接口
│ └── model # 基本数据模型
├── utils # 工具类
└── zx.global.ts
应用结构
-
请求处理流程
- request:收到请求
- middleware:中间件过滤爬虫 PHP 肉鸡扫描路径,记录访问历史
- guard:守卫过滤(鉴权)和角色附加
- interceptor:before:只用于 DEBUG 请求计时
- pipe:校验请求数据,过滤未知数据,非法类型抛错 422
- controller & resolver:业务控制器
- service:业务服务
- interceptor:after:数据流拦截器(格式化数据)、请求缓存
- filter:捕获以上所有流程中出现的异常,如果任何一个环节抛出异常,则返回错误
-
拦截器流向
ResponseInterceptor -> ResponseFilterInterceptor -> JSONTransformInterceptor -> CountingInterceptor -> AnalyzeInterceptor -> HttpCacheInterceptor
-
- [Aggregate] 聚合
- [Analyze] 数据统计
- [Auth] 认证
- [Backup] 备份
- [Category] 分类
- [Commnet] 评论
- [Configs] 读取配置项
- [Feed] RSS
- [Health] 应用健康检查与日志相关
- [Init] 初始化相关
- [Link] 友链
- [Markdown] Markdown 解析导入导出解析相关
- [Note] 日记
- [Option] 设置
- [Page] 独立页面
- [PageProxy] 反代管理页
- [Post] 博文
- [Project] 项目
- [Recently] 最近
- [Say] 说说
- [Search] 搜索
- [Sitemap] 站点地图
- [User] 用户
-
- [cache] Redis 缓存相关
- [database] 数据库相关
- [gateway] Socket.IO 相关
- 用户端
- 管理端
- 实时通知
- [helper] 辅助类
- [CountingService] 提供更新阅读计数
- [CronService] 维护管理计划任务
- 自动备份
- 推送百度搜索
- 清除缓存
- etc.
- [EmailService] 送信服务
- [HttpService] 请求模块
- [ImageService] 图片处理
- [TqService] 任务队列
- [UploadService] 上传服务
- [AssetService] 获取本地资源服务
- [TextMacroService] 文本宏替换服务
- [JWTService] JWT 服务
- [BarkPushService] Bark Push 服务
开发
pnpm i
pnpm start
Reference
项目参考了 nodepress
Since 2021-08-31
Thanks
许可
This project is licensed under AGPLv3 licensed. 2021 Innei