当前位置: 首页 > article >正文

ssh2-sftp-client和ssh2配合使用js脚本快速部署项目到服务器

有时候因为服务器不能实现github或者gitlab的自动部署服务,所以就需要使用脚本来实现自动部署,可以省时省力,一劳永逸。这里就使用ssh2-sftp-client和ssh2来实现,即便是需要sudo权限,也是可以的。

1.先将本地打包后的目录上传到服务器

2.然后将上传后的文件夹使用sudo命令移动到指定位置

const Client = require('ssh2-sftp-client')
const { Client: SSHClient } = require('ssh2')

const sftp = new Client()
const ssh = new SSHClient()

const localFolderPath = './dist/build/h5' // 本地文件夹路径
const remoteTempPath = '/home/songjj/h5I18n' // 远程临时路径
const remoteTargetPath = '/var/www' // 远程目标路径
const sudoPassword = 'sudo密码'

const sftpConfig = {
    host: '服务器地址',
    port: 22,
    username: '账号',
    password: '密码',
}

// 连接到 SFTP 服务器
sftp.connect(sftpConfig)
    .then(() => {
        console.log('Connected to server. start uploading...')
        // 上传文件夹到服务器
        return sftp.uploadDir(localFolderPath, remoteTempPath)
    })
    .then((res) => {
        console.log('Upload complete.', res)
        // 将h5文件夹内容拷贝到/var/www/h5I18n/
        ssh.on('ready', () => {
            console.log('SSH 连接成功')
            // 执行sudo命令,并使用echo和管道将密码传递给sudo
            ssh.exec(
                `echo '${sudoPassword}' | sudo -S mv ${remoteTempPath} ${remoteTargetPath}`,
                (err, stream) => {
                    if (err) throw err
                    stream
                        .on('close', (code, signal) => {
                            console.log(
                                `命令执行完成: ${code}, 信号: ${signal}`
                            )
                            ssh.end()
                        })
                        .on('data', (data) => {
                            console.log('输出:', data.toString())
                        })
                        .stderr.on('data', (data) => {
                            // 错误输出: mv: cannot move '/home/songjj/h5I18n' to '/var/www/h5I18n': Directory not empty
                            console.error('错误输出:', data.toString())
                        })
                }
            )
        }).connect(sftpConfig)
    })
    .catch((err) => {
        console.error(`Upload error: ${err.message}`)
    })
    .finally(async () => {
        console.log('Disconnected from server.')
        await sftp.end()
    })

然后保存文件为deploy.cjs

然后使用node运行这个脚本就可以了:

node deploy.cjs


http://www.kler.cn/a/503059.html

相关文章:

  • 【Linux 之一 】Linux常用命令汇总
  • Http 响应状态码 前后端联调
  • 详解 Docker 启动 Windows 容器第二篇:技术原理与未来发展方向
  • 组织切片配准(切割角度校正)
  • 网络应用技术 实验七:实现无线局域网
  • Spring Boot 支持哪些日志框架
  • 力扣264. 丑数 II
  • 后端接口获取的对象包含图片,渲染后端图片,拼接地址渲染,循环列表,vue+uniapp
  • Visual Studio Code (VSCode)为当前项目设置保存时自动格式化
  • 禅道 ip 地址变换后的修改
  • 有限元分析学习——Anasys Workbanch第一阶段笔记(11)横梁中点挠度仿真结果与计算结果对比
  • 罗德与施瓦茨ZN-Z135,26.5G经济型网络分析仪校准套件
  • CSS语言的语法
  • iOS - runtime总结
  • Github 2025-01-13 开源项目周报 Top15
  • 【图像去噪】论文精读:High-Quality Self-Supervised Deep Image Denoising(HQ-SSL)
  • MyBatis 性能优化
  • c++自定义String
  • 【Pytorch实用教程】PyTorch 中如何输出模型参数:全面指南
  • 战略与规划方法——深入解析波士顿矩阵(BCG Matrix):分析产品组合的关键工具
  • Python----Python高级(函数基础,形参和实参,参数传递,全局变量和局部变量,匿名函数,递归函数,eval()函数,LEGB规则)
  • python中bug修复案例-----数据类型不匹配错误导致的bug修复
  • 如何在应用或系统中正确解析和渲染淘宝商品详情API接口返回的HTML内容?
  • Chromium 132 编译指南 Windows 篇 - 生成构建文件 (六)
  • Portainer.io安装并配置Docker远程访问及CA证书
  • 腾讯云AI代码助手编程挑战赛-百事一点通