shadowfish和他的代码

vuePress-theme-reco shadowfish    2020 - 2023
shadowfish和他的代码

Choose mode

  • dark
  • auto
  • light
时间轴

shadowfish

49

Article

42

Tag

时间轴

scp2实现VuePress自动部署

vuePress-theme-reco shadowfish    2020 - 2023

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 。