# 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+O,Enter,Ctrl+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+O,Enter,Ctrl+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 ``` ### 问题2:API请求失败 **可能原因**: - 后端服务未启动 - 后端端口不是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 ``` ### 问题3:Systemd服务启动失败 **可能原因**: - 配置文件语法错误 - 依赖服务未启动(如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 ``` ### 问题4:Nginx配置加载失败 **可能原因**: - 配置文件语法错误 - 端口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. **备份策略** - 定期备份配置文件 - 定期备份重要数据 - 测试恢复流程