Files
Web_BLS_Heartbeat_Server/docs/deployment.md
XuJiacheng 625cb9eea4 feat: 添加部署脚本和文档并优化Kafka消费者配置
- 添加部署相关脚本(deploy.bat/update.bat/package.bat)和文档(deployment.md/package-guide.md)
 - 新增PM2配置文件(ecosystem.config.js/ecosystem.config.cjs)
 - 优化Kafka消费者配置支持动态fromOffset
 - 添加环境检查脚本(check-env.js)
 - 更新.gitignore添加release目录
 - 补充.env.example配置文件
2026-01-16 16:19:31 +08:00

292 lines
5.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# BLS心跳接收端发布流程
## 环境要求
- Windows Server系统
- Node.js 环境(已安装)
- PM2 进程管理器(已安装)
- PostgreSQL 数据库
- Kafka 消息队列
- Redis可选
## 发布流程
### 1. 准备发布包
在开发机器上执行以下命令:
```bash
# 安装依赖
npm install
# 构建项目
npm run build
# 创建发布包(包含必要的文件)
# 方法1手动复制文件
# 复制以下文件到发布目录:
# - dist/ (构建后的文件)
# - package.json
# - package-lock.json
# - src/config/config.example.js
# - scripts/db/ (数据库脚本)
# 方法2使用压缩包
# 创建包含上述文件的压缩包
```
### 2. 上传到目标服务器
将发布包上传到目标服务器的指定目录,例如:`C:\BLS_Heartbeat_Server`
### 3. 在目标服务器上部署
```bash
# 进入项目目录
cd C:\BLS_Heartbeat_Server
# 安装生产依赖
npm install --production
# 创建环境变量文件
# 复制配置示例并修改
copy src\config\config.example.js src\config\config.js
# 或者创建 .env 文件(推荐)
# 复制 .env.example 并修改为 .env
copy .env.example .env
# 编辑配置文件设置实际的数据库、Kafka、Redis连接信息
notepad .env
```
### 4. 配置环境变量
编辑 `.env` 文件,设置以下关键配置:
```env
# 应用配置
NODE_ENV=production
PORT=3000
# Kafka配置
KAFKA_BROKERS=localhost:9092
KAFKA_TOPIC=blwlog4Nodejs-rcu-heartbeat-topic
KAFKA_GROUP_ID=bls-heartbeat-consumer
KAFKA_CONSUMER_INSTANCES=6
# PostgreSQL配置
POSTGRES_HOST=127.0.0.1
POSTGRES_PORT=5432
POSTGRES_DATABASE=log_platform
POSTGRES_USER=log_admin
POSTGRES_PASSWORD=your_password
# Redis配置可选
REDIS_ENABLED=true
REDIS_HOST=10.8.8.109
REDIS_PORT=6379
REDIS_PASSWORD=
REDIS_DB=15
# 日志配置
LOG_LEVEL=info
LOG_FORMAT=json
```
### 5. 初始化数据库
```bash
# 运行数据库初始化脚本
npm run db:apply
```
### 6. 使用PM2启动服务
```bash
# 使用PM2启动服务
pm2 start ecosystem.config.js
# 查看服务状态
pm2 status
# 查看日志
pm2 logs web-bls-heartbeat-server
# 查看详细信息
pm2 show web-bls-heartbeat-server
```
### 7. 设置PM2开机自启
```bash
# 保存当前PM2进程列表
pm2 save
# 设置开机自启Windows需要管理员权限
pm2 startup
```
## PM2配置说明
项目提供了 `ecosystem.config.js` 配置文件,包含以下配置:
- 应用名称:`web-bls-heartbeat-server`
- 运行模式:`cluster`(集群模式)
- 实例数量根据CPU核心数自动设置
- 日志文件:`logs/` 目录下
- 环境变量:从 `.env` 文件加载
## 监控和维护
### 查看服务状态
```bash
# 查看所有服务状态
pm2 status
# 查看特定服务状态
pm2 show web-bls-heartbeat-server
# 实时监控
pm2 monit
```
### 日志管理
```bash
# 查看实时日志
pm2 logs web-bls-heartbeat-server
# 查看错误日志
pm2 logs web-bls-heartbeat-server --err
# 清空日志
pm2 flush
# 日志轮转需要安装pm2-logrotate
pm2 install pm2-logrotate
```
### 服务重启
```bash
# 重启服务
pm2 restart web-bls-heartbeat-server
# 优雅重启(集群模式)
pm2 reload web-bls-heartbeat-server
# 停止服务
pm2 stop web-bLS-heartbeat-server
# 删除服务
pm2 delete web-bls-heartbeat-server
```
### 更新部署
```bash
# 停止服务
pm2 stop web-bls-heartbeat-server
# 备份当前版本
xcopy /E /I /Y C:\BLS_Heartbeat_Server C:\BLS_Heartbeat_Server_backup
# 上传新版本文件
# 安装依赖(如果有更新)
npm install --production
# 重启服务
pm2 start ecosystem.config.js
# 验证服务状态
pm2 status
pm2 logs web-bls-heartbeat-server
```
## 故障排查
### 服务无法启动
1. 检查Node.js版本`node --version`
2. 检查PM2状态`pm2 list`
3. 查看错误日志:`pm2 logs web-bls-heartbeat-server --err`
4. 检查配置文件:确认 `.env` 文件配置正确
5. 检查网络连接确认Kafka、PostgreSQL、Redis服务可访问
### 数据库连接失败
1. 检查PostgreSQL服务状态
2. 验证数据库连接信息
3. 检查防火墙设置
4. 确认数据库用户权限
### Kafka连接失败
1. 检查Kafka服务状态
2. 验证Kafka地址和端口
3. 检查主题是否存在
4. 确认消费者组配置
### Redis连接失败
1. 检查Redis服务状态
2. 验证Redis连接信息
3. 如果不需要Redis设置 `REDIS_ENABLED=false`
## 性能优化
### 调整消费者实例数
`.env` 文件中修改:
```env
KAFKA_CONSUMER_INSTANCES=8
```
### 调整批量处理参数
```env
PROCESSOR_BATCH_SIZE=200
PROCESSOR_BATCH_TIMEOUT=3000
```
### 调整数据库连接池
```env
DB_MAX_CONNECTIONS=10
DB_IDLE_TIMEOUT_MS=30000
```
## 安全建议
1. 不要在代码中硬编码密码,使用环境变量
2. 限制数据库和Redis的访问IP
3. 定期更新依赖包:`npm audit fix`
4. 配置防火墙规则,限制不必要的端口访问
5. 定期备份配置文件和数据库
## 备份策略
### 配置文件备份
```bash
# 备份环境配置
copy .env .env.backup
# 备份PM2配置
pm2 save
```
### 数据库备份
```bash
# 使用pg_dump备份数据库
pg_dump -h localhost -U log_admin -d log_platform > backup.sql
```
## 联系支持
如有问题,请查看项目文档或联系技术支持团队。