From 05a635dbedb0d9b85a5a19c1340f35f74fbc7cfb Mon Sep 17 00:00:00 2001 From: zhang1106 <849185023@qq.com> Date: Thu, 5 Feb 2026 13:24:23 +0800 Subject: [PATCH] =?UTF-8?q?feat(nginx):=20=E6=B7=BB=E5=8A=A0=20Linux=20?= =?UTF-8?q?=E7=B3=BB=E7=BB=9F=E4=B8=8B=E8=87=AA=E5=8A=A8=E9=85=8D=E7=BD=AE?= =?UTF-8?q?=20Nginx=20=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 新增 autoConfigureNginx 函数实现自动检测 Nginx 配置目录结构、复制配置文件、创建软链接并重载服务。该功能会在非 Windows 系统且配置为 nginx 部署时自动执行,简化 Linux 环境下的部署流程。 --- install.js | 88 ++++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 82 insertions(+), 6 deletions(-) diff --git a/install.js b/install.js index 56cde0c..dd16906 100644 --- a/install.js +++ b/install.js @@ -1302,17 +1302,93 @@ server { fs.writeFileSync(path.join(deployDir, 'nginx-idc.conf'), nginxConfig); log.success('Nginx 配置文件已生成 (deploy/nginx-idc.conf)'); + // 自动配置 Nginx(Linux 系统) + if (!isWindows && config.frontendDeploy === 'nginx') { + autoConfigureNginx(); + } + // 输出平台特定的配置指引 if (isWindows) { log.info('Windows Nginx 配置路径示例:'); console.log(` 将配置文件复制到: ${colors.cyan}C:/nginx/conf/conf.d/idc.conf${colors.reset}`); console.log(` 或修改主配置 include: ${colors.cyan}C:/nginx/conf/nginx.conf${colors.reset}`); - } else { - console.log(`\n${colors.yellow}Nginx 配置启用命令:${colors.reset}`); - console.log(` sudo cp deploy/nginx-idc.conf /etc/nginx/sites-available/idc`); - console.log(` sudo ln -s /etc/nginx/sites-available/idc /etc/nginx/sites-enabled/`); - console.log(` sudo nginx -t`); - console.log(` sudo systemctl restart nginx`); + } +} + +/** + * 自动配置 Nginx(Linux) + * + * 自动复制配置文件到系统目录并启用 + */ +function autoConfigureNginx() { + log.step('自动配置 Nginx'); + + const root = isRootUser(); + const sudoPrefix = root ? '' : 'sudo '; + const configSource = path.join(__dirname, 'deploy', 'nginx-idc.conf'); + + try { + // 检测 Nginx 配置目录结构 + let configDir = ''; + let useSitesAvailable = false; + + if (fs.existsSync('/etc/nginx/sites-available')) { + configDir = '/etc/nginx/sites-available'; + useSitesAvailable = true; + } else if (fs.existsSync('/etc/nginx/conf.d')) { + configDir = '/etc/nginx/conf.d'; + useSitesAvailable = false; + } else { + log.warning('未找到标准 Nginx 配置目录,请手动配置'); + return; + } + + // 复制配置文件 + const configDest = path.join(configDir, 'idc'); + log.info(`复制配置到 ${configDest}...`); + + const copyResult = runCommand(`${sudoPrefix}cp "${configSource}" "${configDest}"`); + if (!copyResult.success) { + log.error('配置文件复制失败'); + return; + } + + // 如果使用 sites-available,创建软链接 + if (useSitesAvailable) { + log.info('创建站点软链接...'); + const linkResult = runCommand(`${sudoPrefix}ln -sf "${configDest}" /etc/nginx/sites-enabled/idc`); + if (!linkResult.success) { + log.warning('软链接创建失败'); + } + + // 删除默认配置(如果存在) + if (fs.existsSync('/etc/nginx/sites-enabled/default')) { + log.info('删除默认站点配置...'); + runCommand(`${sudoPrefix}rm -f /etc/nginx/sites-enabled/default`, { silent: true }); + } + } + + // 测试配置 + log.info('测试 Nginx 配置...'); + const testResult = runCommand(`${sudoPrefix}nginx -t`); + if (!testResult.success) { + log.error('Nginx 配置测试失败'); + return; + } + + // 重载 Nginx + log.info('重载 Nginx 服务...'); + const reloadResult = runCommand(`${sudoPrefix}nginx -s reload`); + if (reloadResult.success) { + log.success('Nginx 配置完成并已生效'); + } else { + log.warning('Nginx 重载失败,尝试启动服务...'); + runCommand(`${sudoPrefix}systemctl start nginx`, { silent: true }); + } + + } catch (error) { + log.error(`自动配置失败: ${error.message}`); + log.info('请手动配置 Nginx'); } }