如何在Ubuntu上部署Node.js项目
在Ubuntu上部署Node.js项目需完成环境准备、项目配置、进程管理及生产优化等步骤,以下是详细流程:
首先确保系统软件包为最新版本,避免兼容性问题:
sudo apt update && sudo apt upgrade -y
通过Ubuntu官方仓库安装,但版本可能较旧:
sudo apt install nodejs npm -y
验证安装:
node -v # 查看Node.js版本(需≥14.x)
npm -v # 查看npm版本
若项目需要特定版本(如18.x),可通过NodeSource PPA安装:
curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -
sudo apt install -y nodejs
或使用nvm(灵活管理多版本):
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.5/install.sh | bash
source ~/.bashrc
nvm install 18 # 安装指定版本
nvm use 18 # 切换至该版本
mkdir my-node-app && cd my-node-app
npm init -y # 初始化package.json
scp(本地→服务器)或git(代码托管平台→服务器):scp -r /local/project/path username@server_ip:/remote/deploy/path
cd /remote/deploy/path
进入项目目录,安装package.json中定义的依赖:
npm install # 生产环境建议添加--production减少体积
若使用yarn(替代npm):
npm install -g yarn
yarn install
若项目未包含入口文件(如server.js),创建一个基础Express示例:
// server.js
const express = require('express');
const app = express();
const port = process.env.PORT || 3000; // 支持环境变量端口
app.get('/', (req, res) => {
res.send('Hello from Node.js on Ubuntu!');
});
app.listen(port, () => {
console.log(`Server running on port ${port}`);
});
Nginx可处理HTTP请求转发、静态文件服务及SSL卸载,提升应用性能与安全性。
sudo apt install nginx -y
编辑默认站点配置(或新建自定义配置):
sudo nano /etc/nginx/sites-available/my-node-app
添加以下内容(替换your_domain_or_ip为实际域名/IP):
server {
listen 80;
server_name your_domain_or_ip;
location / {
proxy_pass http://localhost:3000; # 转发至Node.js应用端口
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
# 可选:静态文件直接由Nginx处理(提升性能)
location /static/ {
alias /path/to/your/static/files/;
expires 30d;
}
}
启用配置并测试:
sudo ln -s /etc/nginx/sites-available/my-node-app /etc/nginx/sites-enabled/
sudo nginx -t # 验证配置语法
sudo systemctl reload nginx # 重载Nginx
PM2是Node.js进程管理工具,可实现后台运行、自动重启、日志管理等功能。
sudo npm install -g pm2
pm2 start server.js --name "my-node-app" # 指定名称便于管理
常用命令:
pm2 status # 查看运行中的应用状态
pm2 logs # 查看实时日志
pm2 restart my-node-app # 重启应用
pm2 stop my-node-app # 停止应用
确保服务器重启后应用自动恢复:
pm2 startup # 生成启动脚本(按提示执行后续命令)
pm2 save # 保存当前进程列表
若使用ufw(Ubuntu防火墙),允许HTTP(80)和HTTPS(443)流量:
sudo ufw allow 'Nginx Full' # 允许HTTP和HTTPS
sudo ufw enable # 启用防火墙
sudo ufw status # 查看状态
在浏览器访问服务器IP或域名(如http://your_domain_or_ip),应看到应用返回的响应(如“Hello from Node.js on Ubuntu!”)。
通过以上步骤,即可在Ubuntu上完成Node.js项目的部署,涵盖环境准备、项目配置、进程管理及生产优化等关键环节。