以下是
的
- Bitbucket
设置截图。
- Webhook
COS,即对象存储(Cloud Object Storage,是面向企业和个人开发者提供的高可用,高稳定,强安全的云端存储服务。您可以将任意数量和形式的非结构化数据放入COS,并在其中实现数据的管理和处理。COS支持标准的Restful API接口,是非常适合作为静态文件部署存储服务。
首先,创建一个 Bucket,没有备案的域名请选择海外的节点,同时选择 CDN 加速(后面需要用):
创建后,会进入 vue Bucket 的文件列表页面,目前是空的。到 基础配置,中开启静态网站配置。
然后进入域名管理,添加域名。
然后到你的域名管理提供商,配置一下
解析。直接用上图的域名和
- CNAME
值。
- CNAME
如果需要开启
,还可以去申请
- HTTP2
证书,腾讯云可以申请免费的
- HTTPS
证书。
- HTTPS
等域名CDN加速部署好后,可以点击 COS 域名配置 中,具体域名的 高级配置,进入CDN 管理界面。
进入 缓存配置,添加一些缓存规则,如
等带有
- js, CSS, png, jpg
的资源可以长久缓存,而
- md5
等资源则不宜缓存。
然后进入高级配置,在当中配置
证书 和 开启
- HTTPS
。
- HTTP2
在部署服务器中,需要部署一个服务,用于监听
或者
- Github
发出来
- Bitbucket
请求,然后根据请求参数,去运行脚本自动将文件部署到腾讯云 COS 存储服务当中。
- Webhook
技术方案可大体如下实行。
监听请求方面,
部署一个小型服务,根据参考运行腾讯云
- koa + pm2
文件上传脚本,然后用
- COS
反向代理技术将请求代理到此小型服务中。
- nginx
至于
文件上传脚本,本人推荐 Java 与 Python 版本的,尤其是 Python 版本的比较容易安装部署。1. COSCMD 工具
- 腾讯云 COS
小型服务根据请求参考,先到本地部署好的文档
分支代码处,先行更新代码,然后再运行文件上传工具,将文件依次上传到 COS 服务中。
- gh-pages
以下是使用
工具的一个简单示例:
- COSCMD
- javascript const execSync =
- require
- (
- "child_process"
- ).execSync, moment =
- require
- (
- "moment"
- ), fs =
- require
- (
- "fs-extra"
- ), path =
- require
- (
- "path"
- );
- //
- COSCMD 基本配置 const config = {
- "appid"
- :
- "xxx"
- ,
- "secret_id"
- :
- "xxx"
- ,
- "secret_key"
- :
- "xxx"
- ,
- "timeout"
- :
- 60
- ,
- "max_thread"
- :
- 20
- , };
- //
- 执行命令方法 function exeCmd(cmd) { var result = execSync(cmd); console.log([${moment().format(
- 'YYYY-MM-DD HH:mm:ss'
- )}]${result}); } exports.index = function* () {
- //
- 从请求 url 参数中获得 project 和 cos 部署节点区域的值 const project = this.params.project
- ||
- ''
- , region = this.params.region
- ||
- 'cn-east'
- ; console.log([${moment().format(
- 'YYYY-MM-DD HH:mm:ss'
- )}],${project} is starting to update. The region is ${region}!);
- //
- gh-pages 分支代码存放位置 const codePath = path.join(
- /docs/files
- /${project}); if (!fs.existsSync(codePath)) { this.response.status = 400; console.log(${codePath} does not exist); return; } /
- / 更新 gh-pages 文件 const updateCommand = cd ${codePath};sudo git pull origin gh-pages;sudo git reset --hard gh-pages;; exeCmd(updateCommand); /
- / 更新 COSCMD 配置 const configCommand = coscmd config -a ${config.secret_id} -s ${config.secret_key} -u ${config.appid} -b ${project} -r ${region} -m ${config.max_thread}; exeCmd(configCommand); /
- / 筛选要上传的文件或文件夹 let info = fs.readdirSync(/docs
- /files/
- ${project},
- 'utf-8'
- ); info = info.filter((item) => {
- if
- (item.indexOf(
- '.'
- ) ===
- 0
- ) {
- return
- false
- ; }
- return
- true
- ; });
- //
- COSCMD 上传文件 info.forEach((item) => { let syncCommand =
- ''
- ; let stat = fs.statSync(path.join(
- /docs/files
- /${project}/
- ${item}));
- if
- (stat.isDirectory()) { syncCommand = sudo coscmd upload -r /docs/files/${project}/${item} ${item}/; }
- else
- { syncCommand = sudo coscmd upload /docs/files/${project}/${item} ${item}; } exeCmd(syncCommand); }); this.body =
- "success"
- ;
来源: https://cloud.tencent.com/community/article/307836