scp2实现VuePress自动部署
shadowfish 2020-10-06 VuePress自动部署
我之前曾介绍过用WebHooks进行自动部署,它灵活性很好,特点是在每次 git 提交都可以自动触发部署。但是缺点是它需要在服务器上进行打包,占用了服务器的资源,我这个 1 核 2G 的服务器甚至有时候都能打包失败。这里介绍另一种实现 Vuepress(甚至可以是其他一些项目)的部署方式,即使用scp2
直接把相应的文件传送到服务器上。
# SCP2 安装
scp2
是一个 js 库,它简化了ssh2
的使用,它的作用可以简单理解为连接到服务器后进行文件的上传。
全局安装scp2
可以输入以下指令
npm install scp2 -g
# 编写基于 SCP2 的上传脚本
在项目下新建一个 js 文件,并在里面编辑上传代码
var client = require("scp2"); // 引入scp2
console.log("文档正在发布到服务器...");
client.scp(
"./.vuepress/dist", //要上传文件夹的本地位置
{
host: "xxx", // 服务器的IP地址
port: "22", // 服务器端口, 一般为 22
username: "xxxx", // 用户名
password: "xxxx", // 密码
path: "/www/wwwroot/xxxx", // 项目部署的服务器目标位置
privateKey: require("fs").readFileSync("./key.pem"), //若服务器使用密匙文件进行鉴权,在这里引入密匙文件,若不使用密匙文件则此项可省略
},
(err) => {
if (!err) {
console.log("文档发布完毕!");
} else {
console.log("err", err);
}
}
);
执行这段 JS 代码,即可将指定目录的文件上传到服务器,以实现部署的效果。而部署往往需要先本地打包再上传两个步骤,这里我们可以用 npm 脚本进行封装简化。
# 编写 npm 脚本
在项目package.json
文件中添加一项脚本:
"scripts": {
"docs:dev": "vuepress dev docs",
"docs:build": "vuepress build docs",
//添加下面这行代码
"deploy": "npm run docs:build && node deployDoc.js"
}
上面添加的代码意为当运行deploy
命令时,先执行docs:build
命令进行打包,再执行刚才我们编写的上传脚本deployDoc.js
进行上传。
# 执行部署
现在,我们可以直接运行
npm run deploy
进行一次自动打包部署。
# 使用 SCP2 部署的优点
使用 SCP2 进行部署,最突出的优点就是把打包过程放在本地,减轻服务器每次部署时的运算压力。如果服务器性能比较好,而且更倾向于基于 git 提交进行自动部署,可以使用WebHooks。