在服务器上配置Node.js是一个相对简单且直接的过程,但确保正确设置和优化环境对于应用程序的性能和安全性至关重要,本文将详细介绍如何在服务器上安装和配置Node.js,包括必要的软件依赖、环境变量设置以及一些常见的最佳实践。
准备工作

在开始之前,请确保你具备以下条件:
一台服务器(可以是物理服务器、虚拟机或云实例)。
服务器的SSH访问权限。
一个非root用户账号,用于执行安装操作(出于安全考虑,不建议使用root用户)。
更新系统包管理器
在安装任何新软件之前,建议先更新系统的包管理器和现有软件包,以确保你获得的是最新版本的软件,以下是针对不同Linux发行版的更新命令:
Ubuntu/Debian:
sudo apt update && sudo apt upgrade -y
CentOS/RHEL:

sudo yum update -y
Fedora:
sudo dnf upgrade -y
安装Node.js
有几种方法可以在服务器上安装Node.js,包括使用包管理器、NVM(Node Version Manager)或直接从源代码编译,这里我们推荐使用NVM,因为它允许你轻松管理和切换不同版本的Node.js。
使用NVM安装Node.js
1、安装NVM:
下载并安装NVM,你可以使用cURL或wget来下载NVM的安装脚本。
curl -ohttps://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash
或者
wget -qOhttps://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash
2、加载NVM:

