nodeのキーをリリースし、実行します.
16106 ワード
フロントエンドの開発者として、業務コードだけを書くなら、プログラマとして考えてもいいです.しかし、アーキテクチャの観点から考えると、それは十分ではない.
成長中の経験をここに記します.
達成したい目的:スクリプト実行コードのパッケージを実行し、サーバーにアップロードし、サーバーに展開する.
サービス:pm 2、nodejsをインストールする必要があります.
ローカルルートディレクトリの下でスクリプトファイル名を作成してから編集します.
1.ダウンロードに依存するカバン
2.1 nodeのコアモジュールを導入するchild_process
server.jsは単独で手動で作成する必要があります.以下のコードとは関連がありません.
成長中の経験をここに記します.
達成したい目的:スクリプト実行コードのパッケージを実行し、サーバーにアップロードし、サーバーに展開する.
サービス: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();
})