Files
Web_BAI_Manage_ApiServer/docs/deployment.md
XuJiacheng 72e974672e feat: 实现微信小程序后端接口与用户认证系统
新增微信登录/注册合一接口、资料完善接口和token刷新接口
重构用户服务层,支持自动维护用户类型和资料完整度
引入JWT认证中间件和请求验证中间件
更新文档与测试用例,支持dist构建部署
2026-03-20 18:32:58 +08:00

453 lines
8.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 部署文档
## 部署环境
- Ubuntu 20.04 LTS+
- 宝塔面板 7.0+
- Docker
- Node.js 22+
## 部署架构
```
┌───────────────┐
│ 宝塔面板 │
└───────────────┘
┌───────────────────────┐
│ Nginx (反向代理) │
└───────────────────────┘
├───────────────┐
▼ ▼
┌───────────────┐ ┌───────────────┐
│ 前端容器 │ │ 后端容器 │
└───────────────┘ └───────────────┘
│ │
└───────────────┘
┌────────────────┐
│ Pocketbase DB │
└────────────────┘
```
## 准备工作
### 1. 安装宝塔面板
```bash
# 安装宝塔面板
wget -O install.sh http://download.bt.cn/install/install-ubuntu_6.0.sh && sudo bash install.sh
# 安装完成后,根据提示访问面板地址并设置账号密码
```
### 2. 安装Docker
在宝塔面板中:
1. 打开「软件商店」
2. 搜索「Docker」并安装
3. 等待安装完成
### 3. 安装Node.js
在宝塔面板中:
1. 打开「软件商店」
2. 搜索「Node.js」并安装对应版本
3. 等待安装完成
## 后端部署
后端建议采用 **dist 发布目录部署**,即:
1. 在构建机执行 `npm run build`
2. 生成 `back-end/dist/` 发布产物
3. 服务器仅部署 `dist/``package.json``package-lock.json``.env`
4. 服务器执行 `npm install --omit=dev`
5. 服务器执行 `npm start`
### 1. 创建Dockerfile
`back-end` 目录创建 `Dockerfile` 文件:
```dockerfile
FROM node:22-alpine AS build
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build
FROM node:22-alpine AS production
WORKDIR /app
COPY --from=build /app/package*.json ./
RUN npm install --omit=dev
COPY --from=build /app/dist ./dist
EXPOSE 3000
CMD ["node", "dist/src/index.js"]
```
### 1.1 本地构建与上传发布包
`back-end/` 目录执行:
```bash
npm install
npm run lint
npm run test
npm run build
```
构建成功后会生成:
```text
back-end/dist/
src/
spec/
package.json
package-lock.json
.env
eslint.config.js
```
如果你采用服务器源码分离部署,建议上传以下内容到服务器:
- `dist/`
- `package.json`
- `package-lock.json`
- `.env`
然后在服务器执行:
```bash
npm install --omit=dev
npm start
```
### 2. 创建docker-compose.yml
在项目根目录创建 `docker-compose.yml` 文件:
```yaml
version: '3.8'
services:
backend:
build:
context: ./back-end
dockerfile: Dockerfile
ports:
- "3000:3000"
environment:
- NODE_ENV=production
- PORT=3000
- DB_HOST=db
- DB_PORT=8080
depends_on:
- db
restart: always
frontend:
build:
context: ./front-end
dockerfile: Dockerfile
ports:
- "80:80"
restart: always
db:
image: pocketbase/pocketbase:latest
ports:
- "8080:8080"
volumes:
- ./data:/pb_data
restart: always
```
### 3. 前端Dockerfile
`front-end` 目录创建 `Dockerfile` 文件:
```dockerfile
FROM node:22-alpine as build
WORKDIR /app
COPY package*.json ./
RUN npm install --legacy-peer-deps
COPY . .
RUN npm run build
FROM nginx:alpine
COPY --from=build /app/dist /usr/share/nginx/html
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
```
## 一键部署脚本
### 1. 创建部署脚本
在项目根目录创建 `deploy.sh` 文件:
```bash
#!/bin/bash
# 部署脚本
echo "开始部署BAI管理系统..."
# 停止并移除旧容器
echo "停止并移除旧容器..."
docker-compose down
# 构建并启动新容器
echo "构建并启动新容器..."
docker-compose up -d --build
# 查看容器状态
echo "查看容器状态..."
docker ps
echo "部署完成!"
echo "前端访问地址: http://$(hostname -I | awk '{print $1}')"
echo "后端API地址: http://$(hostname -I | awk '{print $1}'):3000"
echo "Pocketbase管理地址: http://$(hostname -I | awk '{print $1}'):8080/_/"
```
### 2. 赋予脚本执行权限
```bash
chmod +x deploy.sh
```
### 3. 执行部署脚本
```bash
./deploy.sh
```
## 宝塔面板配置
### 1. 添加网站
1. 打开宝塔面板
2. 点击「网站」→「添加站点」
3. 填写域名信息(如果有域名)
4. 选择「纯静态」网站类型
5. 点击「提交」
### 2. 配置反向代理
1. 进入网站设置
2. 点击「反向代理」→「添加反向代理」
3. 配置前端代理:
- 代理名称frontend
- 目标URLhttp://localhost:80
- 发送域名:`bai-api.blv-oa.com`(如前后端分域,请按实际前端域名填写)
4. 配置后端代理:
- 代理名称backend
- 目标URLhttp://localhost:3000
- 发送域名:`bai-api.blv-oa.com`
- 路径:/api
5. 点击「保存」
### 3. 配置SSL证书必须
1. 进入网站设置
2. 点击「SSL」→「Let's Encrypt」
3. 申请并安装SSL证书
4. 开启「强制HTTPS」
5. 确保域名 `bai-api.blv-oa.com` 已正确解析到服务器公网 IP
## 环境变量配置
### 后端环境变量
`back-end/.env` 文件中配置:
```env
# Server Configuration
PORT=3000
NODE_ENV=production
APP_PROTOCOL=https
APP_DOMAIN=bai-api.blv-oa.com
APP_BASE_URL=https://bai-api.blv-oa.com
# Database Configuration
DB_HOST=db
DB_PORT=8080
DB_NAME=bai_management
# JWT Configuration
JWT_SECRET=your_jwt_secret_key
JWT_EXPIRES_IN=24h
# CORS Configuration
CORS_ORIGIN=https://bai-api.blv-oa.com
```
### 前端环境变量
`front-end/.env.production` 文件中配置:
```env
VUE_APP_BASE_URL=https://bai-api.blv-oa.com/api
VUE_APP_TITLE=BAI管理系统
VUE_APP_VERSION=1.0.0
```
## 域名解析与 HTTPS 部署建议
正式环境建议按以下方式部署:
1. 将域名 `bai-api.blv-oa.com` 的 DNS A 记录指向服务器公网 IP
2. 宝塔/Nginx 为该域名签发并启用 SSL 证书
3. Nginx 对外暴露 `443`,再反向代理到容器内 `backend:3000`
4. 前端生产环境接口地址统一使用:`https://bai-api.blv-oa.com/api`
5. 后端对外公开地址统一使用 `APP_BASE_URL=https://bai-api.blv-oa.com`
## 数据库配置
### Pocketbase设置
1. 访问 Pocketbase 管理界面http://服务器IP:8080/_/
2. 创建管理员账号
3. 创建必要的集合:
- users (用户)
- data (数据)
- videos (视频)
- logs (日志)
## 监控与维护
### 后端发布命令
后端推荐命令:
```bash
# 构建发布产物
npm run build
# 生产启动
npm start
```
### 查看日志
```bash
# 查看后端日志
docker logs -f backend
# 查看前端日志
docker logs -f frontend
# 查看数据库日志
docker logs -f db
```
### 备份数据
```bash
# 备份Pocketbase数据
docker cp db:/pb_data ./backup
# 恢复Pocketbase数据
docker cp ./backup db:/pb_data
```
### 升级项目
1. 拉取最新代码
2. 执行部署脚本:`./deploy.sh`
## 常见问题
### 1. 容器启动失败
检查容器日志:
```bash
docker logs -f 容器名称
```
### 2. 访问接口报错
- 检查反向代理配置
- 检查后端服务是否正常运行
- 检查数据库连接是否正常
### 3. 前端页面空白
- 检查前端容器是否正常运行
- 检查Nginx配置
- 检查API地址配置是否正确
### 4. 数据库连接失败
- 检查数据库容器是否正常运行
- 检查数据库连接配置
- 检查网络连接
## 性能优化
### 1. 前端优化
- 启用Gzip压缩
- 静态资源缓存
- 代码分割
- 图片优化
### 2. 后端优化
- 使用PM2进程管理
- 数据库索引优化
- 缓存策略
- 负载均衡
### 3. 服务器优化
- 调整Docker内存限制
- 配置Nginx缓存
- 启用HTTPS
- 定期清理日志
## 安全措施
### 1. 服务器安全
- 配置防火墙
- 禁用root登录
- 使用SSH密钥认证
- 定期更新系统
### 2. 应用安全
- 使用HTTPS
- 密码加密存储
- 输入验证
- 防止SQL注入
- 防止XSS攻击
### 3. 数据安全
- 定期备份数据
- 数据加密
- 访问控制
- 审计日志
## 总结
本部署方案采用Docker容器化部署实现了前后端分离的架构支持一键部署和自动化管理。通过宝塔面板的反向代理功能实现了域名访问和SSL证书配置为系统提供了安全、稳定的运行环境。