王志远,微医前端技术部
前言
本文非科普文章类型,旨在发布记录下,无关同学忽略即可,感谢
本文存在意义
搭建 xxx 下载工具的环境向导,最终的产物流程如下
应用架构
- kkb-Web:用户端(谷歌插件),包名,发起请求从而触发下载;这里要选择服务器,如果选择 local 开启时就会触发本地的 3000 端口(github.com/Sympath/kkb…)
- kkb-serve:服务端,接收请求,接收后进行下载【download-sh】仓库并输入依赖,执行课程下载流程(github.com/Sympath/dow…
- download-sh:下载流程脚本(github.com/Sympath/dow…
- kkb-download:核心下载模块(github.com/Sympath/kkb…
- kkb-serve-deploy:github.com/Sympath/dow… centos 云服务器搭建 kkb-serve 环境
搭建步骤
- 找一台远程服务器(centos7 系统),下拉【kkb-serve-deploy】仓库
git clone git@github.com:Sympath/down-serve-deploy.git
- 安装基础环境【百度云盘脚本上传 + ffmpeg 依赖 + kkb-serve 服务搭建】
2.1 安装 linux 百度云盘(这个需要获取授权码,所以没法自动化)安装完成后会输出一个地址,访问输出的的地址获取授权码,输入授权码进行验证即可
执行如下命令
cd down-serve-deploy && sudo chmod 777 ./ && nohup sh ./bypy-install.sh
2.2 执行核心脚本,会自动完成其他环境搭建和 kkb-serve 的服务启动
nohup sh ./init.sh
- 客户端:下拉谷歌插件 github.com/Sympath/kkb… 代码,然后添加自己的服务器 ip 地址即可(搜索【Here's the Server】,按规则填写,选择框就会有对应选择项了)
git clone git@github.com:Sympath/kkb-down-web.git
TODO
- 完成短信验证码登陆接入
- 剥离 xxx 依赖,从而扩展支持各大平台接入 checked
- 缓存机制,如果已经下载成功的课程,在下载流程中断之后的二次重启过程中,不要再下载;checked
- 服务器快速部署能力 ==》 支持一个初始化的 linux 服务器直接执行脚本自动搭建 kkb-down-serve,及 kkb-down-core 运行环境 checked
- 配置 git 环境
- 搭建 kkb-down-core 运行环境:ffmpeg 安装
- 下拉 kkb-down-serve 仓库、安装依赖并 pm2 启动
- 加下拉框,支持点击下拉显示目前已经上传的包列表
- 终端连接:将下载的日志输出在谷歌插件面板中
- 待实现服务器主动推送:完成时主动推消息
- kkb-serve-deploy:linux 版百度云盘需要授权,授权过程是【1.
bypy info触发授权 2. 访问输出的的地址获取授权码 3. 输入授权码进行验证】,这部分暂时需要手动处理 - 复用依赖问题:每次下载都会安装一遍 kkb-down-core 的核心依赖,这个是否可以复用
- 谷歌插件优化
- pageAction 接入:针对 xxx 网站才打开
- 将所有的 shell 都放在 kkb-down-sh 中
- 自动化执行:为了避免并行进程过多,对下载任务进行了拆分处理,每次只做 10 条下载任务;而这时就需要人为的看当前任务是否完成,完成则执行下一条,这点需要进行优化。思路如下
- 获取下一个脚本: 每个脚本执行完就记录下当前执行的序号,下一个脚本名称就是序号+1
- 执行时机:可以设定一个定时任务,定时 ps -ef 查询当前是否还存在 sh/config*/index.sh 进程,不存在了就执行下一条即可
- 常用命令记录:项目根目录下生成常用执行命令,参考【常用命令】模块 checked
- upload-remote: 需要考虑完全没有上传过的情况
- 账户结束标识:
- 记录脚本信息对象,存储信息如下
- 有多少个 all 脚本:allNum
- all 脚本对应信息对象
- 当前 all 脚本的课程数 nohupNum
- 当前 all 脚本的序号 serial
- 当前 all 脚本的中止进程命令
- 定义完成课程数累加器 completeNum,初始为 0,课程脚本结束时将累加器+1,
- completeNum === allNohupNum 时,进行下一步
- 当所有都执行完了,即 allNum;则发送完成邮件
- 当没有执行完,执行下一个脚本; 执行 npm run build-sh${serial+1}
- 记录脚本信息对象,存储信息如下
- 单个课程下载:自动判断当前页是课程页还是视频页