temp
This commit is contained in:
parent
0144f94edd
commit
d9fe68d3fe
@ -18,7 +18,8 @@
|
||||
"pub": "npm run build && npm run deploy && npm run reload",
|
||||
"deploy:nova": "rsync -avz --delete ./dist/ --exclude='app.config.json5' nova:~/apps/codeflow/backend",
|
||||
"apps:build": "rollup -c rollup.apps.config.mjs",
|
||||
"apps:watch": "rollup -c rollup.apps.config.mjs -w"
|
||||
"apps:watch": "rollup -c rollup.apps.config.mjs -w",
|
||||
"start": "pm2 start dist/app.mjs --name codeflow"
|
||||
},
|
||||
"keywords": [],
|
||||
"types": "types/index.d.ts",
|
||||
|
35
src/modules/self-restart.ts
Normal file
35
src/modules/self-restart.ts
Normal file
@ -0,0 +1,35 @@
|
||||
import { useConfig } from '@kevisual/use-config';
|
||||
import childProcess from 'child_process';
|
||||
const config = useConfig<{
|
||||
appName: string;
|
||||
}>();
|
||||
|
||||
export const selfRestart = async () => {
|
||||
const appName = config.appName || 'codeflow';
|
||||
// 检测 pm2 是否安装和是否有 appName 这个应用
|
||||
try {
|
||||
const res = childProcess.execSync(`pm2 list`);
|
||||
const list = res.toString();
|
||||
if (!list.includes(appName)) {
|
||||
console.error(`pm2 list not found ${appName}`);
|
||||
console.log('error', list);
|
||||
return;
|
||||
}
|
||||
} catch (e) {
|
||||
console.error('pm2 not found');
|
||||
return;
|
||||
}
|
||||
|
||||
// 执行 pm2 restart appName 命令
|
||||
return new Promise((resolve, reject) => {
|
||||
const res = childProcess.exec(`pm2 restart ${appName}`);
|
||||
res.stdout.on('data', (data) => {
|
||||
console.log('self-restart:', data);
|
||||
resolve(data);
|
||||
});
|
||||
res.stderr.on('data', (data) => {
|
||||
console.error('self-restart error:', data);
|
||||
reject(data);
|
||||
});
|
||||
});
|
||||
};
|
@ -2,6 +2,7 @@ import { app } from '@/app.ts';
|
||||
import { MicroAppUploadModel } from './models.ts';
|
||||
import { appPathCheck, installApp } from './module/install-app.ts';
|
||||
import { manager } from './manager-app.ts';
|
||||
import { selfRestart } from '@/modules/self-restart.ts';
|
||||
|
||||
// 应用上传到 应用管理 的平台
|
||||
app
|
||||
@ -21,7 +22,36 @@ app
|
||||
if (collection?.tags) {
|
||||
tags.push(...collection.tags);
|
||||
}
|
||||
const microApp = await MicroAppUploadModel.create({
|
||||
if (!name) {
|
||||
ctx.throw(400, 'Invalid file');
|
||||
}
|
||||
let microApp = await MicroAppUploadModel.findOne({
|
||||
where: { title: name, uid },
|
||||
});
|
||||
if (microApp) {
|
||||
await MicroAppUploadModel.update(
|
||||
{
|
||||
type: 'micro-app',
|
||||
tags,
|
||||
data: {
|
||||
...microApp.data,
|
||||
file: {
|
||||
path,
|
||||
size,
|
||||
name,
|
||||
hash,
|
||||
},
|
||||
collection,
|
||||
},
|
||||
},
|
||||
{ where: { title: name, uid } },
|
||||
);
|
||||
microApp = await MicroAppUploadModel.findOne({
|
||||
where: { title: name, uid },
|
||||
});
|
||||
console.log('Update micro app', microApp.id);
|
||||
} else {
|
||||
microApp = await MicroAppUploadModel.create({
|
||||
title: name,
|
||||
description: collection?.readme || '',
|
||||
type: 'micro-app',
|
||||
@ -39,6 +69,8 @@ app
|
||||
share: false,
|
||||
uname: username,
|
||||
});
|
||||
}
|
||||
|
||||
ctx.body = microApp;
|
||||
})
|
||||
.addTo(app);
|
||||
@ -55,7 +87,7 @@ app
|
||||
description: 'Deploy micro app in server',
|
||||
})
|
||||
.define(async (ctx) => {
|
||||
const { id, key } = ctx.query?.data;
|
||||
const { id, key, force } = ctx.query?.data;
|
||||
// const id = '10f03411-85fc-4d37-a4d3-e32b15566a6c';
|
||||
// const key = 'envision-cli';
|
||||
// const id = '7c54a6de-9171-4093-926d-67a035042c6c';
|
||||
@ -72,7 +104,18 @@ app
|
||||
console.log('path', path);
|
||||
const check = await appPathCheck({ key });
|
||||
if (check) {
|
||||
if (!force) {
|
||||
ctx.throw(400, 'App already exists, please remove it first');
|
||||
} else {
|
||||
const app = manager.getAppShowInfo(key);
|
||||
const appType = app?.type;
|
||||
|
||||
await manager.removeApp(key);
|
||||
if (appType === 'system-app') {
|
||||
// 如果是system-app(主进程运行),就重载
|
||||
selfRestart();
|
||||
}
|
||||
}
|
||||
}
|
||||
const installAppData = await installApp({ path, key });
|
||||
await manager.add(installAppData.showAppInfo);
|
||||
|
@ -17,3 +17,18 @@ export { manager };
|
||||
// console.log('app2 context', global.context);
|
||||
// console.log('app equal', app === ManagerApp);
|
||||
loadManager();
|
||||
|
||||
// middleware: ['auth-admin']
|
||||
/*
|
||||
path: 'local-apps',
|
||||
key: 'detect',
|
||||
|
||||
path: 'local-apps',
|
||||
key: 'list',
|
||||
|
||||
path: 'local-apps',
|
||||
key: 'updateStatus',
|
||||
|
||||
path: 'local-apps',
|
||||
key: 'delete',
|
||||
*/
|
Loading…
x
Reference in New Issue
Block a user