一、环境准备与工具链选型
1.1 服务器基础环境
生产环境建议选择主流云服务商的Linux服务器(推荐CentOS 8或Ubuntu 22.04 LTS),需满足以下核心组件:
- Web服务器:Nginx 1.20+(支持HTTP/2和动态模块加载)
- 后端运行时:
- Node.js 16+(配合PM2进程管理)
- OpenJDK 11+(针对Java Spring Boot应用)
- 构建工具链:Git 2.30+、Maven/Gradle(Java项目)、npm/yarn(前端项目)
1.2 辅助工具配置
# 基础开发环境安装(Ubuntu示例)sudo apt update && sudo apt install -y \nginx \nodejs npm \openjdk-11-jdk \git curl wget# Node.js版本管理(推荐使用nvm)curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.5/install.sh | bashnvm install 18nvm use 18
1.3 CDN与安全防护
注册主流CDN服务提供商账号(建议选择支持全站加速和WAF防护的服务),重点配置:
- DNS解析:将域名A记录指向服务器IP
- CNAME配置:启用CDN加速域名
- 安全策略:开启CC防护、IP黑名单、SQL注入检测
二、前端部署自动化方案
2.1 构建优化策略
以Vue项目为例,推荐配置:
// vue.config.js 示例module.exports = {publicPath: process.env.NODE_ENV === 'production' ? '/dist/' : '/',productionSourceMap: false,configureWebpack: {optimization: {splitChunks: {chunks: 'all',cacheGroups: {vendor: {test: /[\\/]node_modules[\\/]/,name: 'vendors',chunks: 'all'}}}}}}
2.2 自动化部署流程
# 1. 本地构建npm run build# 2. 同步到服务器(使用rsync替代scp实现增量同步)rsync -avz --delete dist/ user@server:/data/www/html/# 3. 部署后验证curl -I http://your-domain.com/manifest.json
2.3 Nginx静态资源配置
server {listen 80;server_name frontend.your-domain.com;root /data/www/html;index index.html;# 前端路由支持location / {try_files $uri $uri/ /index.html;}# 静态资源缓存策略location ~* \.(js|css|png|jpg|jpeg|svg|ico|webp)$ {expires 1y;add_header Cache-Control "public, no-transform";access_log off;}# 禁止访问敏感文件location ~ /(\.git|\.env|README|LICENSE) {deny all;return 404;}}
三、后端服务守护方案
3.1 Node.js进程管理
# 安装PM2npm install -g pm2# 启动应用(推荐使用生态系统文件)pm2 ecosystem# 生成的ecosystem.config.js示例module.exports = {apps: [{name: 'api-service',script: './dist/main.js',instances: 'max',exec_mode: 'cluster',env: {NODE_ENV: 'production',PORT: 3001},log_file: '/var/log/api-service.log',error_file: '/var/log/api-service-err.log'}]}# 启动服务pm2 start ecosystem.config.jspm2 savepm2 startup # 设置开机自启
3.2 Java服务管理方案
# 使用systemd管理Spring Boot应用sudo vim /etc/systemd/system/springboot.service# 文件内容示例[Unit]Description=Spring Boot ApplicationAfter=syslog.target network.target[Service]User=appuserWorkingDirectory=/data/apps/springbootExecStart=/usr/bin/java -jar /data/apps/springboot/app.jarSuccessExitStatus=143Restart=alwaysRestartSec=10[Install]WantedBy=multi-user.target# 启用服务sudo systemctl daemon-reloadsudo systemctl enable springbootsudo systemctl start springboot
3.3 服务监控与告警
推荐集成以下监控方案:
- 基础监控:Node Exporter + Prometheus + Grafana
- 日志管理:ELK Stack或Loki+Grafana
- 告警系统:Alertmanager配置邮件/Webhook通知
四、Nginx高级配置实践
4.1 反向代理核心配置
upstream node_backend {server 127.0.0.1:3001;keepalive 32;}upstream java_backend {server 127.0.0.1:8080;keepalive 32;}server {listen 443 ssl http2;server_name api.your-domain.com;ssl_certificate /path/to/fullchain.pem;ssl_certificate_key /path/to/privkey.pem;# API代理配置location /api/v1/ {proxy_pass http://node_backend/api/v1/;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_connect_timeout 60s;proxy_read_timeout 300s;proxy_send_timeout 300s;# 缓冲区设置proxy_buffer_size 4k;proxy_buffers 8 16k;proxy_busy_buffers_size 32k;}# WebSocket支持location /ws/ {proxy_pass http://node_backend;proxy_http_version 1.1;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection "upgrade";}}
4.2 性能优化配置
# 全局优化worker_processes auto;worker_rlimit_nofile 65535;events {worker_connections 4096;multi_accept on;}# HTTP优化http {# 连接优化keepalive_timeout 75s;keepalive_requests 1000;sendfile on;tcp_nopush on;tcp_nodelay on;# Gzip压缩gzip on;gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;gzip_min_length 1k;gzip_comp_level 6;gzip_vary on;# 缓冲区配置client_body_buffer_size 128k;client_header_buffer_size 16k;client_max_body_size 8m;large_client_header_buffers 4 32k;}
五、CDN集成与安全加固
5.1 CDN配置最佳实践
-
缓存策略:
- 静态资源:缓存时间设置为1年(通过Cache-Control头控制)
- HTML文件:缓存时间设置为0秒(必须回源验证)
- API响应:根据业务需求设置(通常不缓存或短时间缓存)
-
回源配置:
- 协议跟随:保持HTTP/HTTPS一致性
- 回源HOST:设置为实际后端服务域名
- 301/302跟随:根据安全需求开启
5.2 安全防护方案
# 安全相关配置server {# 防止点击劫持add_header X-Frame-Options "SAMEORIGIN";# XSS防护add_header X-XSS-Protection "1; mode=block";# 内容类型嗅探防护add_header X-Content-Type-Options "nosniff";# CSP策略(根据实际需求调整)add_header Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline' https://trusted.cdn.com; style-src 'self' 'unsafe-inline'; img-src 'self' data:; connect-src 'self';";# 限制请求方法if ($request_method !~ ^(GET|HEAD|POST|OPTIONS)$ ) {return 405;}# 防止文件遍历location ~ /\. {deny all;return 403;}}
六、部署自动化与CI/CD集成
6.1 GitLab CI/CD示例
# .gitlab-ci.yml 示例stages:- build- deploybuild_frontend:stage: buildimage: node:18script:- cd frontend- npm install- npm run buildartifacts:paths:- frontend/dist/deploy_production:stage: deployimage: alpine:latestbefore_script:- apk add --no-cache openssh-client rsync- mkdir -p ~/.ssh- echo "$SSH_PRIVATE_KEY" > ~/.ssh/id_rsa- chmod 600 ~/.ssh/id_rsa- ssh-keyscan -H $SERVER_IP >> ~/.ssh/known_hostsscript:- rsync -avz --delete frontend/dist/ user@$SERVER_IP:/data/www/html/- ssh user@$SERVER_IP "pm2 restart ecosystem.config.js --env production"only:- main
6.2 部署验证清单
-
基础验证:
- 访问首页是否正常加载
- 检查控制台无404错误
- 验证所有API接口连通性
-
性能验证:
- 使用Lighthouse进行性能评分
- 检查CDN缓存命中率
- 监控服务器资源使用情况
-
安全验证:
- 扫描常见漏洞(如SQL注入、XSS)
- 检查安全头配置
- 验证HTTPS证书有效性
本方案通过系统化的技术栈整合,实现了从代码提交到生产部署的全流程自动化。通过合理的架构设计和配置优化,可支撑中小型项目百万级日活量的访问需求。实际部署时建议先在测试环境验证所有配置,再逐步推广到生产环境。