以下是在Ubuntu系统上部署Node.js项目的完整流程,分为系统初始化、环境配置、项目部署三个部分:
一、系统初始化 & 环境准备
bash
bash
# 1. 更新系统软件包
sudo apt update && sudo apt upgrade -y
# 2. 安装基础工具
sudo apt install -y build-essential git curl
# 3. 安装Node.js(推荐使用LTS版本)
curl -fsSL https://deb.nodesource.com/setup_lts.x | sudo -E bash -
sudo apt install -y nodejs
# 验证安装
node -v && npm -v
# 4. 全局安装PM2进程管理工具
sudo npm install -g pm2
# 设置PM2开机自启
pm2 startup systemd
# 根据提示执行生成的命令(例如)
sudo env PATH=$PATH:/usr/bin /usr/lib/node_modules/pm2/bin/pm2 startup systemd -u ubuntu --hp /home/ubuntu
二、上传Node.js项目
方式1:通过SCP上传(本地→服务器)
bash
# 本地终端执行(非服务器)
scp -r /本地/项目路径 ubuntu@服务器IP:/目标路径
方式2:通过Git克隆
bash
# 服务器操作
git clone https://github.com/你的仓库地址.git
cd 项目目录
三、项目部署流程
bash
# 1. 进入项目目录
cd /path/to/your/project
# 2. 安装项目依赖
npm install
# 3. 配置环境变量(按需)
# 方式1:直接写入
echo "PORT=3000" > .env
# 方式2:手动创建.env文件并填写配置
# 4. 启动项目(任选其一)
pm2 start app.js # 直接启动js文件
pm2 start "npm start" --name "my-app" # 启动npm脚本
pm2 start ecosystem.config.js # 使用配置文件
# 5. 保存PM2进程列表
pm2 save
# 6. 查看运行状态
pm2 list
pm2 logs
四、网络配置(可选)
1. 开放防火墙端口
bash
sudo ufw allow 22 # SSH端口(已默认开放)
sudo ufw allow 3000 # 应用端口
sudo ufw enable
2. 配置Nginx反向代理(推荐)
bash
# 安装Nginx
sudo apt install -y nginx
# 创建配置文件
sudo nano /etc/nginx/sites-available/your-domain.conf
配置文件内容示例:
nginx
server {
listen 80;
server_name your-domain.com;
location / {
proxy_pass http://localhost:3000;
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:
bash
sudo ln -s /etc/nginx/sites-available/your-domain.conf /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl restart nginx
3. 配置SSL证书(Let's Encrypt)
bash
sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d your-domain.com
五、常用维护命令
bash
javascript
# 查看实时日志
pm2 logs
# 重启应用
pm2 restart app-name
# 停止应用
pm2 stop app-name
# 删除应用
pm2 delete app-name
# 更新项目代码后的操作
git pull
npm install
pm2 restart all
注意事项:
- 确保项目中的监听地址为
0.0.0.0
而非127.0.0.1
- 生产环境建议使用
NODE_ENV=production
- 敏感信息(如API密钥)务必通过
.env
文件管理 - 建议使用
npm ci
代替npm install
保持依赖一致性
按照以上步骤操作,即可完成从零开始到生产环境部署的完整流程。