9.6 KiB
9.6 KiB
生产环境部署和监控指南(轻量级版本)
目录
环境准备
系统要求
- Linux/Unix 服务器(推荐 Ubuntu 22.04+)
- Node.js 18+
- 至少 1GB RAM
- 至少 5GB 磁盘空间
必需的软件
# 安装 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. 配置环境变量
复制并编辑生产环境配置:
cp .env.production .env.local
更新以下关键配置:
RESEND_API_KEY: Resend API 密钥NEXT_PUBLIC_SENTRY_DSN: Sentry DSNNEXTAUTH_SECRET: 认证密钥ADMIN_PASSWORD: 管理员密码NEXT_PUBLIC_GA_MEASUREMENT_ID: Google Analytics ID(可选)
2. 安装依赖
npm ci --production=false
3. 运行测试
cd e2e
TEST_ENV=development npx playwright test --reporter=list
cd ..
4. 构建生产版本
npm run build
5. 启动生产服务器
使用 PM2 启动服务:
pm2 start npm --name "novalon-website" -- start
6. 验证部署
访问以下URL验证部署:
轻量级监控配置
监控架构
采用轻量级监控方案,包含以下组件:
- Sentry - 错误监控和性能追踪
- UptimeRobot - 外部可用性监控
- Google Analytics - 用户行为和访问统计
- 健康检查API - 内部服务状态
- 邮件告警 - 关键问题通知
1. Sentry 错误监控
配置步骤
Sentry 已经集成在项目中,只需配置环境变量:
NEXT_PUBLIC_SENTRY_DSN=https://xxxxxxxxxxxxx@o4507xxxxx.ingest.sentry.io/xxxxxxxxxxxxx
配置告警
- 登录 Sentry Dashboard
- 进入 Settings → Alerts
- 创建新的 Alert Rule:
- Issue: Critical Errors
- Environment: Production
- Frequency: Immediately
- Email: ops@novalon.cn
功能特性
- JavaScript 错误捕获
- 性能监控
- 用户会话回放
- 错误告警
2. UptimeRobot 可用性监控
注册和配置
- 访问 https://uptimerobot.com/
- 注册免费账号
- 创建新的 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 证书过期提醒
推荐监控端点
- 主页: https://www.novalon.cn
- 健康检查: https://www.novalon.cn/api/health
- 管理后台: https://www.novalon.cn/admin
3. Google Analytics 访问统计
获取跟踪 ID
- 访问 https://analytics.google.com/
- 创建新的 GA4 属性
- 复制测量 ID(格式:G-XXXXXXXXXX)
配置环境变量
NEXT_PUBLIC_GA_MEASUREMENT_ID=G-XXXXXXXXXX
集成到应用
创建 src/lib/analytics.ts:
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 中添加:
import Script from 'next/script';
export default function RootLayout({ children }: { children: React.ReactNode }) {
return (
<html>
<head>
{process.env.NEXT_PUBLIC_GA_MEASUREMENT_ID && (
<Script
src={`https://www.googletagmanager.com/gtag/js?id=${process.env.NEXT_PUBLIC_GA_MEASUREMENT_ID}`}
strategy="afterInteractive"
/>
)}
</head>
<body>{children}</body>
</html>
);
}
4. 健康检查 API
健康检查端点:/api/health
返回数据:
{
"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 数据
- 检查性能趋势
- 审查安全日志
每月检查
- 更新依赖包
- 备份数据库
- 审查监控配置
日志管理
# 查看应用日志
pm2 logs novalon-website
# 查看错误日志
pm2 logs novalon-website --err
# 清理旧日志
pm2 flush
数据库备份
# 手动备份
./scripts/backup.sh
# 设置定时备份
crontab -e
# 添加以下行(每天凌晨 2 点备份)
0 2 * * * /path/to/scripts/backup.sh
故障处理
1. 服务无法启动
# 检查 PM2 状态
pm2 status
# 查看错误日志
pm2 logs novalon-website --err
# 重启服务
pm2 restart novalon-website
2. 网站不可用
- 检查 UptimeRobot 告警
- 查看服务器状态
- 检查应用日志
- 重启服务
3. 错误激增
- 查看 Sentry 错误详情
- 分析错误模式
- 修复关键问题
- 部署热修复
更新部署
零停机部署
# 1. 构建新版本
npm run build
# 2. 备份当前版本
cp -r dist dist_backup
# 3. 替换新版本
rm -rf dist
mv dist_new dist
# 4. 重启服务(优雅重启)
pm2 reload novalon-website
回滚
# 回滚到上一个版本
rm -rf dist
mv dist_backup dist
# 重启服务
pm2 restart novalon-website
安全加固
防火墙配置
# 只允许必要端口
ufw allow 22/tcp # SSH
ufw allow 80/tcp # HTTP
ufw allow 443/tcp # HTTPS
ufw enable
SSL/TLS 配置
# 使用 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;
}
}
定期更新
# 更新系统包
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. 服务完全不可用
- 检查 UptimeRobot 告警
- 检查服务器状态
- 查看应用日志
- 尝试重启服务
- 如果无法恢复,切换到备用服务器
2. 数据丢失
- 立即停止写入操作
- 从最近的备份恢复
- 验证数据完整性
- 分析丢失原因,防止再次发生
3. 安全事件
- 立即隔离受影响系统
- 收集日志和证据
- 评估影响范围
- 修复安全漏洞
- 恢复服务
- 事后分析
联系方式
- 运维告警: ops@novalon.cn
- 业务咨询: contact@novalon.cn
附录
A. 常用命令
# 查看服务状态
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/
快速开始
一键配置脚本
# 运行轻量级监控配置脚本
chmod +x scripts/setup-lightweight-monitoring.sh
./scripts/setup-lightweight-monitoring.sh
这个脚本会:
- 检查 Sentry 配置
- 配置 Google Analytics(可选)
- 提供 UptimeRobot 配置指导
- 创建健康检查端点
- 配置 Sentry 告警
部署脚本
# 运行生产部署脚本
chmod +x scripts/deploy-production.sh
./scripts/deploy-production.sh
这个脚本会:
- 安装依赖
- 运行测试
- 构建生产版本
- 启动服务
- 健康检查