init commit

This commit is contained in:
huanglinhuan
2026-01-15 15:38:35 +08:00
commit 6a54ba34ea
3 changed files with 196 additions and 0 deletions

167
README.md Normal file
View File

@@ -0,0 +1,167 @@
# 通信技术部前后端一键部署说明
本仓库包含两个子工程:
- `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 <your-repo> 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` 改成公司内部标准命名。

17
department-api.service Normal file
View File

@@ -0,0 +1,17 @@
[Unit]
Description=Department API and Web
After=network.target
[Service]
Type=simple
WorkingDirectory=/media/media_14t_sda1/web/department-api
ExecStart=/usr/bin/env node server.js
Restart=always
RestartSec=5
Environment=NODE_ENV=production
Environment=PORT=3001
Environment=JWT_SECRET=change-me
[Install]
WantedBy=multi-user.target

12
deploy.sh Normal file
View File

@@ -0,0 +1,12 @@
#!/usr/bin/env bash
set -e
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
cd "$ROOT_DIR/department-api"
npm install
cd "$ROOT_DIR/department-web"
npm install
npm run build
sudo cp "$ROOT_DIR/department-api.service" /etc/systemd/system/department-api.service
sudo systemctl daemon-reload
sudo systemctl enable department-api.service
sudo systemctl restart department-api.service