使用node命令自动部署服务
正在加载今日诗词....2022-09-14
自从有了服务器之后,以前用vitepress写的博客,每次修改之后,既要部署在github上,又想要部署在自己的服务器上。
github pages部署
github的部署已经有deploy脚本,可以输入yarn deploy
命令直接部署。
服务器部署
想从本地部署服务器,需要几个步骤:
连接服务器 使用ssh2-sftp-client
// config.js const config = { host: '43.140.252.63', // 服务器地址 remoteStatic: '/usr/local/tomcat/webapps/ROOT/dist.tar.gz', // 需要上传到服务器的目录 port: "22", // 端口 username: "root", // root password: "", // 密码 执行脚本时传入 node xxx/upload.js password localStatic: path.join(__dirname, '../../.vitepress/dist.tar.gz'), // tar.gz存在的目录 }; // index.js const Client = require("ssh2-sftp-client"); const config = require("./config"); sftp .connect(config) .then(() => { console.log(success("sftp连接成功")); ... })
上传打包后的文件
首先判断dist目录是否存在
如果存在,压缩后再传入(dist文件太多,传输太慢)
if (fs.existsSync(options.localStatic)) { console.log(success("开始上传压缩文件")); return sftp.put(options.localStatic, options.remoteStatic); } else if (fs.existsSync(baseDir)) { isDist = true; console.log(success("压缩文件不存在,开始上传dist目录")); return sftp.uploadDir(baseDir, options.remoteStatic.slice(0, -12)); }
上传完成,使用ssh2进行远程命令解压
... const { Client } = require("ssh2"); const conn = new Client(); conn .on("ready", () => { // 远程解压 const remoteModule = options.remoteStatic.replace( "dist.tar.gz", "" ); /** * 执行命令 * cd /usr/local/tomcat/webapps/ROOT * tar xvf dist.tar.gz */ conn.exec( `cd ${remoteModule};tar xvf dist.tar.gz`, (err, stream) => { if (err) throw err; stream .on("close", (code) => { code === 0 ? console.log(success("解压完成")) : console.log(error("解压失败")); }) ... }) ... })
将命令添加在scripts中
{ "scripts": { "zip": "cd .vitepress/dist && tar -zcvf ../dist.tar.gz *", "build:server": "cross-env APP_ENVKEY=server vitepress build && npm run zip", "deploy:server": "npm run build:server && node scripts/upload", }, }
输入命令
npm run deploy:server password
,password为服务器密码
通过以上几个步骤,就可以把前端服务直接通过命令行的方式部署在服务器上
代码地址
京ICP备2022027737号
Copyright © 2022 - present @wangxiang