一、服务器环境准备
1.1 基础开发工具链安装
在CentOS/RHEL系统上,首先需要配置编译环境和版本管理工具:
# 安装编译工具链(GCC/Make等)sudo yum groupinstall "Development Tools" -y# 安装Git版本控制工具sudo yum install git -y# 验证安装结果git --version && gcc --version
1.2 Node.js环境管理方案
推荐使用nvm进行多版本管理,避免系统级安装带来的权限问题:
# 下载nvm安装脚本(使用国内镜像源)curl -o- https://gitee.com/mirrors/nvm/raw/master/install.sh | bash# 配置环境变量(添加到~/.bashrc)export NVM_DIR="$HOME/.nvm"[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"# 加载配置并验证source ~/.bashrcnvm --version
1.3 加速依赖安装
配置国内镜像源可显著提升安装速度:
# Node.js下载镜像export NVM_NODEJS_ORG_MIRROR=https://npmmirror.com/mirrors/node/# npm registry配置npm config set registry https://registry.npmmirror.com/# 验证镜像配置npm config get registry
二、Web服务器部署
2.1 Nginx安装与配置
针对常见安装问题提供系统化解决方案:
# 方案1:安装EPEL仓库(推荐)sudo dnf install epel-release -y --allowerasing# 方案2:检查yum排除列表sudo sed -i '/^exclude=/d' /etc/yum.conf# 正式安装sudo yum install nginx -y# 启动服务并设置开机自启sudo systemctl start nginxsudo systemctl enable nginx
2.2 反向代理配置
针对Next.js应用特点配置优化参数:
server {listen 80;server_name yourdomain.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;# 静态资源缓存配置location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ {expires 1y;add_header Cache-Control "public";}}}
三、应用部署流程
3.1 代码仓库管理
配置安全的Git访问方式:
# 设置全局用户信息git config --global user.name "Deploy Bot"git config --global user.email "deploy@example.com"# 生成SSH密钥对(推荐4096位RSA)ssh-keygen -t rsa -b 4096 -C "deploy@example.com"# 将公钥添加到代码托管平台cat ~/.ssh/id_rsa.pub
3.2 自动化部署脚本
创建部署专用目录并配置权限:
# 创建应用目录sudo mkdir -p /var/www/nextjs-appsudo chown -R $USER:$USER /var/www/nextjs-app# 初始化项目(示例)cd /var/www/nextjs-appgit clone your-repo-url.git .# 安装依赖(使用生产模式)npm install --production
四、进程管理方案
4.1 PM2进程守护
配置生产环境进程管理:
# 全局安装PM2sudo npm install -g pm2# 启动应用(推荐集群模式)pm2 start npm --name "nextjs-app" -- run start -- -p 3000# 设置开机自启pm2 startuppm2 save# 常用管理命令pm2 list # 查看进程状态pm2 logs # 查看实时日志pm2 reload all # 零停机重启
4.2 日志管理策略
配置日志轮转避免磁盘占满:
# 创建日志目录sudo mkdir /var/log/nextjs-appsudo chown $USER:$USER /var/log/nextjs-app# 配置PM2日志输出pm2 set pm2-logrotate:max_size 10Mpm2 set pm2-logrotate:retain 7
五、安全加固措施
5.1 防火墙配置
开放必要端口并限制访问:
# 安装firewalld(如未安装)sudo yum install firewalld -y# 配置基本规则sudo firewall-cmd --permanent --add-service=httpsudo firewall-cmd --permanent --add-service=httpssudo firewall-cmd --permanent --add-port=22/tcp --set-description="SSH"# 应用配置并验证sudo firewall-cmd --reloadsudo firewall-cmd --list-all
5.2 定期维护任务
设置cron任务进行自动维护:
# 编辑crontabcrontab -e# 添加以下内容(每天凌晨3点执行)0 3 * * * /usr/bin/pm2 reload all --update-env && /usr/bin/npm prune && /usr/bin/npm audit fix
六、常见问题解决方案
6.1 端口冲突处理
当3000端口被占用时:
# 查找占用进程sudo lsof -i :3000# 优雅终止进程sudo kill -15 <PID># 或强制终止sudo kill -9 <PID>
6.2 内存泄漏监控
配置PM2内存监控:
# 启用内存监控pm2 monit# 设置自动重启阈值(单位MB)pm2 restart nextjs-app --max-memory-restart 512M
通过以上系统化的部署方案,开发者可以构建出稳定可靠的Next.js应用运行环境。建议结合CI/CD工具实现自动化部署流程,进一步提升运维效率。对于高并发场景,可考虑结合容器化技术实现弹性伸缩部署。