Jiang-Xuan / tuchuang.space

一个测试驱动的开源图床系统
https://tuchuang.space
MIT License
5 stars 1 forks source link

第三方部署 #31

Closed Jiang-Xuan closed 4 years ago

Jiang-Xuan commented 5 years ago

2020.3.30 剩余的工作


图片存储源配置

self-hosted.config.js -> backend.imageStorage

前端静态资源发布配置

self-hosted.config.js -> frondend.asset

MongoDB 数据库

后端服务配置

Jiang-Xuan commented 5 years ago

第三方部署直接就是 production 环境

需要抽出来的环境变量有(还未最终确定):

  1. 机密数据 MongoDB url, 包括数据库 username, password, database
  2. 机密数据 上传至阿里云的 accessKey id
  3. 机密数据 上传至阿里云的 accessKey secret
  4. 开放数据 前端 bff 层服务监听的端口(默认: 4303)
  5. 开放数据 后端服务监听的端口(默认: 4300)
Jiang-Xuan commented 5 years ago

当前的项目使用 pm2 作为进程守护工具

Jiang-Xuan commented 5 years ago

第三方部署需要是可升级式的部署, 提供升级的文档, 相应的提供卸载的文档

Jiang-Xuan commented 5 years ago
  1. 开放数据 前端 bff 层服务监听的端口(默认: 4303)
  2. 开放数据 后端服务监听的端口(默认: 4300)

启动时从用户的配置文件中读取相应的值, 校验数据格式是否正确, 不正确抛出错误, 终止程序. 如果没有的话使用系统的内部值

self-hosted.config.js

Jiang-Xuan commented 4 years ago

校验 ali-oss 的 accessKeyId accessKeySecret 等参数

new Oss({
   // 配置文件中的 ali-oss 的配置数据
})

只会校验配置的参数和格式, 不会校验是否 id, secret 是否真的有效, 可以上传或者是删除图片, 这种校验涉及到第三方服务, 可以暂不校验, 等待服务启动起来之后再行校验

为什么不校验是否真正有效?

因为 id, key 是否有效需要阿里云第三方服务校验, 不属于该系统的校验, 该系统只校验 id, key 是字符串就可, 当真正的上传图片的时候才去第三方校验, 如果失败, 让用户感知是第三方服务抛出了错误, 而不是该系统抛出了错误

Jiang-Xuan commented 4 years ago

BFF 层监听端口配置

module.exports = {
  bff:{listenPort: 4303}
}
Jiang-Xuan commented 4 years ago

前端静态资源发布管理

是否将资源发布至云存储?

module.exports = {
    FRONDEND: {
        asset: {
            useCloudStorage: false,
            cloudStorageUploadConfig: {
                aliOss: {
                    accessKeyId: '',
                    accessKeySecret: '',
                    bucket: '',
                    secure: true
               }
            },
           // 资源要挂载的目录地址, 默认为 frondend 目录下的 dist 目录
            location: ''
        }
    }
}
Jiang-Xuan commented 4 years ago

参考 https://github.com/DXY-F2E/api-mocker , index.html 可以通过 nginx 配置进行访问, bff 层不是必须的, 因此 BFF 的配置和启动皆为可选项

静态资源也只有启动的第一次的时候需要, 其实的时候其实不是必须, 静态资源的打包需要配置的就是 index.html 的静态资源的引用地址, webpack 支持配置 cdn 的地址(publicPath), 所以这个配置需要交给用户

Jiang-Xuan commented 4 years ago

用户的配置文件在仓库中被 gitignore, 里面存储机密数据和非机密数据, 统称为配置

Jiang-Xuan commented 4 years ago

前端静态资源发布管理

是 使用何种云服务发布静态资源, 目前只支持阿里云oss 否 将静态资源挂载到何处, 默认为 frondend 目录下的 dist 目录

module.exports = {
    frondend: {
        asset: {
            useCloudStorage: false,
            cloudStorageUpload: {
                aliOss: {
                    accessKeyId: '',
                    accessKeySecret: '',
                    bucket: '',
                    secure: true
               }
            },
           // 资源要挂载的目录地址, 默认为 frondend 目录下的 dist 目录
            location: '',
           // webpack 打包的 publicPath 配置, 详情可以参考 webpack 的文档
            webpackPublicPath: '',
        }
    }
}
Jiang-Xuan commented 4 years ago

使用步骤

  1. clone 或者是下载代码
  2. 配置配置项或者是默认
  3. yarn install
  4. 打包前端静态资源
  5. 启动 nginx 配置 index.html 的指向或者是启动 bff 服务, 将 index.html 的控制交给 bff 层
  6. 启动后端服务, 依赖 MongoDB, 阿里云 OSS
Jiang-Xuan commented 4 years ago

如何跨端(windows, linux)测试

安装 -> config -> 启动服务 -> 运行测试

Jiang-Xuan commented 4 years ago

用户和手动安装方式

  1. git clone <仓库地址>

  2. 创建 self-hosted.config.js 配置文件

  3. 开始启动各项服务

    1. frondend 层安装依赖, 打包, 发布静态资源

    2. bff 层安装依赖, 启动 HTTP 服务

    3. backend 层安装依赖, 启动 HTTP 服务

Github Actions 方式

  1. git clone <仓库地址> Github Actions 负责执行

  2. 创建 self-hosted.config.js, 通过 Github Actions secret 传递敏感数据 由 Github Actions 调用脚本负责执行这一操作

  3. 开始启动各项服务

    1. frondend 层安装依赖, 打包, 发布静态资源 由 Github Actions 调用脚本负责执行这一操作

    2. bff 层安装依赖, 启动 HTTP 服务 由 Github Actions 调用 pm2 deploy 来实现 CD

    3. backend 层安装依赖, 启动 HTTP 服务 由 Github Actions 调用 pm2 deploy 来实现 CD

Jiang-Xuan commented 4 years ago

image

后端服务配置

Jiang-Xuan commented 4 years ago
  /** @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: ''
  }
Jiang-Xuan commented 4 years ago

目前仓库里面后端 e2e 测试需要 aliyun 的 oss 服务介入, 所以需要提供测试的 alioss 配置

test: {
  imageStorage: {
    aliOss: {}
  }
}
Jiang-Xuan commented 4 years ago

本地存储目录配置

local: { path: '/path/to/store/images' }

目前代码中并不支持 本地存储目录存储图片, 该 issue 只是为了支持第三方部署, 不是为了添加新功能, 该功能推迟