nodeのキーをリリースし、実行します.

16106 ワード

フロントエンドの開発者として、業務コードだけを書くなら、プログラマとして考えてもいいです.しかし、アーキテクチャの観点から考えると、それは十分ではない.
成長中の経験をここに記します.
達成したい目的:スクリプト実行コードのパッケージを実行し、サーバーにアップロードし、サーバーに展開する.
サービス:pm 2、nodejsをインストールする必要があります.
ローカルルートディレクトリの下でスクリプトファイル名を作成してから編集します.
1.ダウンロードに依存するカバン
npm i compressing ssh2 -S
//compressing            
//ssh2                  
2.作成操作のファイルはルートディレクトリにあります.
2.1 nodeのコアモジュールを導入するchild_process
const {exec} = require('child_process')
2.2導入compressing圧縮ファイルプラグイン
const compressing = require('compressing')
2.3リモートサーバに接続するプラグインを導入するssh2
const Client = require('ssh2').Client;
2.4作成対象の中にサーバー接続の属性があります.
const server = {
        host : '      ip  ',
        prot : 22,   //               
        username : '           ',
        password : '        '  
}
2.5 ssh 2のオブジェクトを作成する
const connect = new Client()
2.6ファイル全体を実行する時に、nodeにサブスレッドを作成させる
/*            ,                  node   child_process.exec  ,           
            error stdout stderr
     error    null else error   Error  
stdout stderr         stdout stderr  
*/
const bat = exec('npm run build',(err,stdout,stderr)=>{
          if (err) return console.log(`exec error: ${err}`);
          console.log("    ");
          //      
          compress();
})
2.7パオズスレッドを実行した後、包装されたファイルを圧縮する
function compress () {
          console.log('*******   *******');
          //     compressing           
          //
          compressing.zip.compressDir('dist/','dist.zip').then(()=>{
            console.log('*****    *****');
            //                   
            conn();
      })
}
2.8接続サーバを作成する方法などの圧縮が成功したら呼び出します.
function conn () {
      console.log('*****     ******');
      //        ssh2  
      //ready         
      //error       
      //end       
      //close        ,         ,hadError    true
      connect.on('ready',()=>{
        //                
        upload()
     }).on('error',(err)=>{
        console.error(err)
        console.log('*****    *****')
     }).on('end',()=>{
        console.log('*****    *****')
     }).on('close',(err)=>{
       if (err) return console.log('*****    *****')
     }).connect(server)
      //connect    server                  ssh2-npm  
}
2.9 ssh 2の検証が完了したら、ファイルをアップロードする方法を呼び出します.
function upload () {
      console.log('******    ******');
      //    sftp                      err  ,  sftp   
      connect.sftp((err,sftp)=>{
          if (err) throw err;
            //sftp                      ,                         
            sftp.fastPut('        ','         ',(err,res)=>{
            if (err) {
                console.log('****    *****');
                console.error(err);
                //         end      
                connect.end();
                return;
            }
            //                
            unzipShell()
        })
    })
}
2.10ファイルのアップロードが成功したら解凍方法を呼び出す
function unzipShell() {
      //           shell           ,              error      shell   
      connect.shell((err,stream)=>{
          console.log('******   ******');
          if (err) throw err;
            let buf = "";
            //             close  
            stream.on('close',err =>{
                //    
                connect.end();
                //                  
                if (err) return console.error(err);
                console.info('****** SUCCESS!! *******');
          }).on('data',data=>{
                //data  stream.data         
                buf += data;
                console.log(buf)
          })
           //              
        //(                 )
        //1.                 
        //2.cd                             
        //3.                       
        //4.cd          pm2  node  
        stream.write('cd          && unzip         
next
');    stream.write('cd && /bin/cp -r -f * ../
next
');   stream.write('cd ../ && rm -r -f dist && rm -r -f
next
');    stream.write('cd ../ && pm2 start nodemon server.js
exit
'); //server.js }) }
3.サービスのルートディレクトリにserver.jsファイルを追加しました.私が使っているのはnodeサービスの委託文書です.
//  node  express
const express = require("express");
//      
const app = express();
//                      dist
app.use(express.static("./dist"));
//       3000   
app.listen(3000,(err)=>{
  if (err) return err;
  console.log('server running at http://127.0.0.1:3000');
})
完了コード
server.jsは単独で手動で作成する必要があります.以下のコードとは関連がありません.
const {
    exec
} = require("child_process");
const compressing = require("compressing");
const Client = require("ssh2").Client;
const server = {
    host: '   ip',
    port: 22,
    username: '   ',
    password: '  '
}

const connect = new Client();

function conn() {
    console.log('*******     ***********');
    connect.on('ready', () => {
        upload();
    }).on('error', (err) => {
        console.error(err);
        console.log('*****    ******')
    }).on('end', () => {
        console.log('*******    ********')
    }).on('close', (err) => {
        if (err) throw err;
    }).connect(server);
}

function upload() {
    console.log('******    ********');
    connect.sftp((err, sftp) => {
        if (err) throw err;
        sftp.fastPut('./dist.zip', '/home/yunwo/dist/dist.zip', (err, res) => {
            if (err) {
                console.error(err);
                console.log("*******    ******");
                connect.end();
                return;
            }
            unzipShell()
        })
    })
}

function unzipShell() {
    connect.shell((err, stream) => {
        console.log('*******   *******');
        if (err) throw err;
        let buf = "";
        stream.on('close', err => {
            connect.end();
            if (err) return console.error(err);
            console.info('******** success!! *********');
        }).on('data', data => {
            buf += data;
            console.log(buf);
        })
        stream.write('cd /home/yunwo/dist && unzip dist.zip 
next
'); stream.write('cd dist && /bin/cp -r -f * ../
next
'); stream.write('cd .. && rm -r -f dist && rm -r -f dist.zip
next
'); stream.write('cd .. && pm2 start nodemon yunwoserver.js
exit
'); }) } function compress() { console.log('****** ********'); compressing.zip.compressDir('dist/', 'dist.zip').then(() => { console.log('****** ******'); conn(); }) } console.log('******* *******'); const bat = exec('npm run build', (err, stdout, stderr) => { if (err) return console.error(`exec error : ${err}`); console.log('******** **********'); compress(); })