Files
huishou/reupload-h5.js
2026-07-27 14:07:26 +08:00

108 lines
2.9 KiB
JavaScript

const { Client } = require('ssh2');
const fs = require('fs');
const path = require('path');
const config = {
host: 'hs.yifenbao.cn',
port: 22,
username: 'root',
password: 'Torch1112'
};
const conn = new Client();
const h5Dir = './dist/build/h5';
function collectFiles(dir, prefix = '') {
const files = [];
const items = fs.readdirSync(dir);
for (const item of items) {
const fullPath = path.join(dir, item);
const stats = fs.statSync(fullPath);
const relPath = prefix ? path.join(prefix, item) : item;
if (stats.isDirectory()) {
files.push(...collectFiles(fullPath, relPath));
} else {
files.push({ local: fullPath, remote: `/www/huishou/dist/build/h5/${relPath}` });
}
}
return files;
}
conn.on('ready', async () => {
console.log('SSH连接成功');
try {
const files = collectFiles(h5Dir);
console.log(`\n=== 准备上传 ${files.length} 个文件 ===`);
conn.sftp(async (err, sftp) => {
if (err) {
console.error('SFTP错误:', err.message);
conn.end();
return;
}
for (const file of files) {
await new Promise((resolve) => {
const dir = path.dirname(file.remote);
sftp.mkdir(dir, { recursive: true }, () => {
const readStream = fs.createReadStream(file.local);
const writeStream = sftp.createWriteStream(file.remote);
writeStream.on('close', () => {
console.log(`${file.local}`);
resolve();
});
writeStream.on('error', () => {
console.log(`${file.local}`);
resolve();
});
readStream.pipe(writeStream);
});
});
}
console.log('\n=== 文件上传完成 ===');
await new Promise((resolve) => {
conn.exec('docker cp /www/huishou/dist/build/h5/. huishou:/usr/share/nginx/html/h5/', (err, stream) => {
if (err) {
console.error('docker cp错误:', err.message);
resolve();
return;
}
stream.on('close', () => {
console.log('✓ 文件已复制到容器');
resolve();
});
});
});
await new Promise((resolve) => {
conn.exec('curl -s http://localhost:4001/h5/ | head -20', (err, stream) => {
if (err) {
console.error('测试访问错误:', err.message);
resolve();
return;
}
stream.stdout.on('data', (data) => process.stdout.write(data));
stream.on('close', () => {
console.log('\n=== H5访问测试完成 ===');
resolve();
});
});
});
conn.end();
});
} catch (error) {
console.error('部署失败:', error.message);
conn.end();
}
});
conn.on('error', (err) => {
console.error('SSH连接错误:', err.message);
});
conn.connect(config);