Files
novalon-website/docs/PRODUCTION_DEPLOYMENT_LIGHTWEIGHT.md

9.6 KiB
Raw Permalink Blame History

生产环境部署和监控指南(轻量级版本)

目录

  1. 环境准备
  2. 部署流程
  3. 轻量级监控配置
  4. 告警配置
  5. 维护和运维

环境准备

系统要求

  • 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 DSN
  • NEXTAUTH_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验证部署:

轻量级监控配置

监控架构

采用轻量级监控方案,包含以下组件:

  1. Sentry - 错误监控和性能追踪
  2. UptimeRobot - 外部可用性监控
  3. Google Analytics - 用户行为和访问统计
  4. 健康检查API - 内部服务状态
  5. 邮件告警 - 关键问题通知

1. Sentry 错误监控

配置步骤

Sentry 已经集成在项目中,只需配置环境变量:

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

配置告警

在 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

  1. 访问 https://analytics.google.com/
  2. 创建新的 GA4 属性
  3. 复制测量 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. 网站不可用

  1. 检查 UptimeRobot 告警
  2. 查看服务器状态
  3. 检查应用日志
  4. 重启服务

3. 错误激增

  1. 查看 Sentry 错误详情
  2. 分析错误模式
  3. 修复关键问题
  4. 部署热修复

更新部署

零停机部署

# 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. 服务完全不可用

  1. 检查 UptimeRobot 告警
  2. 检查服务器状态
  3. 查看应用日志
  4. 尝试重启服务
  5. 如果无法恢复,切换到备用服务器

2. 数据丢失

  1. 立即停止写入操作
  2. 从最近的备份恢复
  3. 验证数据完整性
  4. 分析丢失原因,防止再次发生

3. 安全事件

  1. 立即隔离受影响系统
  2. 收集日志和证据
  3. 评估影响范围
  4. 修复安全漏洞
  5. 恢复服务
  6. 事后分析

联系方式

附录

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. 监控服务

快速开始

一键配置脚本

# 运行轻量级监控配置脚本
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

这个脚本会:

  • 安装依赖
  • 运行测试
  • 构建生产版本
  • 启动服务
  • 健康检查