docs: 整理文档结构并创建索引(任务 2.3/20)
This commit is contained in:
@@ -0,0 +1,374 @@
|
||||
# 生产环境部署和监控指南
|
||||
|
||||
## 目录
|
||||
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
|
||||
Reference in New Issue
Block a user