Closed Jiang-Xuan closed 4 years ago
需要抽出来的环境变量有(还未最终确定):
当前的项目使用 pm2 作为进程守护工具
第三方部署需要是可升级式的部署, 提供升级的文档, 相应的提供卸载的文档
- 开放数据 前端 bff 层服务监听的端口(默认: 4303)
- 开放数据 后端服务监听的端口(默认: 4300)
启动时从用户的配置文件中读取相应的值, 校验数据格式是否正确, 不正确抛出错误, 终止程序. 如果没有的话使用系统的内部值
self-hosted.config.js
new Oss({
// 配置文件中的 ali-oss 的配置数据
})
只会校验配置的参数和格式, 不会校验是否 id, secret 是否真的有效, 可以上传或者是删除图片, 这种校验涉及到第三方服务, 可以暂不校验, 等待服务启动起来之后再行校验
为什么不校验是否真正有效?
因为 id, key 是否有效需要阿里云第三方服务校验, 不属于该系统的校验, 该系统只校验 id, key 是字符串就可, 当真正的上传图片的时候才去第三方校验, 如果失败, 让用户感知是第三方服务抛出了错误, 而不是该系统抛出了错误
module.exports = {
bff:{listenPort: 4303}
}
是否将资源发布至云存储?
module.exports = {
FRONDEND: {
asset: {
useCloudStorage: false,
cloudStorageUploadConfig: {
aliOss: {
accessKeyId: '',
accessKeySecret: '',
bucket: '',
secure: true
}
},
// 资源要挂载的目录地址, 默认为 frondend 目录下的 dist 目录
location: ''
}
}
}
参考 https://github.com/DXY-F2E/api-mocker , index.html 可以通过 nginx 配置进行访问, bff 层不是必须的, 因此 BFF 的配置和启动皆为可选项
静态资源也只有启动的第一次的时候需要, 其实的时候其实不是必须, 静态资源的打包需要配置的就是 index.html 的静态资源的引用地址, webpack 支持配置 cdn 的地址(publicPath), 所以这个配置需要交给用户
用户的配置文件在仓库中被 gitignore, 里面存储机密数据和非机密数据, 统称为配置
是 使用何种云服务发布静态资源, 目前只支持阿里云oss 否 将静态资源挂载到何处, 默认为 frondend 目录下的 dist 目录
module.exports = {
frondend: {
asset: {
useCloudStorage: false,
cloudStorageUpload: {
aliOss: {
accessKeyId: '',
accessKeySecret: '',
bucket: '',
secure: true
}
},
// 资源要挂载的目录地址, 默认为 frondend 目录下的 dist 目录
location: '',
// webpack 打包的 publicPath 配置, 详情可以参考 webpack 的文档
webpackPublicPath: '',
}
}
}
yarn install
安装 -> config -> 启动服务 -> 运行测试
git clone <仓库地址>
创建 self-hosted.config.js
配置文件
开始启动各项服务
frondend
层安装依赖, 打包, 发布静态资源
bff
层安装依赖, 启动 HTTP 服务
backend
层安装依赖, 启动 HTTP 服务
git clone <仓库地址>
Github Actions 负责执行
创建 self-hosted.config.js
, 通过 Github Actions
secret 传递敏感数据 由 Github Actions 调用脚本负责执行这一操作
开始启动各项服务
frondend
层安装依赖, 打包, 发布静态资源 由 Github Actions 调用脚本负责执行这一操作
bff
层安装依赖, 启动 HTTP 服务 由 Github Actions 调用 pm2 deploy 来实现 CD
backend
层安装依赖, 启动 HTTP 服务 由 Github Actions 调用 pm2 deploy 来实现 CD
后端服务配置
/** @type {{}} 后端 */
backend: {
/** @type {{}} 图片存储源 */
imageStorage: {
aliOss: {}
},
/** @type {number} HTTP 服务监听的端口号 */
listenPort: 1,
/** @type {string} 生成删除图片 Key 的加密 key */
deleteKeyCryptoKey: '',
/** @type {[number, number]} 请求频率限制, 以秒为单位 */
seconds: [],
/** @type {[number, number]} 请求频率限制, 以小时为单位 */
hours: [],
/** @type {string} mongodb 数据库的地址 */
dbPath: ''
}
目前仓库里面后端 e2e 测试需要 aliyun 的 oss 服务介入, 所以需要提供测试的 alioss 配置
test: {
imageStorage: {
aliOss: {}
}
}
local: { path: '/path/to/store/images' }
目前代码中并不支持 本地存储目录存储图片, 该 issue 只是为了支持第三方部署, 不是为了添加新功能, 该功能推迟
2020.3.30 剩余的工作
在多系统 Ubuntu, centos 下测试 self-hosted.config.js测试用例应该在多平台下进行测试, 不属于该 issue 内容. e2e 测试就是在测试可用性测试图片存储源配置
self-hosted.config.js -> backend.imageStorage
本地的某一个地址, 内网访问会比 CDN 更快 目前代码中并不支持 本地存储目录存储图片, 该 issue 只是为了支持第三方部署, 不是为了添加新功能, 该功能推迟前端静态资源发布配置
self-hosted.config.js -> frondend.asset
MongoDB 数据库
后端服务配置