generator-wxnode-boilerplate
Version:
Yeoman generator for wxnode boilerplate
169 lines (114 loc) • 5.13 kB
Markdown
## 简介
node boilerplate 的大致架构是通过 rpcAgent+PB 来实现 node 中间层调用后台服务。Node 业务层则是采用 Koa2 框架,使用 Typescript 做代码错误检索。整个项目是针对于 WXG 内部后台开发和运维部署模式,抽象一套可以直接运行的基础代码模板。
该 boilerplate 提供了以下 feature:
* 使用 Typescript 语法开发
* 本地开发,无需 rz 同步
* 完全适应 WXG 内部运维体系
* Vue 作为 View 层语法开发(可选)
* 最新 webpack4 编译
## 快速上手
初次启动,需要配置 node_modules 包、编译对应的 PB 文件,下载 submodule
```
npm run init
```
启动本地开发:
```
npm start
```
然后直接打开: http://127.0.0.1:8081/server ,可以看到预览界面。
## 业务配置
业务配置文件为: /config/index.js。里面内容主要是和运维服务、本地项目开发相关。其中:
* IDKEY: 用来进行 idkey 上报,这个需要自行到 weixin.oa.com 上申请
* SYSMETA: 运维在服务器上的配置信息,里面主要是给 fastreject 中间件使用的
* RpcPort/RpcHost: 设置本地和线上开发的 RPC 服务
* MOCK_REFERER: 内网 SSR 服务发起时,校验的 referer,不是很重要。
* ENABLE_CACHED/CachePort/CacheHost: 使用 memorycached 服务相关的配置。memorycached 需要自行在服务器上配置。
开启脚本统一使用:
```
npm run build
```
其中对应的 node 程序,pm2 管理程序,都需要你手动配置到你开发机的模块上。
## 部署
当在本机已经调试完毕后,需要通过到开发机上进行编译部署。基本步骤就是,你需要手动将 git 仓库拉到开发机,然后运行下列命令:
```
// 安装所有依赖
tnpm install
// 安装额外依赖
tnpm install pm2 ffi --no-save // (编译机上运行)
// 启动编译
tnpm run build:rpc // 编译 pb 文件
tnpm run build:app // 编译 node 文件
// 如果你有依赖前端 Vue 项目资源的话,还需要执行前端编译
tnpm run ssr:client
tnpm run ssr:server
```
至此,你的项目就已经完整的编译出来了。剩下的去 weixin.oa.com 上提新单进行同步操作。
## 日志
WXG 内部服务有三种,另外额外加上本地的错误日志 log4js:
* 调用关系:用来记录一个 cgi 里面,调用的所有的 rpc 服务记录追踪。现在已经提供一个中间件来处理。
```
if (rule.cmdId) {
params.unshift(cmdIdMid(rule.cmdId));
}
```
* idkey 上报: 服务器端的 PV 上报。
* mmdata: 日志上报,私有日志上报,也是使用 rpc 来进行上报调用。
* log4js 日志
**配置:**
* 调用关系在 weixin.oa.com 上申请,额外配置找 dendiwu。
* mmdata 需要后台服务封装,通过 rpc 调用(可支持)
* idkey 调用 kit 已经提供
* log4js 服务器上,需要安装 pm2-intercom 用于收集各实例的日志。否则用不了。
### 运维机器配置
**sysmeta.conf**
基本的系统配置,如果是测试机,还有 HostRole 字段。
[General]
#IDCName = shenzhen
IDCName = shanghai
Product = mm
HostRole = 1 # 测试机上设置的字段
**cmdb.conf**
- rpc port 和 host 在哪读?
- server Port 在哪读?
- cache port 怎么搞?有多台机器共享的话,这个服务怎么弄?混布?
- pm2, memorycached, node 第三方服务怎么搞?
## 应用目录 @dendiwu
- 模块名
- node(指定的node版本)
- application(项目代码)
- .pm2(模块、运行时)
## 代码目录
- app: ts=>js,最后的server端代码
- dist: 前端资源打包目录
- logs: 本地日志(部署后有指定的目录)
- protobuf
- proto文件
- config.js 接口配置信息
- protobuf.js 所有proto文件生成的js对象
- protobuf.ts 所有proto参数的ts定义
- public:
- 404页面\500页面
- 模板
- build: 构建配置
- script:
- start-dev.js: 启动本地开发 HMR client 和 server 端.
- src:
- @core: 一些基本的中间件和rpc调用封装,我们准备把他做成submodule,尽量一起来更新和维护这里的逻辑
- 别的目录可以自己按需组织
- pm2.config.js: 用来交给运维运行 pm2 命令配置文件.
## TODO
- 封装 config 文件
- 整理 node 和 client 文件目录
- 暴露一下 @core 里面的所有方法和文件
- 抽离一下 router 里面路由配置
- 写一下接入指南
## 部署
部署环境依赖 `pm2` 和 `ffi` 这两个包,需要在编译机上进行安装,由于本地不需要且安装比较麻烦,所以没有添加到依赖中
- package.json 里面的 deploy 命令
- 以及,dev:server 下面的 mmbizwxa_applicationname_node.js 文件名
- git clone 下来的文件目录名
- node/mmbizwxa_appliation_node.ts 的重命令文件
- config/index.js 里面的 APPLICATION_NAME 字段
- IDKEY
## 安装问题
> 部署环境依赖 pm2 和 ffi 这两个包,需要在编译机上进行安装,由于本地不需要且安装比较麻烦,所以没有添加到依赖中。所以,你需要在编译机上手动安装。