# 通过宝塔面板安装:
1. 软件商店 → 安装 Node.js 版本管理器
2. 选择 Node.js 版本(建议18.x)
3. 安装 PM2 管理器插件
cd /www/wwwroot
git clone [你的仓库地址]
cd your-nextjs-project
# 进入项目目录
npm install --production
# 或使用yarn
yarn install --production
# 生产环境构建
npm run build
# 或
yarn build
方法一:通过PM2管理器(宝塔插件)
打开PM2管理器 添加项目:方法二:手动创建PM2配置文件
// ecosystem.config.js
module.exports = {
apps: [{
name: 'nextjs-app',
script: 'node_modules/.bin/next',
args: 'start',
instances: 'max',
exec_mode: 'cluster',
autorestart: true,
watch: false,
max_memory_restart: '1G',
env: {
NODE_ENV: 'production',
PORT: 3000
}
}]
};
启动PM2:
pm2 start ecosystem.config.js
pm2 save
pm2 startup
在宝塔面板中:
网站 → 添加站点 设置域名和目录 修改Nginx配置:server {
listen 80;
server_name 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_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;
proxy_set_header X-Forwarded-Host $server_name;
}
# 静态文件缓存
location /_next/static {
alias /www/wwwroot/your-project/.next/static;
expires 365d;
add_header Cache-Control "public, immutable";
}
# 优化设置
client_max_body_size 100m;
proxy_connect_timeout 60s;
proxy_send_timeout 60s;
proxy_read_timeout 60s;
}
网站 → 设置 → 配置文件,添加:
# 在server块内添加
location @nextjs {
proxy_set_header NEXT_PUBLIC_API_URL https://api.example.com;
# 其他环境变量...
}
# .env.production
NEXT_PUBLIC_API_URL=https://api.example.com
DATABASE_URL=your_database_url
解决方案:
# 增加swap空间
sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
# 优化构建命令
NODE_OPTIONS="--max-old-space-size=4096" npm run build
解决方案:
# 检查端口占用
lsof -i:3000
# 修改Next.js启动端口
# package.json
"scripts": {
"start": "next start -p 3001"
}
解决方案:
# Nginx配置添加
location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
root /www/wwwroot/your-project/public;
expires 30d;
add_header Cache-Control "public, immutable";
}
解决方案:
# 保存PM2配置
pm2 save
# 设置开机启动
pm2 startup
# 检查日志
pm2 logs nextjs-app --lines 100
解决方案:
# 调整Nginx超时设置
proxy_connect_timeout 300s;
proxy_send_timeout 300s;
proxy_read_timeout 300s;
解决方案:
# Nginx配置
client_max_body_size 100m;
# Next.js配置
// next.config.js
module.exports = {
api: {
bodyParser: {
sizeLimit: '100mb'
}
}
}
gzip on;
gzip_vary on;
gzip_min_length 1024;
gzip_types text/plain text/css text/xml text/javascript
application/javascript application/xml+rss
application/json image/svg+xml;
listen 443 ssl http2;
# 静态资源缓存
location /_next/static {
expires 1y;
add_header Cache-Control "public, immutable, max-age=31536000";
}
# 页面缓存(SSG页面)
location ~* \.html$ {
expires 1h;
add_header Cache-Control "public, max-age=3600";
}
# 查看PM2状态
pm2 monit
# 查看应用日志
pm2 logs nextjs-app
# 重启应用
pm2 restart nextjs-app
# 更新代码后重新部署
git pull
npm install
npm run build
pm2 restart nextjs-app
#!/bin/bash
# deploy.sh
echo "开始部署Next.js应用..."
# 1. 拉取最新代码
git pull origin main
# 2. 安装依赖
npm install --production
# 3. 构建应用
NODE_OPTIONS="--max-old-space-size=4096" npm run build
# 4. 重启应用
pm2 restart nextjs-app
# 5. 清理旧文件
npm cache clean --force
echo "部署完成!"
# 定时备份脚本
0 2 * * * tar -czf /backup/nextjs-$(date +%Y%m%d).tar.gz /www/wwwroot/your-project
通过宝塔面板 → 计划任务设置自动备份
npm audit fix
防火墙设置:仅开放必要端口
文件权限:chown -R www:www /www/wwwroot/your-project
chmod 750 /www/wwwroot/your-project
禁用目录浏览:Nginx配置中添加 autoindex off;
按照以上流程操作,即可在宝塔面板上成功部署Next.js项目。如遇到其他问题,可查看宝塔面板的错误日志和PM2日志进行排查。