安装完成后,重新加载shell配置文件以使NVM生效。
source ~/.bashrc
或者根据你的shell可能是:
source ~/.zshrc
3、检查NVM是否安装成功:
运行以下命令查看NVM版本:
nvm --version
4、安装Node.js:
使用NVM安装特定版本的Node.js,安装最新的LTS版本:
nvm install --lts
或者安装特定版本,如v14.17.0:
nvm install 14.17.0
5、设置默认Node.js版本:
如果你希望将某个版本设置为默认版本,可以使用以下命令:
nvm alias default 14.17.0
6、验证安装:
验证Node.js和npm是否安装成功:
node -v npm -v
配置环境变量
为了确保Node.js和npm在你的shell会话中可用,你需要将它们的路径添加到你的环境变量中,NVM会自动处理这些,但在某些情况下,你可能需要手动添加。
编辑你的shell配置文件(如~/.bashrc
,~/.zshrc
等),并添加以下行:
export NVM_DIR="$([ -z "${XDG_CONFIG_HOME-}" ] && printf %s "${HOME}/.nvm" || printf %s "${XDG_CONFIG_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
然后重新加载配置文件:
source ~/.bashrc
设置Node.js应用目录
选择一个合适的目录来存放你的Node.js应用程序,你可以创建一个名为myapp
的目录:
mkdir ~/myapp cd ~/myapp
初始化Node.js项目
在项目目录下,使用npm init
命令初始化一个新的Node.js项目,这将生成一个package.json
文件,包含项目的元数据和依赖项。
npm init -y
安装项目依赖
根据项目需求,安装所需的npm包,如果你的项目需要Express框架,可以运行:
npm install express --save
创建一个简单的服务器
在项目根目录下创建一个名为server.js
的文件,并添加以下内容:
const express = require('express');
const app = express();
const port = 3000;
app.get('/', (req, res) => {
res.send('Hello World!');
});
app.listen(port, () => {
console.log(App listening at http://localhost:${port}
);
});
启动服务器
运行以下命令启动服务器:
node server.js
你应该能够在浏览器中访问http://your_server_ip:3000
并看到“Hello World!”消息。
使用PM2进行进程管理
为了确保你的Node.js应用在服务器重启后自动启动,并且能够处理多个并发请求,建议使用PM2(Process Manager 2)进行进程管理。
1、全局安装PM2:
sudo npm install -g pm2
2、使用PM2启动应用:
pm2 start server.js --name myapp
3、设置PM2开机自启:
pm2 startup pm2 save
4、查看PM2管理的进程:
pm2 list
配置防火墙(可选)
如果你的服务器启用了防火墙,确保开放Node.js应用使用的端口(默认为3000),以UFW为例:
sudo ufw allow 3000/tcp
日志和监控(可选)
为了更好地监控和管理你的Node.js应用,可以考虑集成日志和监控工具,如Morgan(日志)、New Relic或Prometheus。
部署和持续集成(可选)
对于生产环境,建议使用CI/CD工具(如Jenkins、GitLab CI、GitHub Actions)自动化部署流程,并结合Docker容器化技术提高部署效率和一致性。
FAQs
Q1: 如何更改Node.js的版本?
A1: 你可以使用NVM轻松更改Node.js版本,列出所有已安装的版本:
nvm ls
使用以下命令切换到特定版本:
nvm use <version>
要切换到v16.3.0:
nvm use 16.3.0
验证更改:
node -v
Q2: 如何卸载Node.js和NVM?
A2: 要卸载Node.js和NVM,你可以按照以下步骤操作:
1、卸载NVM:
打开你的shell配置文件(如~/.bashrc
或~/.zshrc
),找到NVM相关的加载命令并将其注释掉或删除,然后重新加载配置文件:
source ~/.bashrc
删除NVM目录:
rm -rf $NVM_DIR
2、卸载Node.js:
如果你通过NVM安装了Node.js,卸载NVM后,Node.js也会被移除,如果直接使用包管理器安装,可以使用以下命令卸载:
Ubuntu/Debian:
sudo apt remove nodejs npm -y
CentOS/RHEL:
sudo yum remove nodejs npm -y
Fedora:
sudo dnf remove nodejs npm -y
3、清理残留文件:
删除可能残留的全局npm模块:
sudo rm -rf /usr/local/lib/node_modules /usr/local/bin/npm /usr/local/share/man/man3/npm* /usr/local/lib/dtrace/dscript* /usr/local/include/node /usr/local/src/node_gyp /usr/local/lib/node* /usr/local/bin/node* /usr/local/share/systemtap/tapset/node* /usr/local/lib/dtrace/node.d ~/.npmrc ~/.node-gyp ~/.node_repl_history ~/.npm ~/.config/configstore/insight-phonehome.yml ~/.config/configstore/update-notifier-cordova.json ~/.config/configstore/exp-cli.json ~/.config/configstore/pkg-registry-client-auth.json ~/.config/configstore/@babel/register-for-monorepo.json ~/.config/configstore/@ionic/cli-utils.json ~/.config/configstore/@ionic/cli-plugin-proxy.json ~/.config/configstore/@ionic/cli-plugin-cordova.json ~/.config/configstore/@ionic/cli-plugin-gulp.json ~/.config/configstore/@ionic/cli-plugin-browserify.json ~/.config/configstore/@ionic/cli-plugin-typings.json ~/.config/configstore/@ionic/cli-plugin-ionic-angular.json ~/.config/configstore/ngx-tools-cache.json ~/.config/configstore/ngx-tools-cache-shim.json ~/.config/configstore/protractor-cordova-cli-config.json ~/.config/configstore/protractor-gulpfile-config.json ~/.config/configstore/protractor-karma-cli-config.json ~/.config/configstore/protractor-webdriver-update.json ~/.config/configstore/protractor-webdriver-manager.json ~/.config/configstore/protractor-tslint-config.json ~/.config/configstore/protractor-jasmine2-config.json ~/.config/configstore/protractor-eslint-config.json ~/.config/configstore/protractor-mochawesome-reporter-config.json ~/.config/configstore/protractor-karma-remap-coverage.json ~/.config/configstore/protractor-karma-remap-istanbul.json ~/.config/configstore/protractor-karma-remap-lcovonly.json ~/.config/configstore/protractor-karma-remap-nyc.json ~/.config/configstore/protractor-karma-remap-isparta.json ~/.config/configstore/protractor-karma-remap-html2js.json ~/.config/configstore/protractor-karma-remap-e2e-coverage.json ~/.config/configstore/protractor-karma-remap-e2e-istanbul.json ~/.config/configstore/protractor-karma-remap-e2e-lcovonly.json ~/.config/configstore/protractor-karma-remap-e2e-nyc.json ~/.config/configstore/protractor-karma-remap-e2e-isparta.json ~/.config/configstore/protractor-karma-remap-e2e-html2js.json ~/.config/configstore/protractor-karma-remap-e2e-teamcity.json ~/.config/configstore/protractor-karma-remap-e2e-codeclimate.json ~/.config/configstore/protractor-karma-remap-e2e-travisci.json ~/.config/configstore/protractor-karma-remap-e2e-circleci.json ~/.config/configstore/protractor-karma-remap-e2e-browserstack.json ~/.config/configstore/protractor-karma-remap-e2e-saucelabs.json ~/.config/configstore/protractor-karma-remap-e2e-testrail.json ~/.config/configstore/protractor-karma-remap-e2e-browserstackvideorecorder.json ~/.config/configstore/protractor-karma-remap-e2e-saucelabsvideorecorder.json ~/.config/configstore/protractor-karma-remap-e2e-cypressvideorecorder.json ~/.config/configstore/protractor-karma-remap-e2e-cypressvideorecorder_legacy_support_mode_enabled=false~/.config/configstore/protractor-karma-remap-e2e-cypressvideorecorder_legacy_support_mode_enabled=true~/.config/configstore/protractor-karma-remap-e2e-cypressvideorecorder_legacy_support_mode_enabled=false~/.config/configstore/protractor-karma-remap-e2e-cypressvideorecorder_legacy_support_mode_enabled=true~/.config/configstore/protractor-karma-remap-e2e-cypressvideorecorder_legacy_support_mode_enabled=false~/.config/configstore/protractor-karma-remap-e2e-cypressvideorecorder_legacy_support_mode_enabled=false~/.config/configstore/protractor-karma-remap-e2e-cypressvideorecorder_legacy_support_mode_enabled=false~/.config/configstore/protractor-karma-remap-e2e-cypressvideorecorder_legacy_support_mode_enabled=false~/.config/configstore/protractor-karma-remap-e2e-cypressvideorecorder_legacy_support_mode_enabled=false~/.config/configstore/protractor-karma-remap-e2e-cypressvideorecorder_legacy_support_mode_enabled=false~/.config/configstore/protractor-karma-remap-e2e-cypressvideorecorder_legacy_support_mode_enabled=false~/.config/configstore/protractor-karma-remap-e2e-cypressvideorecorder_legacy_support_mode_enabled=false~/.config/configstore/protractor-karma-remap-e2e-cypressvideorecorder_legacy_support_mode_enabled=false~/.config/configstore/protractor-karma-remap-e2e-cypressvideorecorder_legacy_support_mode_enabled=false~/.config/configstore/protractor-karma-remap-e2e-cypressvideorecorder_legacy_support_mode_enabled=false~/.config/configstore/protractor-karma-remap-e2e-cypressvideorecorder_legacy_support_mode_enabled=false~/.config/configstore/protractor-karma-remap-e2e-cypressvideorecorder_legacy_support_mode_enabled=false~/.config/configstore/protractor-karma-remap-e2e-cypressvideorecorder_legacy_support_mode_enabled=false~/.config/configstore/protractor-karma-remap-e2e-cypressvideorecorder_legacy_support_mode_enabled=false~/.config/configstore/protractor-karma-remap-e2e-cypressvideorecorder_legacy_support_mode_enabled=false~/.config/configstore/protractor-karma-remap-e2e-cypressvideorecorder_legacy_support_mode_enabled=false~/.config/configstore/protractor-karma-remap-e2e-cypressvideorecorder_legacy_support_mode_enabled=false~/.config/configstore/protractor-karma-remap-e2e-cypressvideorecorder_legacy_support_mode_enabled=false~/.config/configstore/protractor-karma-remap-e2e-cypressvideorecorder_legacy_support_mode_enabled=false~/
小伙伴们,上文介绍了“服务器配置nodejs”的内容,你了解清楚吗?希望对你有所帮助,任何问题可以给我留言,让我们下期再见吧。
【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!
发表回复