🗣 Wd提问: node服务器部署
🤖 Ai回答: 我来为您详细介绍Node.js服务器的部署方法,涵盖多种部署方案。
1、传统服务器部署
准备工作
bash
在服务器上安装Node.js
curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -
sudo apt-get install -y nodejs
或者使用nvm
curl -ohttps://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash
nvm install 18
nvm use 18
项目配置
json
// package.json
{
name: my-app,
version: 1.0.0,
scripts: {
start: node app.js,
dev: nodemon app.js,
test: jest
},
engines: {
node: =18.0.0
}
}
使用PM2进行进程管理
bash
安装PM2
npm install -g pm2
启动应用
pm2 start app.js name my-app
或者使用配置文件
pm2 ecosystem
javascript
// ecosystem.config.js
module.exports = {
apps: [{
name: 'my-app',
script: './app.js',
instances: 'max', // 使用所有CPU核心
exec_mode: 'cluster',
env: {
NODE_ENV: 'development',
PORT: 3000
},
env_production: {
NODE_ENV: 'production',
PORT: 80
}
}]
};
bash
PM2常用命令
pm2 start ecosystem.config.js env production
pm2 stop my-app
pm2 restart my-app
pm2 delete my-app
pm2 logs
pm2 monit
设置开机自启
pm2 startup
pm2 save
2、Docker部署
Dockerfile配置
dockerfile
使用官方Node.js镜像
FROM node:18-alpine
设置工作目录
WORKDIR /app
复制package文件
COPY package*.json ./
安装依赖
RUN npm ci only=production
复制源代码
COPY 、.
暴露端口
EXPOSE 3000
运行应用
USER node
CMD [node, app.js]
Docker Compose配置
yaml
docker-compose.yml
version: '3.8'
services:
app:
build: .
ports:
3000:3000
environment:
NODE_ENV=production
DATABASE_URL=your_database_url
volumes:
./logs:/app/logs
restart: unless-stopped
nginx:
image: nginx:alpine
ports:
80:80
volumes:
./nginx.conf:/etc/nginx/nginx.conf
depends_on:
app
构建和运行
bash
构建镜像
docker build -t my-node-app .
运行容器
docker run -d -p 3000:3000 name my-app my-node-app
使用docker-compose
docker-compose up -d
3、云平台部署
Vercel部署
json
// vercel.json
{
version: 2,
builds: [
{
src: app.js,
use: @vercel/node
}
],
routes: [
{
src: /(.*),
dest: app.js
}
]
}
Heroku部署
bash
创建Heroku应用
heroku create my-node-app
设置环境变量
heroku config:set NODE_ENV=production
部署
git push heroku main
4、使用Nginx反向代理
Nginx配置
nginx
/etc/nginx/sites-available/your-domain
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_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_cache_bypass $http_upgrade;
}
静态文件服务
location /static/ {
alias /var/www/your-app/static/;
expires 1y;
add_header Cache-Control public, immutable;
}
}
5、完整的部署脚本
bash
!/bin/bash
deploy.sh
set -e
echo 开始部署Node.js应用...
变量配置
APP_NAME=my-node-app
APP_DIR=/var/www/$APP_NAME
BACKUP_DIR=/var/backups/$APP_NAME
GIT_REPO=your-git-repo-url
创建目录
sudo mkdir -p $APP_DIR $BACKUP_DIR
备份现有应用
if [ -d $APP_DIR ]; then
echo 备份现有应用...
tar -czf $BACKUP_DIR/backup-$(date +%Y%m%d-%H%M%S).tar.gz -C $APP_DIR .
fi
拉取最新代码
echo 拉取最新代码...
cd $APP_DIR
git pull origin main
安装依赖
echo 安装依赖...
npm install production
运行数据库迁移(如果有)
npx sequelize db:migrate
重启应用
echo 重启应用...
pm2 restart $APP_NAME pm2 start ecosystem.config.js env production
健康检查
echo 执行健康检查...
sleep 5
curl -f http://localhost:3000/health exit 1
echo 部署完成!
6、环境配置和最佳实践
环境变量管理
javascript
// config.js
require('dotenv').config();
module.exports = {
port: process.env.PORT 3000,
nodeEnv: process.env.NODE_ENV 'development',
database: {
url: process.env.DATABASE_URL,
pool: {
max: parseInt(process.env.DB_POOL_MAX) 10,
min: parseInt(process.env.DB_POOL_MIN) 2
}
},
jwt: {
secret: process.env.JWT_SECRET,
expiresIn: process.env.JWT_EXPIRES_IN '7d'
}
};
安全配置
bash
使用HTTPS
sudo apt-get install certbot python3-certbot-nginx
sudo certbot nginx -d your-domain.com
防火墙配置
sudo ufw allow ssh
sudo ufw allow 'Nginx Full'
sudo ufw enable
7、监控和日志
日志配置
javascript
// logger.js
const winston = require('winston');
const logger = winston.createLogger({
level: 'info',
format: winston.format.combine(
winston.format.timestamp(),
winston.format.json()
),
transports: [
new winston.transports.File({ filename: 'logs/error.log', level: 'error' }),
new winston.transports.File({ filename: 'logs/combined.log' })
]
});
if (process.env.NODE_ENV !== 'production') {
logger.add(new winston.transports.Console({
format: winston.format.simple()
}));
}
module.exports = logger;
选择适合您项目的部署方式,建议从PM2+传统服务器开始,随着业务增长再考虑Docker或云平台部署。
📣 商家广告:





0
IP地址: 224.28.235.71
搜索次数: 0
提问时间: 2025-11-03 10:43:17
🛒 域名购买:
wangsou.com.cn
76.plus
6444.com.cn
0833.com.cn
chemen.com.cn
jldj.cn
c-a.com.cn
tuosou.cn
663.net.cn
f.cq.cn
❓️ 热门提问:
DOOH广告投放代理
.com.au域名
hk域名怎么注册
ip地址获取api
网页开发Stylus
云服务器 电信
gpu云服务器 价格
护士证注册网址入口
web服务器 weblogic
B站信息流广告代理加盟
豌豆Ai站群搜索引擎系统
🌐 域名评估:
uav.sd.cn
tt.gs.cn
s.qh.cn
vision2100.com.cn
nn.ah.cn
wz.chat
vtolfair.com.cn
youxi.cool
su7.ac.cn
rzy.cn
⛏ 最新挖掘:
凯里酸汤鱼
贵阳烤脑花
都匀毛尖茶
花溪牛肉粉
贵阳烤生蚝
贵阳烤豆腐
贵阳纸包鱼
贵阳特色菜
🖌 热门作画:
🤝 关于我们:
豌豆Ai
域名
建站
站群
留痕
推广
评估
源码
开发Ai
工具
日记
价格
加盟
广告
流量
留言
联系
🗨 加入群聊:
🔗 友情链接:
谷歌优化公司
Schweizer Suchmaschine
ai提问
🧰 站长工具:
Ai工具 whois查询 搜索
📢 温馨提示:本站所有问答由Ai自动创作,内容仅供参考,若有误差请用“联系”里面信息通知我们人工修改或删除。
👉 技术支持:本站由豌豆Ai提供技术支持,使用的最新版:《豌豆Ai站群搜索引擎系统 V.25.10.25》搭建本站。