-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathmethods-remote.js
227 lines (208 loc) · 8.87 KB
/
methods-remote.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
const { NodeSSH } = require("node-ssh");
const path = require("path");
const fs = require("fs-extra");
module.exports = {
config: (deployJsonName = "config.json") => {
let cwd_process = process.cwd();
return require(path.resolve(cwd_process, deployJsonName));
},
waiting: (time) =>
new Promise((resolve, reject) => {
setTimeout(() => {
resolve(true);
}, time);
}),
connect: async (_config) => {
console.log("Start Connect to server");
console.log("");
let session_ssh = new NodeSSH();
let config = {
host: _config.server.host,
username: _config.server.username,
tryKeyboard: true,
};
if (_config.server.password) {
config.password = _config.server.password;
}
if (_config.server.pem) {
config.privateKey = _config.server.pem;
}
try {
await session_ssh.connect(config);
return session_ssh;
} catch (err) {
console.log("Connect to Server Error ", err);
}
},
runCommand: async (cmd, ssh, method) => {
try {
console.log('cmd', cmd)
let result = await ssh.execCommand(cmd, {});
if (result.stderr) {
if (/.*error.*/.test(result.stderr)) {
console.log(`${method}\r\n`, result.stderr);
return false;
}
}
console.log('Result Run : ' + method, result.stdout);
return result.stdout;
} catch (error) {
console.log(error);
return false;
}
},
checkHost: async function (ssh) {
let cmd = `(command -v git || echo 'missing git' 1>&2) && (command -v docker || echo 'missing docker' 1>&2)`;
console.log("Start check server");
console.log("");
let result = await this.runCommand(cmd, ssh, "Start check server");
if (/.*missing.*/.test(result)) {
console.log("Error", result);
return false;
} else {
console.log("Success", result);
return true;
}
},
initHost: async function (_config, ssh) {
console.log("Start check source application");
console.log("");
await this.runCommand(
`cd ${_config.server.deploymentDir} && mkdir ${_config.appName}`,
ssh,
"Start create Folder application"
);
let cmd = `cd ${_config.server.deploymentDir} && [ -d "${_config.appName}" ] && echo "yes" || echo "noop"`;
let result = await this.runCommand(
cmd,
ssh,
"Start check source application"
);
if (/.*noop.*/.test(result)) {
console.log("App not exists");
return false;
} else {
return true;
//return this.pull(_config, ssh)
}
},
upToServer: async function (_config, ssh) {
console.log("Start upload Dockerfile && .env");
console.log("");
try {
let cwd_process = process.cwd();
await ssh.putFile(
`${cwd_process}/nuxt.tar.gz`,
`${_config.server.deploymentDir}/${_config.appName}/nuxt.tar.gz`
);
await ssh.putFile(
`${cwd_process}/static.tar.gz`,
`${_config.server.deploymentDir}/${_config.appName}/static.tar.gz`
);
await ssh.putFile(
`${cwd_process}/nuxt.config.js`,
`${_config.server.deploymentDir}/${_config.appName}/nuxt.config.js`
);
if (fs.existsSync(`${cwd_process}/language.tar.gz`)) {
await ssh.putFile(
`${cwd_process}/language.tar.gz`,
`${_config.server.deploymentDir}/${_config.appName}/language.tar.gz`
);
}
if (_config.useEnv === true) {
await ssh.putFile(
`${cwd_process}/.env`,
`${_config.server.deploymentDir}/${_config.appName}/.env`
);
console.log("Upload Dockerfile && .env Success");
}
console.log("Upload Dockerfile && .env Success");
} catch (err) {
console.log("Upload Dockerfile && .env Fail");
console.log(err);
return false;
}
return true;
},
runAppNotBuild: async function (_config, ssh, isRemoteBase) {
console.log("Start Run Container");
console.log("");
let network = '';
if (typeof _config.network === 'string' && _config.network) {
network = _config.network;
}
let _version_ = fs.readFileSync('image-base-version', 'utf8');
if (_version_) _version_ = _version_.toString();
//if (isRemoteBase === false ) {
let cmd = `${_config.server.sudo} docker stop ${_config.appName} && docker rm -f ${_config.appName} || echo 'not' 1>&2 && ${_config.server.sudo} docker run --restart=always --name ${_config.appName} ${network} -d ${_config.volume} ${_config.port} b-${_config.basename}-${_version_}:latest`;
await this.runCommand(cmd, ssh, "Run Container completed");
//}
cmd = `${_config.server.sudo} docker cp ${_config.server.deploymentDir}/${_config.appName}/.nuxt ${_config.appName}:/usr/src/app/.nuxt`;
await this.runCommand(cmd, ssh, "copy nuxt success ");
cmd = `${_config.server.sudo} docker cp ${_config.server.deploymentDir}/${_config.appName}/static ${_config.appName}:/usr/src/app/static`;
await this.runCommand(cmd, ssh, "copy static success ");
try{
cmd = `${_config.server.sudo} docker cp ${_config.server.deploymentDir}/${_config.appName}/language ${_config.appName}:/usr/src/app/language`;
await this.runCommand(cmd, ssh, "copy static success ");
}catch(e){}
cmd = `${_config.server.sudo} docker cp ${_config.server.deploymentDir}/${_config.appName}/nuxt.config.js ${_config.appName}:/usr/src/app/nuxt.config.js`;
await this.runCommand(cmd, ssh, "copy nuxt.config.js success ");
if (_config.useEnv === true) {
cmd = `${_config.server.sudo} docker cp ${_config.server.deploymentDir}/${_config.appName}/.env ${_config.appName}:/usr/src/app/.env`;
await this.runCommand(cmd, ssh, "copy .env success ");
}
//cmd = `${_config.server.sudo} docker exec -it ${_config.appName} pm2 restart 0`;
// await this.runCommand(cmd, ssh, "restart success ");
cmd = `${_config.server.sudo} docker restart ${_config.appName}`;
await this.runCommand(cmd, ssh, "copy restart success ");
},
clean: async function (_config, ssh) {
console.log("Start Clean!!");
console.log(""); //docker image prune --filter="dangling=true"
let cmd = `${_config.server.sudo} docker image prune --filter="dangling=true" -f`;
return await this.runCommand(cmd, ssh, "Start Clean!!");
},
isSuccess: async function (_config, ssh) {
if (_config.textVerify) {
if (_config.pathVerify) cmd = `curl ${_config.pathVerify}`;
let result = await this.runCommand(cmd, ssh, "check");
if (new RegExp(_config.textVerify, "g").test(result)) {
return true;
} else {
return false;
}
} else {
return true;
}
},
stop: async function (_config, ssh) {
let cmd = `${_config.server.sudo} docker stop ${_config.appName}`;
return await this.runCommand(cmd, ssh, "stop");
},
start: async function (_config, ssh) {
let cmd = `${_config.server.sudo} docker start ${_config.appName}`;
return await this.runCommand(cmd, ssh, "stop");
},
restart: async function (_config, ssh) {
let cmd = `${_config.server.sudo} docker restart ${_config.appName}`;
return await this.runCommand(cmd, ssh, "restart");
},
deleteFiles: async function (_config, ssh) {
console.log("Start Delete File");
let cmd = `rm -rf ${_config.server.deploymentDir}/${_config.appName}`;
return await this.runCommand(cmd, ssh, "deleteFiles");
},
upzip: async function (_config, ssh) {
console.log("Start unzip");
console.log("");
let cmd = `cd ${_config.server.deploymentDir}/${_config.appName} && rm -rf .nuxt && tar -xf nuxt.tar.gz`;
await this.runCommand(cmd, ssh, "upzip");
let cmd2 = `cd ${_config.server.deploymentDir}/${_config.appName} && rm -rf static && tar -xf static.tar.gz`;
await this.runCommand(cmd2, ssh, "upzip");
try{
let cmd2 = `cd ${_config.server.deploymentDir}/${_config.appName} && rm -rf language && tar -xf language.tar.gz`;
await this.runCommand(cmd2, ssh, "upzip");
}catch(e){}
return true;
},
};