first commit

This commit is contained in:
2026-05-10 10:56:52 +08:00
commit 9dec38db60
35 changed files with 8206 additions and 0 deletions
+133
View File
@@ -0,0 +1,133 @@
#!/bin/bash
# ==============================================================
# NVM 部署脚本 - 一键安装 nvm + Node.js LTS 稳定版 + 换源加速
# ==============================================================
# 适用系统: Ubuntu 20.04+
# 说明: 使用国内镜像源加速,避免 GitHub raw 下载缓慢
# 安装 Node.js LTS 版(比 latest 更小更快)
#
# 注意:脚本可能通过 sudo 以 root 身份执行,
# 因此需要检测原始用户并切换到该用户安装 nvm,
# 避免 nvm 装到 /root 下导致原用户看不到。
# =============================================================
set -e
echo "========================================"
echo " NVM 部署脚本 - 开始安装..."
echo "========================================"
# ---------- 检测原始用户 ----------
# 如果通过 sudo 运行,SUDO_USER 会保留原用户名
if [ -n "$SUDO_USER" ]; then
REAL_USER="$SUDO_USER"
REAL_HOME=$(getent passwd "$REAL_USER" | cut -d: -f6)
if [ -z "$REAL_HOME" ]; then
REAL_HOME="/home/$REAL_USER"
fi
else
REAL_USER=$(whoami)
REAL_HOME="$HOME"
fi
echo " 检测到实际用户: $REAL_USER"
echo " 用户目录: $REAL_HOME"
echo ""
NVM_VERSION="v0.39.7"
NODE_LTS_VERSION="--lts" # 安装 LTS 最新版(比 install node 的 latest 版更小)
# ---------- 辅助函数:以原始用户身份执行命令 ----------
run_as_user() {
if [ "$(whoami)" != "$REAL_USER" ]; then
sudo -u "$REAL_USER" bash -c "$*"
else
bash -c "$*"
fi
}
# 1. 安装 nvm(使用 gitee 镜像加速)
echo "[1/4] 正在安装 nvm ${NVM_VERSION}..."
# 优先用 gitee 镜像(国内快),失败则回滚到 GitHub 官方
NVM_INSTALL_URL="https://gitee.com/mirrors/nvm/raw/${NVM_VERSION}/install.sh"
echo " 下载源: ${NVM_INSTALL_URL}"
# 以原始用户身份下载并执行安装脚本
rm -f /tmp/install_nvm.sh
if timeout 30 curl -fsSL "${NVM_INSTALL_URL}" -o /tmp/install_nvm.sh 2>/dev/null; then
echo " ✅ 从 Gitee 镜像下载成功"
else
echo " ⚠ Gitee 镜像下载失败,切换到 GitHub 源..."
NVM_INSTALL_URL="https://raw.githubusercontent.com/nvm-sh/nvm/${NVM_VERSION}/install.sh"
curl -fsSL "${NVM_INSTALL_URL}" -o /tmp/install_nvm.sh
fi
# 以原始用户身份执行安装(不要用 sudo)
chown "$REAL_USER":"$REAL_USER" /tmp/install_nvm.sh 2>/dev/null || true
sudo -u "$REAL_USER" bash /tmp/install_nvm.sh
rm -f /tmp/install_nvm.sh
# 2. 加载 nvm 到当前 shell(以原始用户身份)
echo "[2/4] 正在加载 nvm 环境变量..."
export NVM_DIR="$REAL_HOME/.nvm"
if [ -s "$NVM_DIR/nvm.sh" ]; then
\. "$NVM_DIR/nvm.sh"
echo " nvm 已加载"
else
echo " ⚠ nvm.sh 未找到,可能安装过程中出现问题"
ls -la "$NVM_DIR" 2>/dev/null || echo " .nvm 目录不存在"
fi
# 3. 配置淘宝镜像源(加速 Node.js 下载)
echo "[3/4] 正在配置淘宝镜像源..."
echo 'export NVM_NODEJS_ORG_MIRROR=https://npmmirror.com/mirrors/node' >> "$REAL_HOME/.bashrc"
export NVM_NODEJS_ORG_MIRROR=https://npmmirror.com/mirrors/node
echo " 镜像源已配置: NVM_NODEJS_ORG_MIRROR=https://npmmirror.com/mirrors/node"
# 4. 安装 Node.js LTS 版
echo "[4/4] 正在安装 Node.js LTS 版本(稳定版)..."
echo " 下载源: ${NVM_NODEJS_ORG_MIRROR}"
# nvm install 必须以原始用户身份执行,否则 $NVM_DIR 不匹配
sudo -u "$REAL_USER" bash -c "
export NVM_DIR='$REAL_HOME/.nvm'
[ -s \"\$NVM_DIR/nvm.sh\" ] && \. \"\$NVM_DIR/nvm.sh\"
export NVM_NODEJS_ORG_MIRROR='$NVM_NODEJS_ORG_MIRROR'
nvm install $NODE_LTS_VERSION
"
# 验证安装结果
echo ""
echo "========================================"
echo " 安装完成!验证信息如下:"
echo "========================================"
# 以原始用户身份验证
sudo -u "$REAL_USER" bash -c "
export NVM_DIR='$REAL_HOME/.nvm'
[ -s \"\$NVM_DIR/nvm.sh\" ] && \. \"\$NVM_DIR/nvm.sh\"
if command -v nvm &> /dev/null; then
echo ' nvm 版本 : \$(nvm --version)'
else
echo ' nvm 版本 : n/a'
fi
if command -v node &> /dev/null; then
echo ' node 版本: \$(node -v)'
else
echo ' node 版本: n/a'
fi
if command -v npm &> /dev/null; then
echo ' npm 版本 : \$(npm -v)'
else
echo ' npm 版本 : n/a'
fi
echo ''
echo ' 当前默认使用的 Node 版本:'
nvm ls 2>/dev/null || echo ' nvm ls 不可用'
"
echo ""
echo "========================================"
echo " 提示:重新登录终端或执行:"
echo " source ~/.bashrc"
echo " 然后: nvm --version"
echo "========================================"