由于现在打包项目部署服务器是前端完成, 之前通过FTP或者SCP等软件完成上传,又或者是交给后端通过git推送拉取来部署, 几个服务器就要重复几遍操作, 感觉很麻烦, 所以找到了这种办法! 分享一下。
一、shelljs
和ssh2-sftp-client
ShellJS
ShellJS是基于Node.js API的Unix shell命令的可移植(Windows/Linux/macOS)实现。您可以使用它来消除shell脚本对Unix的依赖,同时仍然保留其熟悉而强大的命令。您也可以全局安装它,这样您就可以在Node项目外部运行它。
ssh2-sftp-client
ssh2-sftp-client是一个用于node.js的SFTP客户端,一个围绕SSH2的包装器,它提供了一个高层次的方便抽象和一个基于Promise的API。
什么?你说你看不懂? 没关系, 因为我也看不懂...
shelljs
这个库能够让我们在js文件中执行shell命令。shelljs做的事就是自动化,从耗时的重复性常规动作里解放出来,提升开发效率和工作心情(奇怪工作能有什么心情...)。
ssh2-sftp-client
是一个用于在Node.js中进行SSH文件传输的库。用于连接到远程服务器并执行各种文件传输操作,如上传、下载、删除和重命名文件等。
二、使用
1.首先安装 shelljs 和 ssh2-sftp-client
npm i shelljs ssh2-sftp-client --save-dev
2.新建文件夹(如:upload
), 然后文件夹里新建config.js
用来存放服务器的配置和index.js
用来存放上传脚本的代码
3.config.js
中导出服务器的配置
JavaScript
module.exports = [
{
ip: "xx.xxx.xxx.xxx",//服务器ip地址
username: '',//ssh用户名
port: '',//ssh端口号
password: '',//ssh密码
path: '如: /data/abc/xxx',//操作文件夹的配置地址路径
rmovepath: '/data/abc/xxx'//删除文件夹的配置地址路径
}
];
配置好服务器之后, 我们去写
index.js
4.index.js
这里面由于我不需要备份所以第一个then被注释掉了
下面是
connect
方法的其他配置项
- host:SFTP服务器的主机名或IP地址。
- port:SFTP服务器的端口号,默认为22。
- username:连接SFTP服务器的用户名。
- password:连接SFTP服务器的密码。
- privateKey:连接SFTP服务器的私钥文件路径。
- passphrase:私钥文件的密码(如果有)。
- agent:SSH代理的套接字路径。
- agentForward:是否启用SSH代理转发。
- localHostname:本地主机名。
- localUsername:本地用户名。
- tryKeyboard:是否尝试使用键盘交互进行身份验证。
- keepaliveInterval:保持活动连接的间隔时间(以毫秒为单位)。
- keepaliveCountMax:保持活动连接的最大尝试次数。
- readyTimeout:等待SFTP服务器准备就绪的超时时间(以毫秒为单位)。
- debug:是否启用调试模式。
5.这里要说一下有私钥的情况!
如果上传服务器时需要认证
私钥
, 请先将私钥
文件(如:id_rsa
)转换为.pem
文件, 不然会报错, 然后在connect
方法中加入对应的配置, 如下:
准备好.pem
文件,如下:
然后在connect
中加入参数即可,如下:
4.执行命令
你可以选择在
package.json
中添加命令, 然后可以使用VSCode一键运行 如下:
也可以选择直接在终端里输入
node upload/index.js
运行
三、注意!!!
最后的最后的最后, 如果你的项目需要上传到
gitee
等远程仓库,请一定要忽略掉关于服务器
的配置的文件, 不然...
在.gitignore
中添加对应的文件夹/文件即可
到这里, 此次分享就结束了, 如有错误的地方, 欢迎指出,我会加以改正!
:)