前端部署全流程:手动操作指南与最佳实践

前端部署(包括Node服务端部署)—-手动部署全流程指南

在云计算和DevOps工具普及的今天,手动部署仍是开发者理解系统架构、排查问题的重要方式。本文将系统讲解前端项目(含Node服务端)手动部署的全流程,涵盖环境准备、代码部署、服务启动及安全优化等关键环节。

一、部署前环境准备

1.1 服务器环境配置

选择服务器时需考虑项目规模:

  • 小型项目:1核2G配置即可满足静态页面+Node API服务
  • 中大型项目:建议4核8G起,配备SSD硬盘提升I/O性能

操作系统推荐使用CentOS 8或Ubuntu 20.04 LTS,安装后需执行基础安全配置:

  1. # 更新系统包
  2. sudo apt update && sudo apt upgrade -y
  3. # 配置SSH安全
  4. sudo sed -i 's/^#PermitRootLogin prohibit-password/PermitRootLogin no/' /etc/ssh/sshd_config
  5. sudo systemctl restart sshd

1.2 依赖环境安装

Node环境

  • 使用nvm管理多版本Node.js
    1. curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash
    2. nvm install 16.14.0 # 推荐LTS版本

构建工具

  1. # 前端构建依赖
  2. sudo apt install -y build-essential python3
  3. # PM2进程管理
  4. sudo npm install pm2 -g

二、代码部署实施

2.1 代码传输方案

Git拉取方式(推荐):

  1. # 生成SSH密钥(若未配置)
  2. ssh-keygen -t rsa -b 4096 -C "deploy@yourdomain.com"
  3. # 添加公钥到Git仓库
  4. cat ~/.ssh/id_rsa.pub
  5. # 克隆代码
  6. git clone git@github.com:yourname/yourrepo.git
  7. cd yourrepo

本地压缩传输(备选):

  1. # 本地打包
  2. tar -czvf project.tar.gz ./dist ./server
  3. # 服务器解压
  4. tar -xzvf project.tar.gz -C /var/www/

2.2 前端静态资源部署

Nginx配置示例

  1. server {
  2. listen 80;
  3. server_name yourdomain.com;
  4. root /var/www/yourrepo/dist;
  5. index index.html;
  6. location / {
  7. try_files $uri $uri/ /index.html;
  8. }
  9. # 静态资源缓存
  10. location ~* \.(js|css|png|jpg)$ {
  11. expires 1y;
  12. add_header Cache-Control "public";
  13. }
  14. }

关键配置点

  • 确保root路径指向构建后的dist目录
  • 配置try_files实现前端路由支持
  • 设置合理的缓存策略(开发环境可设为0)

2.3 Node服务端部署

PM2启动配置ecosystem.config.js):

  1. module.exports = {
  2. apps: [{
  3. name: 'api-service',
  4. script: './server/app.js',
  5. instances: 'max', // 或指定数字
  6. exec_mode: 'cluster',
  7. env: {
  8. NODE_ENV: 'production',
  9. PORT: 3000
  10. },
  11. error_file: '/var/log/api-error.log',
  12. out_file: '/var/log/api-out.log'
  13. }]
  14. };

启动命令:

  1. pm2 start ecosystem.config.js
  2. pm2 save # 保存进程列表
  3. pm2 startup # 设置开机自启

三、服务验证与监控

3.1 基础验证

端口监听检查

  1. netstat -tulnp | grep LISTEN
  2. # 或使用ss命令
  3. ss -tulnp | grep LISTEN

服务可用性测试

  1. curl -I http://localhost:3000/api/health
  2. # 应返回200状态码

3.2 日志监控方案

PM2日志管理

  1. # 实时查看日志
  2. pm2 logs api-service
  3. # 日志轮转配置
  4. pm2 install pm2-logrotate
  5. pm2 set pm2-logrotate:max_size 10M

Nginx日志分析

  1. # 在nginx配置中添加
  2. access_log /var/log/nginx/yourdomain.access.log main;
  3. error_log /var/log/nginx/yourdomain.error.log warn;

四、安全加固措施

4.1 防火墙配置

UFW简单配置

  1. sudo ufw allow 22/tcp # SSH
  2. sudo ufw allow 80/tcp # HTTP
  3. sudo ufw allow 443/tcp # HTTPS
  4. sudo ufw enable

高级规则(iptables示例):

  1. # 限制SSH连接频率
  2. sudo iptables -A INPUT -p tcp --dport 22 -m connlimit --connlimit-above 3 -j REJECT

4.2 进程权限管理

创建专用用户

  1. sudo useradd -m -s /bin/bash nodeuser
  2. sudo chown -R nodeuser:nodeuser /var/www/yourrepo

使用sudoers限制权限

  1. # 编辑sudoers文件
  2. sudo visudo
  3. # 添加以下内容
  4. nodeuser ALL=(ALL) NOPASSWD: /usr/bin/pm2

五、常见问题处理

5.1 端口冲突解决方案

  1. # 查找占用端口的进程
  2. sudo lsof -i :3000
  3. # 强制终止进程
  4. sudo kill -9 <PID>

5.2 静态资源404问题排查

  1. 检查Nginx配置中的root路径是否正确
  2. 确认构建后的文件是否包含在传输包中
  3. 验证文件权限(应为644)

5.3 Node进程崩溃处理

PM2自动重启配置

  1. // 在ecosystem.config.js中添加
  2. module.exports = {
  3. apps: [{
  4. // ...其他配置
  5. max_restarts: 10,
  6. restart_delay: 1000,
  7. min_uptime: '10s'
  8. }]
  9. };

六、部署优化建议

  1. 蓝绿部署:准备两套环境,通过Nginx配置切换
  2. 金丝雀发布:先部署少量实例,监控无误后再全量
  3. 自动化脚本:将部署步骤编写为Shell脚本(示例):
    1. #!/bin/bash
    2. # deploy.sh
    3. echo "开始部署..."
    4. cd /var/www/yourrepo
    5. git pull origin main
    6. npm install --production
    7. npm run build
    8. pm2 reload ecosystem.config.js
    9. echo "部署完成"

手动部署虽然比自动化工具耗时,但能帮助开发者深入理解系统运行机制。建议新手从手动部署开始,逐步过渡到自动化方案。实际部署时,应根据项目规模选择合适的服务器配置,并始终将安全性放在首位。