# 通信技术部前后端一键部署说明 本仓库包含两个子工程: - `department-api`:Node.js + Express 后端,提供 API 与静态资源 - `department-web`:React 前端,构建后由后端托管 已提供一键部署脚本 `deploy.sh` 和 systemd 服务 `department-api.service`,用于实现: - 一键安装依赖 + 构建前端 + 安装/更新服务 - 服务后台常驻运行 - 开机自启与异常自动重启 ## 环境要求 - 操作系统:常见 Linux 发行版(支持 systemd,如 Ubuntu / CentOS 7+) - 已安装: - Node.js(建议 16+) - npm - bash - systemd(默认存在于大多数现代 Linux) - 拥有 sudo 权限的用户 ## 首次部署步骤 1. 克隆或拷贝本项目到服务器,例如: ```bash cd /media/media_14t_sda1 git clone web # 若已存在则略过 cd web ``` 2. 检查并按需修改 systemd 服务配置(可选但推荐): - 文件:`department-api.service` - 重点字段: - `WorkingDirectory`:后端目录,默认 `/media/media_14t_sda1/web/department-api` - `Environment=PORT=3001`:服务端口 - `Environment=JWT_SECRET=change-me`:JWT 密钥(生产环境务必改成强随机字符串) 3. 运行一键部署脚本: ```bash cd /media/media_14t_sda1/web bash deploy.sh ``` 脚本主要做的事情: - 安装后端依赖:`department-api` - 安装并构建前端:`department-web` → `department-web/build` - 将 `department-api.service` 拷贝到 `/etc/systemd/system/` - 执行: - `sudo systemctl daemon-reload` - `sudo systemctl enable department-api.service`(设置开机自启) - `sudo systemctl restart department-api.service`(启动/重启服务) > 运行过程中会需要输入 sudo 密码,这是正常的。 4. 验证服务状态: ```bash sudo systemctl status department-api.service ``` 如果看到 `Active: active (running)`,表示服务已在后台运行。 5. 访问地址: - 前端页面与 API 统一入口: - `http://<服务器IP>:3001` - 常见路径: - 前端 SPA:根路径 `/` - API:`/api/...` - 静态资料:`/uploads/...` ## 日常更新代码的流程 ### 场景一:有前端改动(推荐统一用一键脚本) 1. 在服务器上更新代码,例如: ```bash cd /media/media_14t_sda1/web git pull # 或者其他同步方式 ``` 2. 重新一键部署(重新安装依赖 + 构建前端 + 重启服务): ```bash cd /media/media_14t_sda1/web bash deploy.sh ``` 执行完成后: - 新版本前端构建产物会覆盖旧的 `department-web/build` - systemd 服务会自动重启,加载最新代码 ### 场景二:仅后端小改动(无需重建前端) 如果只改了后端逻辑,且不想每次都重新 npm install / build,可以: 1. 同步代码后,直接重启服务: ```bash sudo systemctl restart department-api.service ``` 2. 查看状态确认: ```bash sudo systemctl status department-api.service ``` ## 查看日志与排错 查看最近 100 行日志: ```bash sudo journalctl -u department-api.service -n 100 ``` 实时滚动查看日志: ```bash sudo journalctl -u department-api.service -f ``` 若服务未能启动,可重点检查: - Node.js 是否安装、版本是否太旧 - `department-api.service` 中的 `WorkingDirectory` 路径是否与你实际部署路径一致 - 端口是否被占用(如已有其他服务占用 3001) - `JWT_SECRET` 是否为空或包含非法字符(推荐使用简单的字母数字组合) ## 停止服务与取消开机自启 - 停止服务(临时): ```bash sudo systemctl stop department-api.service ``` - 取消开机自启: ```bash sudo systemctl disable department-api.service ``` ## 访问入口总结 - 后端 + 前端统一服务:`department-api`(systemd 管理) - 默认端口:`3001` - 部署 / 更新统一命令: ```bash cd /media/media_14t_sda1/web bash deploy.sh ``` 如果后续你调整了目录或端口,只需要同步修改: - `department-api.service` 中的 `WorkingDirectory`、`PORT` 等环境变量 - 如有需要,也可以把服务名从 `department-api.service` 改成公司内部标准命名。