在Ubuntu上部署Node.js应用的完整流程
在开始部署前,需确保系统软件包为最新版本,并安装构建Node.js模块所需的工具:
sudo apt update && sudo apt upgrade -y
sudo apt install -y build-essential libssl-dev
# 导入NodeSource仓库密钥并设置源(以Node.js 20.x为例)
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
# 安装Node.js及npm
sudo apt install -y nodejs
# 安装nvm
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
# 加载nvm环境
source ~/.bashrc
# 安装最新LTS版本Node.js
nvm install --lts
验证安装:
node -v # 查看Node.js版本(如v20.x.x)
npm -v # 查看npm版本(如10.x.x)
mkdir my-node-app && cd my-node-app
npm init -y # 生成package.json文件
npm install express --save
server.js)const express = require('express');
const app = express();
const port = process.env.PORT || 3000; // 支持环境变量指定端口
app.get('/', (req, res) => {
res.send('Hello World from Ubuntu Node.js Server!');
});
app.listen(port, () => {
console.log(`Server running at http://localhost:${port}/`);
});
PM2是Node.js进程管理工具,可实现后台运行、自动重启、日志管理及开机自启。
sudo npm install -g pm2
pm2 start server.js --name "my-node-app" # 以“my-node-app”名称启动
pm2 list # 查看所有管理的进程
pm2 logs # 查看应用日志
pm2 restart my-node-app # 重启应用
pm2 stop my-node-app # 停止应用
pm2 startup # 生成开机自启脚本(根据提示执行后续命令,如sudo su -c "env PATH=$PATH:/usr/bin pm2 startup ubuntu -u ubuntu --hp /home/ubuntu")
pm2 save # 保存当前进程列表到开机启动配置
Nginx可作为反向代理,处理HTTP请求转发、SSL卸载及静态文件服务,提升应用性能与安全性。
sudo apt install -y nginx
编辑默认站点配置文件(或新建自定义配置):
sudo nano /etc/nginx/sites-available/default
替换server块内容为以下配置(假设应用运行在3000端口,域名替换为你的实际域名或IP):
server {
listen 80;
server_name your-domain.com www.your-domain.com; # 替换为你的域名或IP
location / {
proxy_pass http://127.0.0.1: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;
}
}
sudo nginx -t # 测试配置语法(无错误则显示“syntax is ok”)
sudo systemctl restart nginx # 重启Nginx生效配置
将敏感信息(如数据库密码、API密钥)存储在环境变量中,避免硬编码:
# 编辑~/.bashrc或项目根目录的.env文件(推荐)
echo "PORT=3000\nNODE_ENV=production" >> ~/.bashrc
source ~/.bashrc
在代码中通过process.env.PORT访问变量。
允许HTTP(80)及HTTPS(443)流量通过:
sudo ufw allow 'Nginx Full' # 允许Nginx全部流量
sudo ufw enable # 启用防火墙
sudo ufw status # 查看防火墙状态
通过Git钩子或CI/CD工具(如GitHub Actions、GitLab CI)实现代码自动拉取与重启:
# 示例:简单的自动化部署脚本(save为deploy.sh)
#!/bin/bash
cd /path/to/my-node-app
git pull origin main
npm install
pm2 restart my-node-app
sudo systemctl reload nginx
chmod +x deploy.sh # 赋予执行权限
./deploy.sh # 执行部署
通过以上步骤,你可在Ubuntu上完成Node.js应用的生产级部署,确保应用稳定运行并具备良好的扩展性。