From 2d030c362c5caeb2424d8a839e6a4f3582d4f99f Mon Sep 17 00:00:00 2001 From: zhang1106 <849185023@qq.com> Date: Thu, 5 Feb 2026 13:17:56 +0800 Subject: [PATCH] =?UTF-8?q?feat(nginx):=20=E6=A0=B9=E6=8D=AE=E7=94=A8?= =?UTF-8?q?=E6=88=B7=E6=9D=83=E9=99=90=E5=8A=A8=E6=80=81=E8=B0=83=E6=95=B4?= =?UTF-8?q?=E5=AE=89=E8=A3=85=E5=91=BD=E4=BB=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 添加 root 用户检测功能,自动决定是否在安装命令中添加 sudo 前缀 --- install.js | 73 +++++++++++++++++++++++++++++++++++------------------- 1 file changed, 47 insertions(+), 26 deletions(-) diff --git a/install.js b/install.js index 8ba4c36..56cde0c 100644 --- a/install.js +++ b/install.js @@ -889,98 +889,119 @@ async function confirmConfiguration() { /** * 显示 Linux Nginx 安装指引 + * 根据是否 root 用户显示相应的命令 */ function showNginxInstallGuideLinux() { const distro = detectLinuxDistro(); + const root = isRootUser(); + const sudoPrefix = root ? '' : 'sudo '; console.log('\n' + colors.bright + 'Nginx 安装命令:' + colors.reset); + if (root) { + console.log(colors.gray + '(当前以 root 用户运行,无需 sudo)' + colors.reset); + } switch (distro) { case 'ubuntu': case 'debian': - console.log(` ${colors.cyan}sudo apt update${colors.reset}`); - console.log(` ${colors.cyan}sudo apt install -y nginx${colors.reset}`); - console.log(` ${colors.cyan}sudo systemctl start nginx${colors.reset}`); - console.log(` ${colors.cyan}sudo systemctl enable nginx${colors.reset}`); + console.log(` ${colors.cyan}${sudoPrefix}apt update${colors.reset}`); + console.log(` ${colors.cyan}${sudoPrefix}apt install -y nginx${colors.reset}`); + console.log(` ${colors.cyan}${sudoPrefix}systemctl start nginx${colors.reset}`); + console.log(` ${colors.cyan}${sudoPrefix}systemctl enable nginx${colors.reset}`); break; case 'centos': case 'rhel': case 'fedora': - console.log(` ${colors.cyan}sudo yum install -y epel-release${colors.reset}`); - console.log(` ${colors.cyan}sudo yum install -y nginx${colors.reset}`); - console.log(` ${colors.cyan}sudo systemctl start nginx${colors.reset}`); - console.log(` ${colors.cyan}sudo systemctl enable nginx${colors.reset}`); + console.log(` ${colors.cyan}${sudoPrefix}yum install -y epel-release${colors.reset}`); + console.log(` ${colors.cyan}${sudoPrefix}yum install -y nginx${colors.reset}`); + console.log(` ${colors.cyan}${sudoPrefix}systemctl start nginx${colors.reset}`); + console.log(` ${colors.cyan}${sudoPrefix}systemctl enable nginx${colors.reset}`); break; case 'arch': - console.log(` ${colors.cyan}sudo pacman -S --noconfirm nginx${colors.reset}`); - console.log(` ${colors.cyan}sudo systemctl start nginx${colors.reset}`); - console.log(` ${colors.cyan}sudo systemctl enable nginx${colors.reset}`); + console.log(` ${colors.cyan}${sudoPrefix}pacman -S --noconfirm nginx${colors.reset}`); + console.log(` ${colors.cyan}${sudoPrefix}systemctl start nginx${colors.reset}`); + console.log(` ${colors.cyan}${sudoPrefix}systemctl enable nginx${colors.reset}`); break; default: console.log(` ${colors.cyan}# Ubuntu/Debian${colors.reset}`); - console.log(` sudo apt update && sudo apt install -y nginx`); + console.log(` ${sudoPrefix}apt update && ${sudoPrefix}apt install -y nginx`); console.log(`\n ${colors.cyan}# CentOS/RHEL/Fedora${colors.reset}`); - console.log(` sudo yum install -y epel-release && sudo yum install -y nginx`); + console.log(` ${sudoPrefix}yum install -y epel-release && ${sudoPrefix}yum install -y nginx`); console.log(`\n ${colors.cyan}# Arch Linux${colors.reset}`); - console.log(` sudo pacman -S nginx`); + console.log(` ${sudoPrefix}pacman -S nginx`); } console.log('\n' + colors.gray + '安装完成后,请重新运行此部署脚本。' + colors.reset); } +/** + * 检测是否以 root 用户运行 + * + * @returns {boolean} 是否 root 用户 + */ +function isRootUser() { + return process.getuid && process.getuid() === 0; +} + /** * Linux 系统自动安装 Nginx * * 根据检测到的发行版,使用包管理器自动安装 Nginx + * 自动检测是否以 root 用户运行,决定是否使用 sudo * * @returns {Promise} 安装是否成功 */ async function autoInstallNginxLinux() { const distro = detectLinuxDistro(); + const root = isRootUser(); + const sudoPrefix = root ? '' : 'sudo '; log.step('自动安装 Nginx'); log.info(`检测到 Linux 发行版: ${distro}`); + if (root) { + log.info('当前以 root 用户运行,无需 sudo'); + } try { let installCommand = ''; - let startCommand = 'sudo systemctl start nginx'; - let enableCommand = 'sudo systemctl enable nginx'; + let startCommand = `${sudoPrefix}systemctl start nginx`; + let enableCommand = `${sudoPrefix}systemctl enable nginx`; switch (distro) { case 'ubuntu': case 'debian': log.info('使用 apt 安装 Nginx...'); - log.info('执行: sudo apt update'); - const updateResult = runCommand('sudo apt update'); + log.info(`执行: ${sudoPrefix}apt update`); + const updateResult = runCommand(`${sudoPrefix}apt update`); if (!updateResult.success) { log.warning('apt update 失败,尝试继续安装...'); } - log.info('执行: sudo apt install -y nginx'); - installCommand = 'sudo apt install -y nginx'; + log.info(`执行: ${sudoPrefix}apt install -y nginx`); + installCommand = `${sudoPrefix}apt install -y nginx`; break; case 'centos': case 'rhel': case 'fedora': log.info('使用 yum 安装 Nginx...'); - log.info('执行: sudo yum install -y epel-release'); - const epelResult = runCommand('sudo yum install -y epel-release'); + log.info(`执行: ${sudoPrefix}yum install -y epel-release`); + const epelResult = runCommand(`${sudoPrefix}yum install -y epel-release`); if (!epelResult.success) { log.warning('epel-release 安装失败,尝试继续...'); } - log.info('执行: sudo yum install -y nginx'); - installCommand = 'sudo yum install -y nginx'; + log.info(`执行: ${sudoPrefix}yum install -y nginx`); + installCommand = `${sudoPrefix}yum install -y nginx`; break; case 'arch': log.info('使用 pacman 安装 Nginx...'); - log.info('执行: sudo pacman -S --noconfirm nginx'); - installCommand = 'sudo pacman -S --noconfirm nginx'; + log.info(`执行: ${sudoPrefix}pacman -S --noconfirm nginx`); + installCommand = `${sudoPrefix}pacman -S --noconfirm nginx`; break; default: