ubuntu下nodejs如何部署
小樊
46
2025-12-28 10:08:58
Ubuntu 下 Node.js 生产级部署步骤
一 准备与安装 Node.js
- 更新系统并安装构建依赖:
- sudo apt update && sudo apt upgrade -y
- sudo apt install -y build-essential libssl-dev
- 安装 Node.js(推荐 NodeSource 指定版本,示例为 20.x;如需 18.x 将链接中的 20 改为 18):
- curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
- sudo apt install -y nodejs
- 验证版本:
- 如需多版本管理,可用 nvm(适合在同一台机器维护多个 Node 版本):
- curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
- source ~/.bashrc
- nvm install --lts && nvm use --lts
二 部署应用与进程管理
- 上传或克隆代码(三选一):
- SCP:scp -r ./local-project user@your_server_ip:/path/to/remote/directory
- SFTP:FileZilla / WinSCP 拖拽上传
- Git:git clone https://github.com/your-repo/project.git
- 安装依赖与构建(如有构建步骤执行构建):
- cd /path/to/project
- npm install(生产环境可加 --production)
- npm run build(若 package.json 定义了 build 脚本)
- 以 PM2 启动与守护进程:
- sudo npm install -g pm2
- pm2 start server.js --name “my-node-app”(入口文件按实际修改)
- 常用:pm2 list、pm2 logs、pm2 restart my-node-app、pm2 stop my-node-app
- 设置开机自启:pm2 startup(按提示执行生成的命令),随后 pm2 save
三 配置 Nginx 反向代理与 HTTPS
- 安装 Nginx:
- sudo apt install -y nginx
- 配置反向代理(编辑 /etc/nginx/sites-available/default,将域名与端口按实际替换):
- server {
listen 80;
server_name your-domain.com www.your-domain.com;
location / {
proxy_pass http://127.0.0.1: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;
}
- }
- 测试并生效:
- sudo nginx -t
- sudo systemctl restart nginx
- 启用 HTTPS(Let’s Encrypt + Certbot,自动修改 Nginx 并配置自动续期):
- sudo apt install certbot python3-certbot-nginx
- sudo certbot --nginx -d your-domain.com
四 安全与运维要点
- 防火墙放行(UFW):
- sudo ufw allow ‘Nginx Full’
- sudo ufw enable && sudo ufw status
- 环境变量与配置:
- 将 PORT、NODE_ENV 等放入环境变量或 .env,代码中通过 process.env.PORT 读取
- 示例:echo “PORT=3000\nNODE_ENV=production” >> ~/.bashrc && source ~/.bashrc
- 常见问题排查:
- 端口冲突:检查占用 sudo netstat -tulnp | grep 3000,或调整应用端口
- 权限问题:sudo chown -R $USER:$USER /path/to/project
- 依赖错误:删除 node_modules 和 package-lock.json 后重新 npm install
- 日志与监控:
- PM2 日志:pm2 logs
- Nginx 错误日志:sudo tail -f /var/log/nginx/error.log
五 一键部署脚本示例
- 保存为 deploy.sh,chmod +x deploy.sh 后执行 ./deploy.sh
- #!/bin/bash
set -e
APP_DIR=“/path/to/my-node-app”
cd “$APP_DIR”
git pull origin main
npm install
npm run build || true
pm2 restart my-node-app || pm2 start server.js --name “my-node-app”
sudo systemctl reload nginx
- 可按需扩展:执行数据库迁移、静态资源预热、通知等步骤