在 Ubuntu 上实现 Node.js 跨平台部署的可落地方案
一、方案总览
二、方案一 Docker 容器化部署(优先推荐)
FROM node:20
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm ci --only=production
COPY . .
EXPOSE 3000
ENV NODE_ENV=production
CMD ["npm","start"]
version: "3"
services:
web:
build: .
ports:
- "3000:3000"
depends_on:
- db
db:
image: mongo
volumes:
- db-data:/data/db
volumes:
db-data:
三、方案二 裸机或虚拟机部署(NodeSource + PM2 + Nginx)
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
sudo apt-get install -y nodejs
node -v && npm -v
npm ci --only=production # 或 npm install(开发环境)
npm i -g pm2
pm2 start app.js --name "my-app"
pm2 startup systemd # 按提示完成开机自启
pm2 save
sudo apt-get install -y nginx
# /etc/nginx/sites-available/default 或 /etc/nginx/conf.d/default.conf
server {
listen 80;
server_name example.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 systemctl reload nginx
四、跨平台一致性与多版本管理
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
# 重新加载 shell 后
nvm install 20
nvm use 20
nvm alias default 20
node -v && npm -v
五、关键注意事项与最佳实践