init commit
This commit is contained in:
167
README.md
Normal file
167
README.md
Normal 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
17
department-api.service
Normal 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
12
deploy.sh
Normal 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
|
||||
Reference in New Issue
Block a user