feat: 重构项目心跳为Redis LIST并更新相关文档

重构项目心跳数据结构为Redis LIST,更新相关文档和OpenSpec规范。主要变更包括:
- 将项目心跳从STRING改为LIST类型
- 更新后端服务以支持LIST操作
- 同步更新文档和OpenSpec规范
- 统一后端端口为3001
- 添加部署指南和Windows部署文档

修复前端API请求路径,移除硬编码的localhost地址。添加PM2和Nginx配置文件模板,完善部署流程文档。更新Redis集成协议文档,明确LIST数据结构和外部项目对接规范。
This commit is contained in:
2026-01-17 18:36:52 +08:00
parent a8faa7dcaa
commit 7ac3949dfa
40 changed files with 4179 additions and 323 deletions

View File

@@ -0,0 +1,888 @@
# BLS Project Console 部署指南Systemd版本
## 一、部署架构说明
- **前端**Nginx作为Web服务器提供静态文件服务
- **后端**Express应用通过systemd服务管理
- **部署环境**飞牛OS NAS系统
- **容器化**Nginx运行在Docker容器中后端运行在宿主机上
## 二、环境信息
- **前端访问地址**: blv-rd.tech:20100
- **后端API地址**: http://127.0.0.1:19910
- **NAS项目文件目录**: `/vol1/1000/Docker/nginx/project/bls/bls_project_console`
- **NAS配置文件目录**: `/vol1/1000/Docker/nginx/conf.d`
- **Systemd服务目录**: `/etc/systemd/system/`
## 三、部署前环境检查
### 1. 检查Node.js环境
```bash
# 检查Node.js版本需要 >= 14.x
node --version
# 检查npm版本
npm --version
# 如果未安装请先安装Node.js
```
### 2. 检查Nginx容器状态
```bash
# 查看Nginx容器是否运行
docker ps | grep nginx
# 查看Nginx容器日志
docker logs nginx
# 检查Nginx容器端口映射
docker port nginx
```
### 3. 检查端口占用
```bash
# 检查后端端口19910是否被占用
netstat -tlnp | grep 19910
# 检查前端端口20100是否被占用
netstat -tlnp | grep 20100
```
### 4. 检查Redis服务
```bash
# 检查Redis是否运行
redis-cli ping
# 如果Redis未运行请先启动Redis服务
```
### 5. 检查文件权限
```bash
# 检查项目目录权限
ls -la /vol1/1000/Docker/nginx/project/bls/bls_project_console
# 确保有读写权限,如果没有则修改
chmod -R 755 /vol1/1000/Docker/nginx/project/bls/bls_project_console
```
## 四、前端部署步骤
### 步骤1本地编译前端
```bash
# 在本地项目根目录执行
npm install
npm run build
```
编译成功后,会在项目根目录生成 `dist` 文件夹。
### 步骤2上传前端文件到NAS
将本地编译生成的 `dist` 文件夹内的所有文件上传到NAS
```
NAS路径: /vol1/1000/Docker/nginx/project/bls/bls_project_console
```
**上传方式**
- 使用SFTP工具如FileZilla、WinSCP
- 使用NAS提供的Web管理界面上传
- 使用rsync命令同步
**注意**:
- 上传的是 `dist` 文件夹内的文件,不是 `dist` 文件夹本身
- 确保上传后NAS目录结构如下
```
/vol1/1000/Docker/nginx/project/bls/bls_project_console/
├── index.html
├── assets/
│ ├── index-xxx.js
│ └── index-xxx.css
└── ...
```
### 步骤3上传Nginx配置文件
将项目中的 `docs/nginx-deployment.conf` 文件上传到NAS
```
NAS路径: /vol1/1000/Docker/nginx/conf.d/bls_project_console.conf
```
### 步骤4验证Nginx配置
在NAS上执行以下命令验证Nginx配置
```bash
# 测试Nginx配置文件语法
docker exec nginx nginx -t
# 如果配置正确,会显示:
# nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
# nginx: configuration file /etc/nginx/nginx.conf test is successful
```
如果配置测试失败,检查配置文件语法错误:
```bash
# 查看Nginx错误日志
docker logs nginx --tail 50
# 进入容器查看详细错误
docker exec -it nginx bash
nginx -t
```
### 步骤5重启Nginx容器
```bash
# 重启Nginx容器
docker restart nginx
# 等待容器启动
sleep 5
# 检查容器状态
docker ps | grep nginx
```
或者只重新加载配置(不重启容器):
```bash
docker exec nginx nginx -s reload
```
### 步骤6验证前端部署
在浏览器中访问:
```
http://blv-rd.tech:20100
```
应该能看到项目的前端页面。
如果无法访问,检查以下内容:
```bash
# 检查Nginx容器日志
docker logs nginx --tail 100
# 检查Nginx访问日志
docker exec nginx tail -f /var/log/nginx-custom/access.log
# 检查Nginx错误日志
docker exec nginx tail -f /var/log/nginx-custom/error.log
```
## 五、后端部署步骤
### 步骤1准备后端文件本地
需要上传的后端文件包括:
- `src/backend/app.js`
- `src/backend/server.js`
- `src/backend/routes/` (整个目录)
- `src/backend/services/` (整个目录)
- `package.json`
- `package-lock.json`
### 步骤2上传后端文件到NAS
将上述文件上传到NAS
```
NAS路径: /vol1/1000/Docker/nginx/project/bls/bls_project_console/backend/
```
上传后的目录结构:
```
/vol1/1000/Docker/nginx/project/bls/bls_project_console/backend/
├── app.js
├── server.js
├── package.json
├── package-lock.json
├── routes/
│ ├── commands.js
│ ├── logs.js
│ └── projects.js
└── services/
├── migrateHeartbeatData.js
├── redisClient.js
└── redisKeys.js
```
### 步骤3安装Node.js依赖
登录NAS执行以下命令
```bash
# 进入后端目录
cd /vol1/1000/Docker/nginx/project/bls/bls_project_console/backend
# 安装生产环境依赖
npm install --production
# 验证依赖安装成功
ls node_modules
```
如果安装失败,检查以下内容:
```bash
# 检查npm配置
npm config list
# 检查网络连接
ping registry.npmjs.org
# 清除npm缓存后重试
npm cache clean --force
npm install --production
```
### 步骤4创建环境变量文件可选
如果需要配置环境变量,创建 `.env` 文件:
```bash
cd /vol1/1000/Docker/nginx/project/bls/bls_project_console/backend
nano .env
```
添加以下内容:
```env
NODE_ENV=production
PORT=19910
REDIS_HOST=localhost
REDIS_PORT=6379
```
保存并退出Ctrl+OEnterCtrl+X
### 步骤5测试后端服务启动
在启动systemd服务之前先手动测试后端服务是否能正常启动
```bash
cd /vol1/1000/Docker/nginx/project/bls/bls_project_console/backend
# 启动后端服务(前台运行)
node server.js
# 如果看到类似以下输出,说明启动成功:
# BLS Project Console backend server is running on port 19910
```
如果启动失败,查看错误信息并修复:
```bash
# 检查Redis连接
redis-cli ping
# 检查端口占用
netstat -tlnp | grep 19910
# 查看详细错误日志
node server.js 2>&1 | tee startup.log
```
测试成功后,按 Ctrl+C 停止服务。
### 步骤6创建systemd服务配置文件
将项目中的 `docs/bls-project-console.service` 文件上传到NAS
```
NAS路径: /etc/systemd/system/bls-project-console.service
```
或者直接在NAS上创建
```bash
sudo nano /etc/systemd/system/bls-project-console.service
```
添加以下内容:
```ini
[Unit]
Description=BLS Project Console Backend Service
After=network.target redis.service
[Service]
Type=simple
User=root
WorkingDirectory=/vol1/1000/Docker/nginx/project/bls/bls_project_console/backend
ExecStart=/usr/bin/node /vol1/1000/Docker/nginx/project/bls/bls_project_console/backend/server.js
Restart=on-failure
RestartSec=10
StandardOutput=append:/vol1/1000/Docker/nginx/project/bls/bls_project_console/backend/logs/systemd-out.log
StandardError=append:/vol1/1000/Docker/nginx/project/bls/bls_project_console/backend/logs/systemd-err.log
Environment=NODE_ENV=production
Environment=PORT=19910
[Install]
WantedBy=multi-user.target
```
保存并退出Ctrl+OEnterCtrl+X
### 步骤7创建日志目录
```bash
# 创建日志目录
mkdir -p /vol1/1000/Docker/nginx/project/bls/bls_project_console/backend/logs
# 设置日志目录权限
chmod 755 /vol1/1000/Docker/nginx/project/bls/bls_project_console/backend/logs
```
### 步骤8重新加载systemd配置
```bash
# 重新加载systemd配置
sudo systemctl daemon-reload
# 启用服务开机自启
sudo systemctl enable bls-project-console.service
```
### 步骤9启动systemd服务
```bash
# 启动服务
sudo systemctl start bls-project-console.service
# 查看服务状态
sudo systemctl status bls-project-console.service
```
如果服务启动成功,会看到类似以下输出:
```
● bls-project-console.service - BLS Project Console Backend Service
Loaded: loaded (/etc/systemd/system/bls-project-console.service; enabled; vendor preset: enabled)
Active: active (running) since Mon 2026-01-16 10:00:00 CST; 5s ago
Main PID: 12345 (node)
Tasks: 6 (limit: 4915)
Memory: 45.2M
CGroup: /system.slice/bls-project-console.service
└─12345 /usr/bin/node /vol1/1000/Docker/nginx/project/bls/bls_project_console/backend/server.js
```
如果服务启动失败,查看详细错误:
```bash
# 查看服务状态
sudo systemctl status bls-project-console.service -l
# 查看服务日志
sudo journalctl -u bls-project-console.service -n 50 --no-pager
# 查看应用日志
tail -f /vol1/1000/Docker/nginx/project/bls/bls_project_console/backend/logs/systemd-out.log
tail -f /vol1/1000/Docker/nginx/project/bls/bls_project_console/backend/logs/systemd-err.log
```
### 步骤10验证后端服务
```bash
# 检查端口监听
netstat -tlnp | grep 19910
# 测试API接口
curl http://localhost:19910/api/projects
# 查看服务进程
ps aux | grep "node server.js"
```
在浏览器中访问:
```
http://blv-rd.tech:20100/api/projects
```
应该能返回JSON数据。
## 六、Systemd服务管理命令
### 基本服务管理
```bash
# 启动服务
sudo systemctl start bls-project-console.service
# 停止服务
sudo systemctl stop bls-project-console.service
# 重启服务
sudo systemctl restart bls-project-console.service
# 重新加载配置
sudo systemctl reload bls-project-console.service
# 查看服务状态
sudo systemctl status bls-project-console.service
```
### 日志查看
```bash
# 查看实时日志
sudo journalctl -u bls-project-console.service -f
# 查看最近50行日志
sudo journalctl -u bls-project-console.service -n 50
# 查看今天的日志
sudo journalctl -u bls-project-console.service --since today
# 查看应用输出日志
tail -f /vol1/1000/Docker/nginx/project/bls/bls_project_console/backend/logs/systemd-out.log
# 查看应用错误日志
tail -f /vol1/1000/Docker/nginx/project/bls/bls_project_console/backend/logs/systemd-err.log
```
### 开机自启管理
```bash
# 启用开机自启
sudo systemctl enable bls-project-console.service
# 禁用开机自启
sudo systemctl disable bls-project-console.service
# 查看是否启用开机自启
sudo systemctl is-enabled bls-project-console.service
```
### 服务配置管理
```bash
# 重新加载systemd配置
sudo systemctl daemon-reload
# 重启服务(应用新配置)
sudo systemctl restart bls-project-console.service
# 查看服务配置文件
cat /etc/systemd/system/bls-project-console.service
```
## 七、后续更新流程
### 更新前端
```bash
# 1. 本地编译
npm run build
# 2. 上传新的 dist 文件夹内容到NAS
# 删除NAS上的旧文件上传新文件
# 3. 重启Nginx容器
docker restart nginx
# 4. 刷新浏览器Ctrl + F5
```
### 更新后端
```bash
# 1. 上传修改后的后端文件到NAS
# 2. 如果有新依赖,执行:
cd /vol1/1000/Docker/nginx/project/bls/bls_project_console/backend
npm install --production
# 3. 重启systemd服务
sudo systemctl restart bls-project-console.service
# 4. 查看服务状态
sudo systemctl status bls-project-console.service
# 5. 查看日志确认启动成功
sudo journalctl -u bls-project-console.service -n 50
```
### 更新配置文件
```bash
# 1. 更新Nginx配置
# 上传新的配置文件到 /vol1/1000/Docker/nginx/conf.d/bls_project_console.conf
# 2. 测试Nginx配置
docker exec nginx nginx -t
# 3. 重新加载Nginx配置
docker exec nginx nginx -s reload
# 4. 更新systemd服务配置
# 上传新的服务文件到 /etc/systemd/system/bls-project-console.service
# 5. 重新加载systemd配置
sudo systemctl daemon-reload
# 6. 重启服务
sudo systemctl restart bls-project-console.service
```
## 八、常见问题排查
### 问题1前端页面404
**可能原因**:
- 前端文件未正确上传
- Nginx配置中的 `root` 路径不正确
- Nginx容器内的 `/var/www` 目录映射不正确
**解决方法**:
```bash
# 1. 检查NAS上的文件是否存在
ls -la /vol1/1000/Docker/nginx/project/bls/bls_project_console
# 2. 检查Nginx容器内的文件
docker exec nginx ls -la /var/www/bls_project_console
# 3. 检查Nginx配置
docker exec nginx cat /etc/nginx/conf.d/bls_project_console.conf
# 4. 查看Nginx错误日志
docker logs nginx --tail 100
```
### 问题2API请求失败
**可能原因**:
- 后端服务未启动
- 后端端口不是19910
- Redis连接失败
- 防火墙阻止了连接
**解决方法**:
```bash
# 1. 检查systemd服务状态
sudo systemctl status bls-project-console.service
# 2. 检查后端端口
netstat -tlnp | grep 19910
# 3. 查看服务日志
sudo journalctl -u bls-project-console.service -n 50
# 4. 检查Redis连接
redis-cli ping
# 5. 测试后端API
curl http://localhost:19910/api/projects
# 6. 重启服务
sudo systemctl restart bls-project-console.service
```
### 问题3Systemd服务启动失败
**可能原因**:
- 配置文件语法错误
- 依赖服务未启动如Redis
- 文件权限不足
- 端口被占用
**解决方法**:
```bash
# 1. 查看详细错误信息
sudo systemctl status bls-project-console.service -l
# 2. 查看服务日志
sudo journalctl -u bls-project-console.service -n 100 --no-pager
# 3. 检查配置文件语法
cat /etc/systemd/system/bls-project-console.service
# 4. 检查文件权限
ls -la /vol1/1000/Docker/nginx/project/bls/bls_project_console/backend
# 5. 检查端口占用
netstat -tlnp | grep 3001
# 6. 检查Redis服务
sudo systemctl status redis
redis-cli ping
# 7. 手动启动测试
cd /vol1/1000/Docker/nginx/project/bls/bls_project_console/backend
node server.js
```
### 问题4Nginx配置加载失败
**可能原因**:
- 配置文件语法错误
- 端口20100已被占用
- 配置文件路径错误
**解决方法**:
```bash
# 1. 检查配置文件语法
docker exec nginx nginx -t
# 2. 检查端口占用
netstat -tlnp | grep 20100
# 3. 查看Nginx错误日志
docker logs nginx --tail 100
# 4. 检查配置文件内容
docker exec nginx cat /etc/nginx/conf.d/bls_project_console.conf
```
### 问题5服务无法开机自启
**可能原因**:
- 服务未启用开机自启
- 依赖服务未启动
- 网络未就绪
**解决方法**:
```bash
# 1. 启用开机自启
sudo systemctl enable bls-project-console.service
# 2. 检查是否启用
sudo systemctl is-enabled bls-project-console.service
# 3. 检查依赖服务
sudo systemctl status redis
# 4. 查看启动失败日志
sudo journalctl -u bls-project-console.service --boot -n 100
```
## 九、目录结构总结
### 本地项目结构
```
Web_BLS_ProjectConsole/
├── dist/ # 编译后的前端文件(需要上传)
├── src/
│ ├── backend/ # 后端源码(需要上传)
│ │ ├── app.js
│ │ ├── server.js
│ │ ├── routes/
│ │ └── services/
│ └── frontend/ # 前端源码
├── docs/
│ ├── nginx-deployment.conf # Nginx配置文件需要上传
│ ├── bls-project-console.service # Systemd服务配置需要上传
│ ├── deployment-guide.md # 部署指南
│ └── ai-deployment-request-guide.md
├── package.json # 依赖配置(需要上传)
└── package-lock.json # 依赖锁定文件(需要上传)
```
### NAS部署结构
```
/vol1/1000/Docker/nginx/
├── conf.d/
│ ├── weknora.conf
│ └── bls_project_console.conf # 上传的Nginx配置
└── project/bls/bls_project_console/
├── index.html # 前端入口文件
├── assets/ # 前端静态资源
│ ├── index-xxx.js
│ └── index-xxx.css
└── backend/ # 后端文件
├── app.js
├── server.js
├── routes/
├── services/
├── package.json
├── package-lock.json
├── node_modules/ # npm install后生成
└── logs/ # 日志目录
├── systemd-out.log # systemd输出日志
└── systemd-err.log # systemd错误日志
/etc/systemd/system/
└── bls-project-console.service # Systemd服务配置
```
## 十、监控和维护
### 日常监控
```bash
# 1. 检查服务状态
sudo systemctl status bls-project-console.service
# 2. 检查Nginx状态
docker ps | grep nginx
# 3. 查看服务日志
sudo journalctl -u bls-project-console.service --since today
# 4. 查看Nginx日志
docker logs nginx --since 1h
# 5. 检查磁盘空间
df -h /vol1/1000/Docker/nginx/project/bls/bls_project_console
# 6. 检查内存使用
free -h
```
### 日志轮转
创建日志轮转配置:
```bash
sudo nano /etc/logrotate.d/bls-project-console
```
添加以下内容:
```
/vol1/1000/Docker/nginx/project/bls/bls_project_console/backend/logs/*.log {
daily
rotate 7
compress
delaycompress
missingok
notifempty
create 0644 root root
postrotate
systemctl reload bls-project-console.service > /dev/null 2>&1 || true
endscript
}
```
### 性能优化
```bash
# 1. 查看服务资源使用
systemctl show bls-project-console.service -p CPUUsage,MemoryCurrent
# 2. 查看进程资源使用
top -p $(pgrep -f "node server.js")
# 3. 调整systemd服务资源限制
sudo nano /etc/systemd/system/bls-project-console.service
```
添加资源限制:
```ini
[Service]
...
MemoryLimit=512M
CPUQuota=50%
```
重新加载并重启:
```bash
sudo systemctl daemon-reload
sudo systemctl restart bls-project-console.service
```
## 十一、备份和恢复
### 备份
```bash
# 1. 备份前端文件
tar -czf bls-project-console-frontend-$(date +%Y%m%d).tar.gz \
/vol1/1000/Docker/nginx/project/bls/bls_project_console
# 2. 备份后端文件
tar -czf bls-project-console-backend-$(date +%Y%m%d).tar.gz \
/vol1/1000/Docker/nginx/project/bls/bls_project_console/backend
# 3. 备份配置文件
tar -czf bls-project-console-config-$(date +%Y%m%d).tar.gz \
/vol1/1000/Docker/nginx/conf.d/bls_project_console.conf \
/etc/systemd/system/bls-project-console.service
```
### 恢复
```bash
# 1. 恢复前端文件
tar -xzf bls-project-console-frontend-YYYYMMDD.tar.gz -C /
# 2. 恢复后端文件
tar -xzf bls-project-console-backend-YYYYMMDD.tar.gz -C /
# 3. 恢复配置文件
tar -xzf bls-project-console-config-YYYYMMDD.tar.gz -C /
# 4. 重新加载systemd配置
sudo systemctl daemon-reload
# 5. 重启服务
sudo systemctl restart bls-project-console.service
docker restart nginx
```
## 十二、安全建议
1. **文件权限**
```bash
# 设置适当的文件权限
chmod 755 /vol1/1000/Docker/nginx/project/bls/bls_project_console
chmod 644 /vol1/1000/Docker/nginx/project/bls/bls_project_console/backend/*.js
```
2. **防火墙配置**
```bash
# 只允许必要的端口
sudo ufw allow 20100/tcp
sudo ufw allow 19910/tcp
sudo ufw enable
```
3. **定期更新**
```bash
# 定期更新Node.js和npm
npm install -g npm@latest
```
4. **日志监控**
- 定期检查日志文件大小
- 设置日志轮转
- 监控异常错误
5. **备份策略**
- 定期备份配置文件
- 定期备份重要数据
- 测试恢复流程