Skip to content

Instantly share code, notes, and snippets.

@ks4na
Created March 15, 2023 06:47
Show Gist options
  • Save ks4na/08262d68f11ff2876ce01fece2001c08 to your computer and use it in GitHub Desktop.
Save ks4na/08262d68f11ff2876ce01fece2001c08 to your computer and use it in GitHub Desktop.
内网服务器安装nvm使用nodejs

内网服务器上安装 nvm 和 nodejs

安装 nvm

首先参照 nvm 官网 Manual Install 章节,在有网的机器上下载 nvm 源码到某个目录(我这里指定为 ~/nvm):

git clone https://github.com/nvm-sh/nvm.git ~/nvm

压缩该目录然后上传服务器:

cd ~
tar -zcvf nvm.tar.gz nvm

# 使用 scp 上传服务器(或者使用 finalshell 上传文件)
# 注意更换这里的 [user] 和 [ip] 为实际的
scp ~/nvm.tar.gz [user]@[ip]:~/

# 清除当前机器上的 nvm 目录和 nvm.tar.gz 压缩包
rm -rf ~/nvm.tar.gz ~/nvm

进入服务器,解压到 ~/ 目录下并重命名为 .nvm:

cd ~
tar -zxvf ./nvm.tar.gz
mv ~/nvm ~/.nvm

# 清除 nvm.tar.gz 压缩包
rm -rf ~/nvm.tar.gz

执行以下脚本安装 nvm (需要机器上已经安装了 git):

export NVM_DIR="$HOME/.nvm" && (
  cd "$NVM_DIR"
  git checkout `git describe --abbrev=0 --tags --match "v[0-9]*" $(git rev-list --tags --max-count=1)`
) && \. "$NVM_DIR/nvm.sh"

.bashrc 或者 ~/.profile 或者 ~/.zshrc 末尾追加以下代码:

export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"  # This loads nvm bash_completion

然后根据使用的 shell 运行以下命令之一:

bash: source ~/.bashrc zsh: source ~/.zshrc ksh: . ~/.profile

验证 nvm 安装成功:

nvm -v

# 0.39.3
# 输出 nvm 版本号代表安装成功

nvm 安装成功后,还需要更改 nodejs 的下载源(步骤见下方 在服务器上设置 nodejs 下载源为本机的目录),这样 nvm install <version> 时才不会指向外网的下载地址。

在服务器上设置 nodejs 下载源为本机的目录

首先在可访问外网的机器上,将 https://nodejs.org/dist/ 上的必要文件下载到指定目录(我这里指定为 ~/node-dist):

cd ~
mkdir node-dist && cd node-dist

# 下载索引文件 index.tab
wget https://nodejs.org/dist/index.tab

然后压缩 ~/node-dist 上传服务器:

cd ~
tar -zcvf node-dist.tar.gz node-dist

# 使用 scp 上传服务器(或者使用 finalshell 上传文件)
# 注意更换这里的 [user] 和 [ip] 为实际的
scp ~/node-dist.tar.gz [user]@[ip]:~/

# 清除当前机器上的 node-dist 目录和 node-dist.tar.gz 压缩包
rm -rf ~/node-dist.tar.gz ~/node-dist

进入服务器,确定一个目录为 nodejs 镜像仓库(例如 /opt/node-dist,以后需要安装新的 nodejs 版本也需要放到该目录下),解压 node-dist.tar.gz 后将其中文件放到该目录下:

cd ~
tar -zxvf ./node-dist.tar.gz

# 将 node-dist 目录内容复制到 /opt/node-dist 目录下,保证原来的 nodejs 包不会丢失
cp -r node-dist /opt

# 清除 node-dist 目录和 nvm.tar.gz 压缩包
rm -rf ~/node-dist.tar.gz ~/node-dist

设置环境变量,让 nvm 默认到指定的下载源查找 nodejs 版本进行下载:

# 指定 nvm 下载 nodejs 的下载源为服务器上的下载源目录,这里为 `/opt/node-dist`
export NVM_NODEJS_ORG_MIRROR=file:///opt/node-dist
export NVM_IOJS_ORG_MIRROR=file:///opt/iojs-dist

安装想要使用的 nodejs

如果 nvm 发现指定安装的 nodejs 版本之前没有安装过,会尝试去下载,而服务器无法访问外网,所以需要配置 nvm 下载源为本机目录且在该目录下存在 nodejs 安装包,所以需要预先在外网下载好 nodejs 安装包放到服务器上作为下载源的目录下。

首先在可访问外网的机器上,将 https://nodejs.org/dist/ 上的必要文件下载到指定目录(我这里指定为 ~/node-dist):

cd ~
mkdir node-dist && cd node-dist

# 下载需要的 nodejs 版本,例如:下载 v8.17.0  linux x64 版本的 nodejs 包
# 首先参照 https://nodejs.org/dist/ 的目录结构创建目录 v8.17.0 (根据需要的版本创建)
VERSION=<target nodejs version> # 此处改为想要安装的 nodejs 版本,如:v8.17.0
mkdir $VERSION && cd $VERSION
# 1. 下载 nodejs 压缩包(注意要下载 .tar.xz 而不是 .tar.gz 包)
wget https://nodejs.org/dist/$VERSION/node-$VERSION-linux-x64.tar.xz
# 2. 下载签名文件
wget https://nodejs.org/dist/$VERSION/SHASUMS256.txt

然后压缩 ~/node-dist 上传服务器:

cd ~
tar -zcvf node-dist.tar.gz node-dist

# 使用 scp 上传服务器(或者使用 finalshell 上传文件)
# 注意更换这里的 [user] 和 [ip] 为实际的
scp ~/node-dist.tar.gz [user]@[ip]:~/

# 清除当前机器上的 node-dist 目录和 node-dist.tar.gz 压缩包
rm -rf ~/node-dist.tar.gz ~/node-dist

进入服务器,解压 node-dist.tar.gz 后将其中文件放到服务器上的 nodejs 下载源目录下:

cd ~
tar -zxvf ./node-dist.tar.gz

# 将 node-dist 目录内容增量复制到 /opt/node-dist 目录下,保证原来已存在的 nodejs 版本不会丢失
cp -r node-dist /opt

# 清除 node-dist 目录和 nvm.tar.gz 压缩包
rm -rf ~/node-dist.tar.gz ~/node-dist

然后使用 nvm 安装该指定版本:

# 注意 version 精确指定为下载的 nodejs 版本号,例如 8.17.0
nvm install <version>

确认指定版本的 nodejs 安装成功:

node -v
# 8.17.0
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment