feat(port): 实现智能端口管理系统

- 新增端口管理器类,支持端口分配、验证和缓存管理
- 实现环境优先级策略,根据环境自动选择合适的端口范围
- 集成租户识别系统,为每个租户分配独立端口
- 添加端口分配结果统计和历史记录查询功能
- 优化端口缓存机制,自动清理过期绑定
This commit is contained in:
2025-09-03 18:52:39 +08:00
parent 8c75b5d349
commit 7052ccce61
33 changed files with 6704 additions and 38 deletions

View File

@@ -9,8 +9,47 @@ import { resolve } from 'path';
import { visualizer } from 'rollup-plugin-visualizer';
import { splitVendorChunkPlugin } from 'vite';
// 简化的智能端口管理(避免构建时模块解析问题)
function getSmartPort() {
try {
// 从环境变量获取基础配置
const basePort = parseInt(process.env.VITE_BASE_PORT || '3000');
const tenantId = process.env.VITE_TENANT_ID || '10258';
const environment = process.env.NODE_ENV || 'development';
// 简化的端口计算
let recommendedPort = basePort;
if (environment === 'development') {
// 开发环境:基础端口 + 租户偏移
const tenantOffset = (parseInt(tenantId) % 1000) * 10;
recommendedPort = basePort + tenantOffset;
} else if (environment === 'test') {
recommendedPort = basePort + 1000;
} else if (environment === 'production') {
recommendedPort = 8080; // 生产环境使用标准端口
}
console.log('🎯 智能端口计算:', {
environment,
tenantId,
basePort,
recommendedPort
});
return recommendedPort;
} catch (error) {
console.warn('⚠️ 端口计算失败,使用默认端口 3000:', error);
return 3000;
}
}
export default defineConfig(({ command }) => {
const isBuild = command === 'build';
// 智能端口配置(仅在开发模式下)
const smartPort = !isBuild ? getSmartPort() : undefined;
return {
// 在这里增加 base 写子路径
base: '/',
@@ -20,11 +59,42 @@ export default defineConfig(({ command }) => {
'vue-i18n': 'vue-i18n/dist/vue-i18n.cjs.js'
}
},
// server: {
// proxy: {
// '/api': 'https://server.websoft.top'
// }
// },
// 智能服务器配置
server: {
port: smartPort || 3000,
host: '0.0.0.0', // 允许外部访问
open: true, // 自动打开浏览器
cors: true, // 启用 CORS
// 代理配置
proxy: {
'/api': {
target: process.env.VITE_API_URL || 'https://server.websoft.top',
changeOrigin: true,
secure: false,
configure: (proxy, _options) => {
proxy.on('error', (err, _req, _res) => {
console.log('proxy error', err);
});
proxy.on('proxyReq', (proxyReq, req, _res) => {
console.log('Sending Request to the Target:', req.method, req.url);
});
proxy.on('proxyRes', (proxyRes, req, _res) => {
console.log('Received Response from the Target:', proxyRes.statusCode, req.url);
});
},
}
},
// 端口冲突时的处理
strictPort: false, // 允许自动选择其他端口
},
// 预览服务器配置(用于生产构建预览)
preview: {
port: smartPort ? smartPort + 1000 : 4173,
host: '0.0.0.0',
open: true,
cors: true,
strictPort: false,
},
plugins: [
vue({
script: {