From df82a3c01c0159f4e39f92e9cc71149550e0e7d7 Mon Sep 17 00:00:00 2001 From: zhang1106 <849185023@qq.com> Date: Sat, 9 May 2026 10:17:12 +0800 Subject: [PATCH] =?UTF-8?q?refactor(nginx):=20=E4=BC=98=E5=8C=96=20Nginx?= =?UTF-8?q?=20=E8=87=AA=E5=8A=A8=E9=85=8D=E7=BD=AE=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 将 Nginx 配置步骤移至服务启动后执行 - 增加 Nginx 安装状态检测和自动安装功能 - 改进错误处理流程和用户引导提示 - 使用 systemctl restart 替代直接重载 --- install.js | 62 ++++++++++++++++++++++++++++++++++++------------------ 1 file changed, 41 insertions(+), 21 deletions(-) diff --git a/install.js b/install.js index cd1aa90..18368ba 100644 --- a/install.js +++ b/install.js @@ -1683,11 +1683,6 @@ 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 配置路径示例:'); @@ -1702,14 +1697,36 @@ server { * 自动复制配置文件到系统目录并启用 */ function autoConfigureNginx() { - log.step('自动配置 Nginx'); + log.step('配置 Nginx'); + + if (!isNginxInstalled()) { + log.warning('Nginx 未安装,尝试自动安装...'); + if (process.platform === 'linux') { + const installed = autoInstallNginxLinux(); + if (!installed) { + log.error('Nginx 自动安装失败'); + log.info('请手动安装 Nginx 后执行:'); + console.log(` ${colors.cyan}sudo cp deploy/nginx-idc.conf /etc/nginx/sites-available/idc${colors.reset}`); + console.log(` ${colors.cyan}sudo ln -sf /etc/nginx/sites-available/idc /etc/nginx/sites-enabled/idc${colors.reset}`); + console.log(` ${colors.cyan}sudo nginx -t && sudo systemctl restart nginx${colors.reset}`); + return; + } + } else { + log.error('当前平台不支持自动安装 Nginx,请手动安装'); + return; + } + } const root = isRootUser(); const sudoPrefix = root ? '' : 'sudo '; const configSource = path.join(__dirname, 'deploy', 'nginx-idc.conf'); + if (!fs.existsSync(configSource)) { + log.error('Nginx 配置文件不存在,请先运行安装脚本'); + return; + } + try { - // 检测 Nginx 配置目录结构 let configDir = ''; let useSitesAvailable = false; @@ -1724,7 +1741,6 @@ function autoConfigureNginx() { return; } - // 复制配置文件 const configDest = path.join(configDir, 'idc'); log.info(`复制配置到 ${configDest}...`); @@ -1734,37 +1750,36 @@ function autoConfigureNginx() { return; } - // 如果使用 sites-available,创建软链接 if (useSitesAvailable) { log.info('创建站点软链接...'); - const linkResult = runCommand(`${sudoPrefix}ln -sf "${configDest}" /etc/nginx/sites-enabled/idc`); - if (!linkResult.success) { - log.warning('软链接创建失败'); - } + runCommand(`${sudoPrefix}ln -sf "${configDest}" /etc/nginx/sites-enabled/idc`); - // 删除默认配置(如果存在) 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 配置测试失败'); + log.info('请检查配置文件: ' + configDest); return; } - // 重载 Nginx - log.info('重载 Nginx 服务...'); - const reloadResult = runCommand(`${sudoPrefix}nginx -s reload`); - if (reloadResult.success) { + log.info('重启 Nginx 服务...'); + const restartResult = runCommand(`${sudoPrefix}systemctl restart nginx`); + if (restartResult.success) { log.success('Nginx 配置完成并已生效'); } else { - log.warning('Nginx 重载失败,尝试启动服务...'); - runCommand(`${sudoPrefix}systemctl start nginx`, { silent: true }); + log.warning('systemctl 重启失败,尝试直接重载...'); + const reloadResult = runCommand(`${sudoPrefix}nginx -s reload`); + if (reloadResult.success) { + log.success('Nginx 配置完成并已生效'); + } else { + log.warning('Nginx 重载失败,请手动重启: sudo systemctl restart nginx'); + } } } catch (error) { @@ -2026,6 +2041,11 @@ ${colors.reset}`); } await startServices(); + + if (!isWindows && config.frontendDeploy === 'nginx') { + autoConfigureNginx(); + } + await healthCheck(); printSummary();