2017-03-06 1 views
0

私はクライアントマシンのローカルなNode.jsプロジェクトを持っています。遠隔地を監視して2つのファイル(server.js & logging.js)、ノードサーバーを自動的に停止し、リモートで変更されたファイルをローカルにコピーし、新しくコピーされたローカルファイルを使用してサーバーを再起動します。リモートの変更を監視してローカルに自動的にコピーする

これは、私たちのサービス部門のために定期的に実行インストールを実行する必要がないように、テスト済みの変更点を導入するために当社の運用環境で使用されます。

私は喜んで、変更のためのリモートファイル(複数可)を監視し、どちらも、永遠に& Nodemonを使用してみましたが、唯一のローカル(変わらない)コピーを再起動するので、これらの変更は、ローカルに伝播されませんしましたコピー。

プロダクション環境でForeverを使用して、私たちが経験するローカルサーバーのクラッシュを助ける予定です。したがって、理想的には、Foreverの-cスイッチを使用して任意のソリューションを実行できます。私はまた彼らの根底にあるコードchokidarを使って調査しましたが、変更時にファイルをコピーする能力を見ていませんでした。

私たちのデプロイメント環境はすべてWindowsベースなので、私はForever-Winを使用していますが、我々が実行しているアプリケーションにプラットフォームに依存しないようにしようとしています。

おそらくのようなもの:

forever start --watch \\server\share\server.js --watch \\server\share\logging.js -c [remote monitoring copy locally package name] server.js

私はすでにので、私は自分自身をロールバックする必要はありませんが存在するNPMパッケージを見つけることを願っています。

This SO answerは私が探しているものに近いですが、彼はサーバー自体ではなくログファイルを監視しています。

This is another SO questionこれは私が解決したい問題と非常に似ています。彼らはあなたがそれを行うことができますいくつかの方法があります

を変更したときに、いくつかの遠隔地で

  • 再起動サーバを

    1. 同期ファイル:

  • 答えて

    0

    私たちは永遠に使うことをあきらめてしまいました.Nodemonで正しく動作し、同時にリモートディレクトリを見ることができませんでした。クラッシュしたときにサーバーを再起動するよりも、コマンドのコード変更をプッシュできることが重要であると判断しました。コードをプッシュすると、サーバーはどんな場合でも再起動します。

    私は(私は自分の用途に変更されたコードへのリンクについては、以下の引用を参照)が含まれserverMon.jsと呼ばれるサーバー監視ファイルを作成:

    const fs = require('fs'); 
    const child_process = require('child_process'); 
    
    //production path 
    var widgetPath = '\\\\server\\share\\sbSerialWidget\\'; 
    
    var widgetFiles = ['sbNodeLog.js', 'server.js']; 
    var passedInFileName, infile, outfile; 
    
    for(var i = 0; i < widgetFiles.length; i++){ 
        fs.createReadStream(widgetPath + widgetFiles[i]).pipe(fs.createWriteStream(widgetFiles[i])); 
    } 
    //spawn server.js passing it's stdio, stderr, stdout back through this node instance 
    server = child_process.spawn('node', ['server.js'], {stdio: 'inherit'}, function (error, stdout, stderr) { 
        if (error) { 
         console.log(error.stack); 
         console.log('Error code: ' + error.code); 
         console.log('Server.js error received: ' + error.signal); 
        } 
        console.log('Server.js STDOUT: ' + stdout); 
        console.log('Server.js STDERR: ' + stderr); 
    }); 
    
    server.on('exit', function (code) { 
        server.kill('SIGTERM'); 
        console.log('Child process exited with exit code '+code); 
    }); 
    

    これはに含まれているnodemonスクリプトによって注目されています。 VBSファイル:順番に%ProgramData%\Microsoft\Windows\Start Menu\Programs\Startupに配置されたCMDスクリプトによって実行される

    CreateObject("Wscript.Shell").Run "nodemon serverMon.js --exitcrash --watch \\server\share\sbSerialWidget", 0, True

    ので、ブート時に.vbsスクリプトを起動し、そう私たちの小さなシリアルウィジェットは、常にバックグラウンドで実行されている:

    REM @echo off 
    REM cls 
    GOTO START 
    
    :START 
    IF EXIST "%ProgramFiles%\sbserialwidget\server.js" GOTO WIN32 
    IF EXIST "%ProgramFiles(x86)%\sbSerialWidget\server.js" GOTO WIN64 
    ECHO End start 
    GOTO END 
    
    :WIN32 
    cls 
    echo Inside 32 bit 
    PUSHD "%ProgramFiles%"\sbserialwidget 
    GOTO RUNVBS 
    GOTO END 
    
    :WIN64 
    echo Inside 64 bit 
    PUSHD "%ProgramFiles(x86)%"\sbSerialWidget 
    GOTO RUNVBS 
    GOTO END 
    
    :RUNVBS 
    echo Inside RUNVBS 
    start runNodemon.vbs 
    GOTO END 
    
    :END 
    popd 
    EXIT 
    

    リモートファイルの変更、および第3のサーバを監視しながら、私たちは、タスクマネージャで実行中のnode.exeの3つのインスタンス、秒を監視している1ランニングnodemon、serverMon.jsで終わります。 jsはserverMon.jsの子プロセスとして起動されます。

    引用:
    Copying node files with streams and pipes

    Spawning a node child server

    0

    あなたが本当にここに二つのことを必要とします。

    たとえば、サーバー上でgit repoをホストし、リモートからコードを更新し、サーバーを再デプロイして再起動するgitフックをトリガーすることができます。

    リモートのリポジトリをチェックし、ローカルのリポジトリを更新してサーバーを再起動するスクリプトをサーバーで定期的に実行できます。

    また、変更するリポジトリにフックされたCIサービスを使用して、テストが実行されたときにテストを実行してデプロイします。

    これらの方法のほとんどは、コードをリファクタリングしたり、ファイルを追加したりすることができるようになるため、ハードコードされた名前を持つ2つのファイルだけでなく、コードリポジトリについても話しています。 yse rsync、scpまたはsftpを実行してファイルをコピーします。それを行うには多くの方法がありますが、それに構造を追加し、長期的には維持しやすい拡張性のあるテスト済みのツールを使用すると便利です。

    あなたが何をしていても、覚えておいてください:あなたがダウンロードする前にダウンロードしていることを確認できることを確認してください。暗号化されたすべてのものを持っていない限り、HTTP経由で何もダウンロードしないでください。 siggningプロセスも安全であることを確認してください。 Gitはあなたがダウンロードしているものを確認することができるのでとても良いです。

    関連する問題