# 生产环境部署和监控指南(轻量级版本) ## 目录 1. [环境准备](#环境准备) 2. [部署流程](#部署流程) 3. [轻量级监控配置](#轻量级监控配置) 4. [告警配置](#告警配置) 5. [维护和运维](#维护和运维) ## 环境准备 ### 系统要求 - Linux/Unix 服务器(推荐 Ubuntu 22.04+) - Node.js 18+ - 至少 1GB RAM - 至少 5GB 磁盘空间 ### 必需的软件 ```bash # 安装 Node.js curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash - sudo apt-get install -y nodejs # 安装 PM2(进程管理器) npm install -g pm2 ``` ## 部署流程 ### 1. 配置环境变量 复制并编辑生产环境配置: ```bash cp .env.production .env.local ``` 更新以下关键配置: - `RESEND_API_KEY`: Resend API 密钥 - `NEXT_PUBLIC_SENTRY_DSN`: Sentry DSN - `NEXTAUTH_SECRET`: 认证密钥 - `ADMIN_PASSWORD`: 管理员密码 - `NEXT_PUBLIC_GA_MEASUREMENT_ID`: Google Analytics ID(可选) ### 2. 安装依赖 ```bash npm ci --production=false ``` ### 3. 运行测试 ```bash cd e2e TEST_ENV=development npx playwright test --reporter=list cd .. ``` ### 4. 构建生产版本 ```bash npm run build ``` ### 5. 启动生产服务器 使用 PM2 启动服务: ```bash pm2 start npm --name "novalon-website" -- start ``` ### 6. 验证部署 访问以下URL验证部署: - 网站: http://localhost:3000 - 健康检查: http://localhost:3000/api/health - 管理后台: http://localhost:3000/admin ## 轻量级监控配置 ### 监控架构 采用轻量级监控方案,包含以下组件: 1. **Sentry** - 错误监控和性能追踪 2. **UptimeRobot** - 外部可用性监控 3. **Google Analytics** - 用户行为和访问统计 4. **健康检查API** - 内部服务状态 5. **邮件告警** - 关键问题通知 ### 1. Sentry 错误监控 #### 配置步骤 Sentry 已经集成在项目中,只需配置环境变量: ```env NEXT_PUBLIC_SENTRY_DSN=https://xxxxxxxxxxxxx@o4507xxxxx.ingest.sentry.io/xxxxxxxxxxxxx ``` #### 配置告警 1. 登录 Sentry Dashboard 2. 进入 Settings → Alerts 3. 创建新的 Alert Rule: - **Issue**: Critical Errors - **Environment**: Production - **Frequency**: Immediately - **Email**: ops@novalon.cn #### 功能特性 - JavaScript 错误捕获 - 性能监控 - 用户会话回放 - 错误告警 ### 2. UptimeRobot 可用性监控 #### 注册和配置 1. 访问 https://uptimerobot.com/ 2. 注册免费账号 3. 创建新的 Monitor: - **Monitor Type**: HTTP(s) - **URL**: https://www.novalon.cn - **Monitoring Interval**: 5 minutes - **Alert Contacts**: ops@novalon.cn #### 配置告警 在 UptimeRobot 中设置: - **Down Alert**: 网站不可用时发送邮件 - **Up Alert**: 网站恢复时发送邮件 - **SSL Expiry**: SSL 证书过期提醒 #### 推荐监控端点 ```yaml - 主页: https://www.novalon.cn - 健康检查: https://www.novalon.cn/api/health - 管理后台: https://www.novalon.cn/admin ``` ### 3. Google Analytics 访问统计 #### 获取跟踪 ID 1. 访问 https://analytics.google.com/ 2. 创建新的 GA4 属性 3. 复制测量 ID(格式:G-XXXXXXXXXX) #### 配置环境变量 ```env NEXT_PUBLIC_GA_MEASUREMENT_ID=G-XXXXXXXXXX ``` #### 集成到应用 创建 `src/lib/analytics.ts`: ```typescript export const GA_MEASUREMENT_ID = process.env.NEXT_PUBLIC_GA_MEASUREMENT_ID; export const pageview = (url: string) => { if (typeof window !== 'undefined' && GA_MEASUREMENT_ID) { window.gtag('config', GA_MEASUREMENT_ID, { page_path: url, }); } }; export const event = (action: string, category: string, label?: string) => { if (typeof window !== 'undefined' && GA_MEASUREMENT_ID) { window.gtag('event', action, { event_category: category, event_label: label, }); } }; ``` 在 `src/app/layout.tsx` 中添加: ```typescript import Script from 'next/script'; export default function RootLayout({ children }: { children: React.ReactNode }) { return (
{process.env.NEXT_PUBLIC_GA_MEASUREMENT_ID && ( )} {children} ); } ``` ### 4. 健康检查 API 健康检查端点:`/api/health` **返回数据:** ```json { "status": "healthy", "timestamp": "2024-01-01T00:00:00Z", "version": "1.0.0", "checks": { "database": "connected", "uptime": 123456 } } ``` ## 告警配置 ### 告警策略 只监控关键问题: - **服务不可用**(通过 UptimeRobot) - **严重错误**(通过 Sentry) - **数据库连接失败**(通过健康检查) ### 告警阈值 | 指标 | 阈值 | 告警级别 | 通知方式 | |--------|--------|----------|----------| | 网站可用性 | < 99.9% | Critical | UptimeRobot 邮件 | | 响应时间 | > 3秒 | Warning | UptimeRobot 邮件 | | JavaScript 错误 | > 10次/小时 | Critical | Sentry 邮件 | | 数据库连接 | 失败 | Critical | 手动检查 | ### 邮件通知 **Sentry 告警:** - 接收邮箱: ops@novalon.cn - 告警级别: Critical - 响应时间: 立即 **UptimeRobot 告警:** - 接收邮箱: ops@novalon.cn - 告警类型: Down, Up, SSL Expiry - 响应时间: 立即 ## 维护和运维 ### 日常维护 #### 每日检查 - [ ] 查看 Sentry 错误报告 - [ ] 检查 UptimeRobot 状态 - [ ] 查看关键日志 #### 每周检查 - [ ] 分析 Google Analytics 数据 - [ ] 检查性能趋势 - [ ] 审查安全日志 #### 每月检查 - [ ] 更新依赖包 - [ ] 备份数据库 - [ ] 审查监控配置 ### 日志管理 ```bash # 查看应用日志 pm2 logs novalon-website # 查看错误日志 pm2 logs novalon-website --err # 清理旧日志 pm2 flush ``` ### 数据库备份 ```bash # 手动备份 ./scripts/backup.sh # 设置定时备份 crontab -e # 添加以下行(每天凌晨 2 点备份) 0 2 * * * /path/to/scripts/backup.sh ``` ### 故障处理 #### 1. 服务无法启动 ```bash # 检查 PM2 状态 pm2 status # 查看错误日志 pm2 logs novalon-website --err # 重启服务 pm2 restart novalon-website ``` #### 2. 网站不可用 1. 检查 UptimeRobot 告警 2. 查看服务器状态 3. 检查应用日志 4. 重启服务 #### 3. 错误激增 1. 查看 Sentry 错误详情 2. 分析错误模式 3. 修复关键问题 4. 部署热修复 ### 更新部署 #### 零停机部署 ```bash # 1. 构建新版本 npm run build # 2. 备份当前版本 cp -r dist dist_backup # 3. 替换新版本 rm -rf dist mv dist_new dist # 4. 重启服务(优雅重启) pm2 reload novalon-website ``` #### 回滚 ```bash # 回滚到上一个版本 rm -rf dist mv dist_backup dist # 重启服务 pm2 restart novalon-website ``` ### 安全加固 #### 防火墙配置 ```bash # 只允许必要端口 ufw allow 22/tcp # SSH ufw allow 80/tcp # HTTP ufw allow 443/tcp # HTTPS ufw enable ``` #### SSL/TLS 配置 ```bash # 使用 Let's Encrypt 获取免费证书 certbot certonly --webroot -w /var/www/html -d www.novalon.cn # 配置 Nginx server { listen 443 ssl; server_name www.novalon.cn; ssl_certificate /etc/letsencrypt/live/www.novalon.cn/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/www.novalon.cn/privkey.pem; 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_cache_bypass $http_upgrade; } } ``` #### 定期更新 ```bash # 更新系统包 sudo apt update && sudo apt upgrade -y # 更新 Node.js 依赖 npm audit fix npm update # 更新 PM2 pm2 update ``` ## 性能优化 ### 1. 应用优化 - 启用 gzip 压缩 - 优化图片和静态资源 - 使用 CDN 加速 ### 2. 数据库优化 - 创建适当的索引 - 定期清理旧数据 - 优化查询语句 ### 3. 服务器优化 - 调整 PM2 配置 - 配置 swap - 优化文件系统 ## 应急预案 ### 1. 服务完全不可用 1. 检查 UptimeRobot 告警 2. 检查服务器状态 3. 查看应用日志 4. 尝试重启服务 5. 如果无法恢复,切换到备用服务器 ### 2. 数据丢失 1. 立即停止写入操作 2. 从最近的备份恢复 3. 验证数据完整性 4. 分析丢失原因,防止再次发生 ### 3. 安全事件 1. 立即隔离受影响系统 2. 收集日志和证据 3. 评估影响范围 4. 修复安全漏洞 5. 恢复服务 6. 事后分析 ## 联系方式 - **运维告警**: ops@novalon.cn - **业务咨询**: contact@novalon.cn ## 附录 ### A. 常用命令 ```bash # 查看服务状态 pm2 status # 重启服务 pm2 restart novalon-website # 查看日志 pm2 logs novalon-website # 检查磁盘空间 df -h # 检查内存使用 free -h # 检查进程 ps aux | grep node ``` ### B. 配置文件位置 - 应用配置: `/etc/novalon-website/` - 日志文件: `~/.pm2/logs/` - 数据文件: `/var/lib/novalon-website/` - 备份文件: `/var/backups/novalon-website/` ### C. 监控服务 - **Sentry**: https://sentry.io/ - **UptimeRobot**: https://uptimerobot.com/ - **Google Analytics**: https://analytics.google.com/ ## 快速开始 ### 一键配置脚本 ```bash # 运行轻量级监控配置脚本 chmod +x scripts/setup-lightweight-monitoring.sh ./scripts/setup-lightweight-monitoring.sh ``` 这个脚本会: - 检查 Sentry 配置 - 配置 Google Analytics(可选) - 提供 UptimeRobot 配置指导 - 创建健康检查端点 - 配置 Sentry 告警 ### 部署脚本 ```bash # 运行生产部署脚本 chmod +x scripts/deploy-production.sh ./scripts/deploy-production.sh ``` 这个脚本会: - 安装依赖 - 运行测试 - 构建生产版本 - 启动服务 - 健康检查