Go to file
Innei ad1b5f6df3 feat: demo mode 2022-05-25 21:13:49 +08:00
.github chore(deps): update docker/login-action action to v2 2022-05-07 19:53:04 +08:00
.husky chore: link module 2022-03-25 21:40:51 +08:00
.vscode fix: rename all symbols 2022-02-09 21:37:29 +08:00
bin refactor(backup): restore user asset file 2022-03-20 16:45:29 +08:00
configs feat: webpack build 2022-04-04 13:39:47 +08:00
debug fix: admin gateway singleton 2022-02-08 23:25:37 +08:00
patch refactor: config to ts 2022-01-18 19:42:48 +08:00
scripts fix: script to fetch 2022-05-21 17:15:40 +08:00
src feat: demo mode 2022-05-25 21:13:49 +08:00
test chore: flush after close redis 2022-04-30 23:51:35 +08:00
.dockerignore fix: docker script 2021-10-02 15:10:45 +08:00
.env.example fix: docker script 2021-10-02 15:10:45 +08:00
.eslintignore feat: serverless access db support 2022-04-24 22:37:04 +08:00
.eslintrc.js chore: update deps 2022-05-02 12:54:30 +08:00
.gitattributes feat: demo mode 2022-05-25 21:13:49 +08:00
.gitignore feat: webpack build 2022-04-04 13:39:47 +08:00
.npmrc fix: disable pnpm 7 strict peer deps 2022-05-07 19:35:09 +08:00
.prettierrc.js chore: update deps 2022-05-02 12:54:30 +08:00
CHANGELOG.md fix: rename all symbols 2022-02-09 21:37:29 +08:00
LICENSE chore: update readme 2022-02-12 22:34:39 +08:00
README.md docs: add dev guide 2022-03-17 09:07:45 +08:00
docker-compose.yml chore : restart for docker install 2022-05-24 18:58:07 +08:00
dockerfile fix: url allowed for validator 2022-04-04 13:12:52 +08:00
ecosystem.config.js fix: pm2 cluster instance count 2022-04-09 15:35:20 +08:00
global.d.ts refactor: add cwd constant 2022-03-27 15:11:23 +08:00
jest.config.js fix: test config 2022-04-10 20:40:32 +08:00
nest-cli.json break: remove gql 2022-02-11 19:07:52 +08:00
package.json chore(deps): update dependency ts-jest to v28.0.3 2022-05-24 19:52:31 +00:00
paw.paw release: v3.0.0-canary.0 2021-09-09 22:02:10 +08:00
pm2.dev.config.js refactor: logger and fix color 2022-02-13 22:23:24 +08:00
pnpm-lock.yaml chore(deps): update dependency ts-jest to v28.0.3 2022-05-24 19:52:31 +00:00
renovate.json chore: enable bot 2021-09-10 19:56:46 +08:00
test-setup.js refactor: add cwd constant 2022-03-27 15:11:23 +08:00
tsconfig.build.json dev/snippet (#130) 2021-10-22 21:47:53 +08:00
tsconfig.json feat: serverless access db support 2022-04-24 22:37:04 +08:00

README.md

MX-Server

GitHub stars GitHub issues GitHub Workflow Status GitHub license wakatime Docker Image Size (latest by date)

RESTful API service for Mix Space, powered by nestjs, required mongoDB & Redis.

适用于 Mix Space 的 RESTful API 服务端应用;基于 nestjs (nodejs),需安装 mongoDBRedis 方可完整运行。

v3 还是使用 nestjs 进行重构,之前的版本在 此仓库

配合相关项目一起使用:

  • SSR Blog:
    • Kami powered by NextJS (一个走可爱风路线的个人空间)
    • 未来会变多吗
  • Admin: Admin
  • 未来可期

接口文档通过开发环境 Swagger 查阅。

现有的比较有意思的一些小玩意的实现:

  • 实时日志输出。通过 Socket.IO + 劫持 process.stdout 实现。
  • PTY 支持。
  • 云函数

快速开始

需要以下环境:

  • 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

Docker 部署

cd
mkdir -p mx/server
cd mx/server
wget https://cdn.jsdelivr.net/gh/mx-space/mx-server@master/docker-compose.yml
docker-compose up -d

开发环境

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                     # 常量
│   ├── article.constant.ts
│   ├── cache.constant.ts
│   ├── meta.constant.ts
│   ├── path.constant.ts
│   └── system.constant.ts
├── main.ts                       # 引入配置,启动主程序,引入各种全局服务
├── modules                       # 业务逻辑模块
│   ├── aggregate
│   ├── analyze
│   ├── auth
│   ├── backup
│   ├── category
│   ├── comment
│   ├── configs
│   ├── feed
│   ├── health
│   ├── init
│   ├── link
│   ├── markdown
│   ├── note
│   ├── option
│   ├── page
│   ├── pageproxy
│   ├── post
│   ├── project
│   ├── pty
│   ├── recently
│   ├── say
│   ├── search
|   ├── snippet
|   ├── serverless
│   ├── sitemap
│   ├── tool
│   └── user
├── processors                      # 核心辅助模块
│   ├── cache                       # Redis 缓存相关
│   ├── database                    # Mongo 数据库相关
│   ├── gateway                     # Socket.IO 相关
│   ├── helper                      # 辅助类
│   └── logger                      # 自定义 Logger
├── shared                          # 通用模型
│   ├── dto                         # 数据验证模型
│   ├── interface                   # 接口
│   └── model                       # 基本数据模型
├── utils                           # 工具类
│   ├── crud.util.ts
│   ├── dayjs.util.ts
│   ├── global.util.ts
│   ├── index.util.ts
│   ├── ip.util.ts
│   ├── nest.util.ts
│   ├── pic.util.ts
│   ├── query.util.ts
│   ├── redis.util.ts
│   ├── system.util.ts
│   ├── time.util.ts
│   ├── transfrom.util.ts
│   └── validator
└── zx.global.ts

应用结构

  • 请求处理流程

    1. request收到请求
    2. middleware中间件过滤爬虫 PHP 肉鸡扫描路径,记录访问历史
    3. guard守卫过滤鉴权和角色附加
    4. interceptor:before只用于 DEBUG 请求计时
    5. pipe校验请求数据过滤未知数据非法类型抛错 422
    6. controller & resolver业务控制器
    7. service业务服务
    8. interceptor:after数据流拦截器格式化数据、请求缓存
    9. filter捕获以上所有流程中出现的异常如果任何一个环节抛出异常则返回错误
  • 拦截器流向

ResponseInterceptor -> JSONSerializeInterceptor -> CountingInterceptor -> AnalyzeInterceptor -> HttpCacheInterceptor
  • 业务逻辑模块

    1. [Aggregate] 聚合
    2. [Analyze] 数据统计
    3. [Auth] 认证
    4. [Backup] 备份
    5. [Category] 分类
    6. [Commnet] 评论
    7. [Configs] 读取配置项
    8. [Feed] RSS
    9. [Health] 应用健康检查与日志相关
    10. [Init] 初始化相关
    11. [Link] 友链
    12. [Markdown] Markdown 解析导入导出解析相关
    13. [Note] 日记
    14. [Option] 设置
    15. [Page] 独立页面
    16. [PageProxy] 反代管理页
    17. [Post] 博文
    18. [Project] 项目
    19. [Recently] 最近
    20. [Say] 说说
    21. [Search] 搜索
    22. [Sitemap] 站点地图
    23. [Tool] 工具接口
    24. [User] 用户
  • 核心辅助模块 processors

    1. [cache] Redis 缓存相关
    2. [database] 数据库相关
    3. [gateway] Socket.IO 相关
      • 用户端
      • 管理端
      • 实时通知
    4. [helper] 辅助类
    5. [CountingService] 提供更新阅读计数
    6. [CronService] 维护管理计划任务
      • 自动备份
      • 推送百度搜索
      • 清除缓存
      • etc.
    7. [EmailService] 送信服务
    8. [HttpService] 请求模块
    9. [ImageService] 图片处理
    10. [TqService] 任务队列
    11. [UploadService] 上传服务
    12. [AssetService] 获取本地资源服务

开发

pnpm i
pnpm start

Reference

项目参考了 nodepress


Since 2021-08-31

Thanks

许可

This project is licensed under AGPLv3 licensed. 2021 Innei