375 lines
7.1 KiB
Markdown
375 lines
7.1 KiB
Markdown
# 生产环境部署和监控指南
|
||
|
||
## 目录
|
||
1. [环境准备](#环境准备)
|
||
2. [部署流程](#部署流程)
|
||
3. [监控配置](#监控配置)
|
||
4. [告警配置](#告警配置)
|
||
5. [维护和运维](#维护和运维)
|
||
|
||
## 环境准备
|
||
|
||
### 系统要求
|
||
- Linux/Unix 服务器(推荐 Ubuntu 22.04+)
|
||
- Node.js 18+
|
||
- Docker 和 Docker Compose
|
||
- 至少 2GB RAM
|
||
- 至少 10GB 磁盘空间
|
||
|
||
### 必需的软件
|
||
```bash
|
||
# 安装 Node.js
|
||
curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -
|
||
sudo apt-get install -y nodejs
|
||
|
||
# 安装 Docker
|
||
curl -fsSL https://get.docker.com -o get-docker.sh
|
||
sudo sh get-docker.sh
|
||
|
||
# 安装 Docker Compose
|
||
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
|
||
sudo chmod +x /usr/local/bin/docker-compose
|
||
```
|
||
|
||
## 部署流程
|
||
|
||
### 1. 配置环境变量
|
||
|
||
复制并编辑生产环境配置:
|
||
```bash
|
||
cp .env.production .env.local
|
||
```
|
||
|
||
更新以下关键配置:
|
||
- `RESEND_API_KEY`: Resend API 密钥
|
||
- `NEXT_PUBLIC_SENTRY_DSN`: Sentry DSN
|
||
- `NEXTAUTH_SECRET`: 认证密钥
|
||
- `ADMIN_PASSWORD`: 管理员密码
|
||
|
||
### 2. 运行部署脚本
|
||
|
||
```bash
|
||
chmod +x scripts/deploy-production.sh
|
||
./scripts/deploy-production.sh
|
||
```
|
||
|
||
### 3. 验证部署
|
||
|
||
访问以下URL验证部署:
|
||
- 网站: http://localhost:3000
|
||
- 健康检查: http://localhost:3000/api/health
|
||
- 管理后台: http://localhost:3000/admin
|
||
|
||
## 监控配置
|
||
|
||
### 1. 启动监控服务
|
||
|
||
```bash
|
||
chmod +x scripts/setup-monitoring.sh
|
||
./scripts/setup-monitoring.sh
|
||
|
||
docker-compose -f docker-compose.monitoring.yml up -d
|
||
```
|
||
|
||
### 2. 访问监控界面
|
||
|
||
- **Prometheus**: http://localhost:9090
|
||
- 查看指标和查询数据
|
||
- 默认用户名: admin
|
||
- 默认密码: admin
|
||
|
||
- **Grafana**: http://localhost:3001
|
||
- 查看仪表板和可视化
|
||
- 默认用户名: admin
|
||
- 默认密码: admin
|
||
|
||
- **Alertmanager**: http://localhost:9093
|
||
- 查看和管理告警
|
||
- 配置通知路由
|
||
|
||
### 3. 关键指标
|
||
|
||
#### 应用指标
|
||
- HTTP 请求数量
|
||
- 响应时间(P50, P95, P99)
|
||
- 错误率(4xx, 5xx)
|
||
- 并发连接数
|
||
|
||
#### 系统指标
|
||
- CPU 使用率
|
||
- 内存使用率
|
||
- 磁盘 I/O
|
||
- 网络流量
|
||
|
||
#### 业务指标
|
||
- 用户注册数
|
||
- 联系表单提交数
|
||
- 页面访问量
|
||
- 转化率
|
||
|
||
## 告警配置
|
||
|
||
### 告警规则
|
||
|
||
#### 严重告警 (Critical)
|
||
- **服务不可用**: 服务停止响应超过 1 分钟
|
||
- **高错误率**: 5xx 错误率超过 5% 持续 5 分钟
|
||
- **响应时间过长**: P95 响应时间超过 1 秒持续 5 分钟
|
||
|
||
#### 警告告警 (Warning)
|
||
- **性能下降**: P95 响应时间超过 500ms
|
||
- **资源使用高**: CPU 或内存使用率超过 80%
|
||
- **磁盘空间不足**: 可用磁盘空间低于 20%
|
||
|
||
### 通知渠道
|
||
|
||
#### 邮件通知
|
||
- 严重告警: admin@novalon.cn, ops@novalon.cn
|
||
- 警告告警: dev@novalon.cn
|
||
- 默认通知: admin@novalon.cn
|
||
|
||
#### 配置邮件服务
|
||
编辑 `monitoring/alertmanager.yml`:
|
||
```yaml
|
||
email_configs:
|
||
- to: 'admin@novalon.cn'
|
||
from: 'alertmanager@novalon.cn'
|
||
smarthost: 'smtp.resend.com:587'
|
||
auth_username: 'resend'
|
||
auth_password: 'your_resend_api_key'
|
||
require_tls: true
|
||
```
|
||
|
||
## 维护和运维
|
||
|
||
### 日常维护
|
||
|
||
#### 1. 日志管理
|
||
```bash
|
||
# 查看应用日志
|
||
tail -f logs/app.log
|
||
|
||
# 查看错误日志
|
||
grep "ERROR" logs/app.log
|
||
|
||
# 清理旧日志
|
||
find logs/ -name "*.log" -mtime +7 -delete
|
||
```
|
||
|
||
#### 2. 数据库备份
|
||
```bash
|
||
# 手动备份
|
||
./scripts/backup.sh
|
||
|
||
# 设置定时备份
|
||
crontab -e
|
||
# 添加以下行(每天凌晨 2 点备份)
|
||
0 2 * * * /path/to/scripts/backup.sh
|
||
```
|
||
|
||
#### 3. 监控检查
|
||
```bash
|
||
# 检查服务状态
|
||
docker-compose -f docker-compose.monitoring.yml ps
|
||
|
||
# 查看监控日志
|
||
docker-compose -f docker-compose.monitoring.yml logs -f
|
||
|
||
# 重启监控服务
|
||
docker-compose -f docker-compose.monitoring.yml restart
|
||
```
|
||
|
||
### 故障处理
|
||
|
||
#### 1. 服务无法启动
|
||
```bash
|
||
# 检查端口占用
|
||
netstat -tulpn | grep :3000
|
||
|
||
# 检查日志
|
||
tail -f logs/app.log
|
||
|
||
# 重启服务
|
||
npm start
|
||
```
|
||
|
||
#### 2. 性能问题
|
||
```bash
|
||
# 检查系统资源
|
||
top
|
||
htop
|
||
|
||
# 检查数据库性能
|
||
sqlite3 data/prod.db "EXPLAIN QUERY PLAN SELECT * FROM ..."
|
||
|
||
# 查看慢查询
|
||
tail -f logs/slow-query.log
|
||
```
|
||
|
||
#### 3. 数据恢复
|
||
```bash
|
||
# 恢复数据库
|
||
./scripts/restore.sh /path/to/backup/backup_YYYYMMDD_HHMMSS.tar.gz
|
||
```
|
||
|
||
### 更新部署
|
||
|
||
#### 1. 零停机部署
|
||
```bash
|
||
# 1. 构建新版本
|
||
npm run build
|
||
|
||
# 2. 备份当前版本
|
||
cp -r dist dist_backup
|
||
|
||
# 3. 替换新版本
|
||
rm -rf dist
|
||
mv dist_new dist
|
||
|
||
# 4. 重启服务(优雅重启)
|
||
pm2 restart all
|
||
# 或
|
||
kill -HUP $(cat pidfile)
|
||
```
|
||
|
||
#### 2. 回滚
|
||
```bash
|
||
# 回滚到上一个版本
|
||
rm -rf dist
|
||
mv dist_backup dist
|
||
|
||
# 重启服务
|
||
pm2 restart all
|
||
```
|
||
|
||
### 安全加固
|
||
|
||
#### 1. 防火墙配置
|
||
```bash
|
||
# 只允许必要端口
|
||
ufw allow 22/tcp # SSH
|
||
ufw allow 80/tcp # HTTP
|
||
ufw allow 443/tcp # HTTPS
|
||
ufw enable
|
||
```
|
||
|
||
#### 2. 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;
|
||
}
|
||
}
|
||
```
|
||
|
||
#### 3. 定期更新
|
||
```bash
|
||
# 更新系统包
|
||
sudo apt update && sudo apt upgrade -y
|
||
|
||
# 更新 Node.js 依赖
|
||
npm audit fix
|
||
npm update
|
||
|
||
# 更新 Docker 镜像
|
||
docker-compose -f docker-compose.monitoring.yml pull
|
||
docker-compose -f docker-compose.monitoring.yml up -d
|
||
```
|
||
|
||
## 性能优化
|
||
|
||
### 1. 应用优化
|
||
- 启用 gzip 压缩
|
||
- 配置 CDN
|
||
- 优化图片和静态资源
|
||
- 使用 Redis 缓存
|
||
|
||
### 2. 数据库优化
|
||
- 创建适当的索引
|
||
- 定期清理旧数据
|
||
- 优化查询语句
|
||
- 使用连接池
|
||
|
||
### 3. 服务器优化
|
||
- 调整内核参数
|
||
- 配置 swap
|
||
- 优化文件系统
|
||
- 使用 SSD 存储
|
||
|
||
## 应急预案
|
||
|
||
### 1. 服务完全不可用
|
||
1. 检查服务器状态
|
||
2. 查看错误日志
|
||
3. 尝试重启服务
|
||
4. 如果无法恢复,切换到备用服务器
|
||
|
||
### 2. 数据丢失
|
||
1. 立即停止写入操作
|
||
2. 从最近的备份恢复
|
||
3. 验证数据完整性
|
||
4. 分析丢失原因,防止再次发生
|
||
|
||
### 3. 安全事件
|
||
1. 立即隔离受影响系统
|
||
2. 收集日志和证据
|
||
3. 评估影响范围
|
||
4. 修复安全漏洞
|
||
5. 恢复服务
|
||
6. 事后分析
|
||
|
||
## 联系方式
|
||
|
||
- **运维告警**: ops@novalon.cn
|
||
- **业务咨询**: contact@novalon.cn
|
||
|
||
## 附录
|
||
|
||
### A. 常用命令
|
||
```bash
|
||
# 查看服务状态
|
||
systemctl status novalon-website
|
||
|
||
# 重启服务
|
||
systemctl restart novalon-website
|
||
|
||
# 查看日志
|
||
journalctl -u novalon-website -f
|
||
|
||
# 检查磁盘空间
|
||
df -h
|
||
|
||
# 检查内存使用
|
||
free -h
|
||
|
||
# 检查进程
|
||
ps aux | grep node
|
||
```
|
||
|
||
### B. 配置文件位置
|
||
- 应用配置: `/etc/novalon-website/`
|
||
- 日志文件: `/var/log/novalon-website/`
|
||
- 数据文件: `/var/lib/novalon-website/`
|
||
- 备份文件: `/var/backups/novalon-website/`
|
||
|
||
### C. 监控端口
|
||
- 应用服务: 3000
|
||
- Prometheus: 9090
|
||
- Grafana: 3001
|
||
- Alertmanager: 9093
|