feat(deploy): add Docker full-stack deployment and server pack scripts
Enable one-click production deploy via docker-compose.prod.yml, with deployment docs and zip packaging for Baota upload. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
63
pack.mjs
Normal file
63
pack.mjs
Normal file
@@ -0,0 +1,63 @@
|
||||
#!/usr/bin/env node
|
||||
/**
|
||||
* 生成部署用 zip,排除 node_modules、构建产物、.git、本地 .env 等。
|
||||
* 用法: node pack.mjs
|
||||
* 输出: release/thebet365-deploy-YYYYMMDD-HHmmss.zip
|
||||
*/
|
||||
import { execSync } from 'node:child_process';
|
||||
import { mkdirSync, statSync } from 'node:fs';
|
||||
import { basename, join } from 'node:path';
|
||||
|
||||
const root = process.cwd();
|
||||
const projectName = basename(root);
|
||||
const parent = join(root, '..');
|
||||
|
||||
const stamp = new Date()
|
||||
.toISOString()
|
||||
.replace(/[-:]/g, '')
|
||||
.slice(0, 15)
|
||||
.replace('T', '-');
|
||||
|
||||
const outDir = join(root, 'release');
|
||||
const outFile = join(outDir, `thebet365-deploy-${stamp}.zip`);
|
||||
|
||||
/** 相对项目根目录的路径 */
|
||||
const excludePaths = [
|
||||
'node_modules',
|
||||
'.git',
|
||||
'.env',
|
||||
'.env.local',
|
||||
'.env.docker',
|
||||
'apps/api/.env',
|
||||
'apps/api/dist',
|
||||
'apps/player/dist',
|
||||
'apps/admin/dist',
|
||||
'release',
|
||||
];
|
||||
|
||||
mkdirSync(outDir, { recursive: true });
|
||||
|
||||
const excludeArgs = excludePaths
|
||||
.map((p) => `--exclude=${projectName}/${p}`)
|
||||
.join(' ');
|
||||
|
||||
const cmd = `tar -a -c -f "${outFile}" ${excludeArgs} -C "${parent}" "${projectName}"`;
|
||||
|
||||
console.log('Packing deployment archive...');
|
||||
console.log('Excluding:');
|
||||
for (const p of excludePaths) console.log(` - ${p}/`);
|
||||
console.log('');
|
||||
|
||||
try {
|
||||
execSync(cmd, { stdio: 'inherit' });
|
||||
} catch {
|
||||
console.error('\nPack failed. Ensure tar is available (Windows 10+ / Linux / macOS).');
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
const sizeMb = (statSync(outFile).size / (1024 * 1024)).toFixed(2);
|
||||
console.log(`\nDone: ${outFile}`);
|
||||
console.log(`Size: ${sizeMb} MB`);
|
||||
console.log('\nUpload to server, extract under /www/wwwroot/thebet365, then:');
|
||||
console.log(' cp .env.docker.example .env.docker');
|
||||
console.log(' docker compose -f docker-compose.prod.yml --env-file .env.docker up -d --build');
|
||||
Reference in New Issue
Block a user