fix: 修改部署部分代码
This commit is contained in:
parent
14572ce6fa
commit
c61999e2a4
5
.gitignore
vendored
5
.gitignore
vendored
@ -11,4 +11,7 @@ cache-file
|
||||
|
||||
/apps
|
||||
|
||||
logs
|
||||
logs
|
||||
|
||||
release/*
|
||||
!release/.gitkeep
|
20
app.config.json5.example
Normal file
20
app.config.json5.example
Normal file
@ -0,0 +1,20 @@
|
||||
{
|
||||
port: 4005, // 端口
|
||||
tokenSecret: '<TOKEN_SECRET>',
|
||||
appPath: 'apps',
|
||||
appName: 'codeflow',
|
||||
postgres: {
|
||||
username: 'root',
|
||||
host: 'localhost',
|
||||
database: 'postgres',
|
||||
password: '*****',
|
||||
port: 5432,
|
||||
},
|
||||
minio: {
|
||||
endPoint: 'minio.xiongxiao.me',
|
||||
bucketName: 'resources',
|
||||
useSSL: false,
|
||||
accessKey: 'username',
|
||||
secretKey: 'password',
|
||||
},
|
||||
}
|
@ -8,18 +8,19 @@
|
||||
"scripts": {
|
||||
"watch": "rollup -c rollup.config.mjs -w",
|
||||
"dev": "cross-env NODE_ENV=development nodemon --delay 2.5 -e js,cjs,mjs --exec node dist/app.mjs",
|
||||
"dev:pm2": "pm2-dev start ecosystem.config.cjs",
|
||||
"test": "tsx test/**/*.ts",
|
||||
"dev:watch": "cross-env NODE_ENV=development concurrently -n \"Watch,Dev\" -c \"green,blue\" \"npm run watch\" \"sleep 1 && npm run dev\" ",
|
||||
"build": "rimraf dist && rollup -c rollup.config.mjs",
|
||||
"deploy": "rsync -avz --delete ./dist/ --exclude='app.config.json5' light:~/apps/codecenter/dist",
|
||||
"demo": "rsync -avz --delete ./dist/ on:~/docker/kevisual/dist",
|
||||
"clean": "rm -rf dist",
|
||||
"reload": "ssh light pm2 restart codecenter",
|
||||
"pub": "npm run build && npm run deploy && npm run reload",
|
||||
"deploy:nova": "rsync -avz --delete ./dist/ --exclude='app.config.json5' nova:~/apps/codecenter/dist",
|
||||
"apps:build": "rollup -c rollup.apps.config.mjs",
|
||||
"apps:watch": "rollup -c rollup.apps.config.mjs -w",
|
||||
"start": "pm2 start dist/app.mjs --name codecenter"
|
||||
"start": "pm2 start dist/app.mjs --name codecenter",
|
||||
"release": "node ./script/release/index.mjs"
|
||||
},
|
||||
"keywords": [],
|
||||
"types": "types/index.d.ts",
|
||||
@ -32,6 +33,7 @@
|
||||
"dependencies": {
|
||||
"@kevisual/auth": "1.0.5",
|
||||
"@kevisual/local-app-manager": "0.1.6",
|
||||
"@kevisual/use-config": "^1.0.7",
|
||||
"@kevisual/router": "^0.0.6-alpha-5",
|
||||
"@types/semver": "^7.5.8",
|
||||
"archiver": "^7.0.1",
|
||||
@ -55,7 +57,6 @@
|
||||
"zod": "^3.24.2"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@kevisual/use-config": "^1.0.7",
|
||||
"@rollup/plugin-alias": "^5.1.1",
|
||||
"@rollup/plugin-commonjs": "^28.0.2",
|
||||
"@rollup/plugin-json": "^6.1.0",
|
||||
|
0
release/.gitkeep
Normal file
0
release/.gitkeep
Normal file
114
script/release/index.mjs
Normal file
114
script/release/index.mjs
Normal file
@ -0,0 +1,114 @@
|
||||
import fs from 'fs';
|
||||
import path from 'path';
|
||||
import archiver from 'archiver';
|
||||
import { exec } from 'child_process';
|
||||
import { nanoid } from 'nanoid';
|
||||
|
||||
const cwd = process.cwd();
|
||||
const pkgPath = path.join(cwd, 'package.json');
|
||||
|
||||
export const checkFileExistsSync = (filePath) => {
|
||||
try {
|
||||
// 使用 F_OK 检查文件或目录是否存在
|
||||
fs.accessSync(filePath, fs.constants.F_OK);
|
||||
return true;
|
||||
} catch (err) {
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf8'));
|
||||
|
||||
const releasePath = path.join(cwd, 'release');
|
||||
|
||||
const distPath = path.join(cwd, 'dist');
|
||||
|
||||
const zip = archiver('zip', {
|
||||
zlib: { level: 9 },
|
||||
});
|
||||
const zipName = `code-center-${pkg.version}.zip`;
|
||||
const zipCache = path.join(releasePath, `code-center-${pkg.version}.zip`);
|
||||
|
||||
const getZip = async () => {
|
||||
return new Promise((resolve, reject) => {
|
||||
const output = fs.createWriteStream(zipCache);
|
||||
const startTime = (new Date().getTime() / 1000).toFixed(0);
|
||||
// 监听事件
|
||||
output.on('close', async () => {
|
||||
const bytes = zip.pointer();
|
||||
const size = bytes < 1024 ? `${bytes} bytes` : `${(bytes / 1024).toFixed(2)} KB`;
|
||||
console.log(`Zip file has been created successfully. Total size: ${size} bytes.`);
|
||||
let time = (new Date().getTime() / 1000).toFixed(0);
|
||||
console.log('time', time - startTime);
|
||||
resolve();
|
||||
});
|
||||
|
||||
output.on('end', () => {
|
||||
console.log('Data has been drained.'); // 数据已被耗尽
|
||||
throw new CustomError('Data has been drained.');
|
||||
});
|
||||
|
||||
zip.on('warning', (err) => {
|
||||
if (err.code === 'ENOENT') {
|
||||
console.warn('File not found:', err);
|
||||
} else {
|
||||
throw err;
|
||||
}
|
||||
});
|
||||
|
||||
zip.on('error', (err) => {
|
||||
throw err;
|
||||
});
|
||||
|
||||
// 通过管道将 zip 数据流输出到指定文件
|
||||
zip.pipe(output);
|
||||
|
||||
// 添加 sh 字符串作为文件到 zip 中
|
||||
const sh = `#!/bin/bash
|
||||
npm i -g pnpm
|
||||
pnpm install --prod
|
||||
`;
|
||||
zip.append(sh, { name: 'start.sh' });
|
||||
// 把dist目录下的文件添加到zip中
|
||||
zip.directory(distPath, 'dist');
|
||||
// 把README.md添加到zip中
|
||||
zip.file(path.join(cwd, 'README.md'), { name: 'README.md' });
|
||||
// 把package.json添加到zip中
|
||||
zip.file(pkgPath, { name: 'package.json' });
|
||||
const ecosystemContent = `module.exports = {
|
||||
apps: [
|
||||
{
|
||||
name: 'codecenter', // 应用名称
|
||||
script: './dist/app.mjs', // 入口文件
|
||||
// cwd: '.', // 设置当前工作目录
|
||||
output: './logs/codecenter.log',
|
||||
error: './logs/codecenter.log',
|
||||
log_date_format: 'YYYY-MM-DD HH:mm:ss',
|
||||
// watch: true, // 自动监控文件变化
|
||||
watch: ['dist'], // 监控的文件夹
|
||||
ignore_watch: ['node_modules', 'logs'], // 忽略的文件夹
|
||||
}
|
||||
]
|
||||
}
|
||||
`;
|
||||
zip.append(ecosystemContent, { name: 'ecosystem.config.cjs' });
|
||||
const json5Content = fs.readFileSync(path.join(cwd, 'app.config.json5.example'), 'utf8');
|
||||
// tokenSecret 是一个随机字符串,用于生成 token
|
||||
const tokenSecret = 'XX' + nanoid(39);
|
||||
json5Content.replace('<TOKEN_SECRET>', tokenSecret);
|
||||
// tokenSecret
|
||||
// 把app.config.json5.example添加到zip中
|
||||
// zip.file(path.join(cwd, 'app.config.json5.example'), { name: 'app.config.json5.example' });
|
||||
zip.append(json5Content, { name: 'app.config.json5.example' });
|
||||
|
||||
// 结束归档(必须调用,否则 zip 文件无法完成)
|
||||
zip.finalize();
|
||||
});
|
||||
};
|
||||
|
||||
getZip().then(() => {
|
||||
console.log('zip success');
|
||||
console.log(`envision switchOrg system && envision deploy ./release/${zipName} -v 1.0.0 -k code-center -y y -u`);
|
||||
|
||||
console.log(`download zip: https://kevisual.xiongxiao.me/system/code-center/${zipName}`);
|
||||
});
|
@ -8,7 +8,10 @@ import { loadApps } from './load-apps.ts';
|
||||
// export { aiApp };
|
||||
export { app };
|
||||
loadApps(app);
|
||||
|
||||
// if (import.meta.url === `file://${process.argv[1]}`) {
|
||||
app.listen(config.port, () => {
|
||||
console.log(`server is running at http://localhost:${config.port}`);
|
||||
});
|
||||
app.server.on(uploadMiddleware);
|
||||
// }
|
||||
|
@ -215,7 +215,7 @@ User.init(
|
||||
);
|
||||
User.sync({ alter: true, logging: false })
|
||||
.then((res) => {
|
||||
// initializeUser();
|
||||
initializeUser();
|
||||
})
|
||||
.catch((err) => {
|
||||
console.error('Sync User error', err);
|
||||
@ -238,6 +238,7 @@ export const initializeUser = async () => {
|
||||
const org = await User.createOrg('admin', root.id, '管理员');
|
||||
console.info(' new Users name', root.username, org.username);
|
||||
console.info('new Users id', root.id, org.id);
|
||||
CreateDemoUser();
|
||||
}
|
||||
};
|
||||
export const CreateDemoUser = async () => {
|
||||
@ -245,7 +246,7 @@ export const CreateDemoUser = async () => {
|
||||
logging: false,
|
||||
});
|
||||
console.info('[User count]', w.count);
|
||||
const username = 'dmeo';
|
||||
const username = 'demo';
|
||||
const u = await User.findOne({ where: { username }, logging: false });
|
||||
if (!u) {
|
||||
const user = await User.createUser(username, '', 'demo');
|
||||
|
Loading…
x
Reference in New Issue
Block a user