dingdanquanliucheng/域名部署配置.md

284 lines
9.2 KiB
Markdown
Raw Normal View History

2026-06-14 16:20:04 +08:00
# 域名部署配置文档
> **使用宝塔面板部署?** 请直接参考 [deploy/宝塔部署指南.md](deploy/宝塔部署指南.md),本文档为详细配置说明。
## 域名规划
| 域名 | 用途 | 说明 |
|------|------|------|
| `dda.gaowenbu.cn` | 管理员端 (web-admin) | Vue 3 前端 + API 反向代理 |
| `ddy.gaowenbu.cn` | 业务员端 (web-sales) | Vue 3 前端 + API 反向代理 |
| 后端服务 | FastAPI API 服务 | 监听 `127.0.0.1:8000`,由 Nginx 代理 |
## 架构说明
```
用户浏览器
├── dda.gaowenbu.cn ──→ Nginx ──→ web-admin/dist (静态文件)
│ │
│ └──→ /api/* ──→ FastAPI (127.0.0.1:8000)
└── ddy.gaowenbu.cn ──→ Nginx ──→ web-sales/dist (静态文件)
└──→ /api/* ──→ FastAPI (127.0.0.1:8000)
微信小程序 ──→ dda.gaowenbu.cn/api/* ──→ Nginx ──→ FastAPI
```
## 一、已修改的配置文件
### 1.1 后端 `backend/.env`(已修改)
| 配置项 | 开发环境值 | 生产环境值 | 说明 |
|--------|-----------|-----------|------|
| `APP_ENV` | `dev` | `prod` | ✅ 已改为 prod |
| `BASE_URL` | _(无)_ | `https://dda.gaowenbu.cn` | ✅ 新增,用于生成文件绝对 URL |
| `CORS_ALLOW_ORIGINS` | `http://localhost:5173,http://localhost:5174` | `https://dda.gaowenbu.cn,https://ddy.gaowenbu.cn` | ✅ 已改为生产域名 |
| `AUTH_TOKEN_STORE_PATH` | `D:/tmp/...` (Windows) | `/tmp/order-flow-auth/revoked_tokens.json` | ✅ 已改为 Linux 路径 |
| `LOCAL_UPLOAD_DIR` | _(无)_ | `/tmp/order-flow-oss/local-uploads` | ✅ 新增Linux 路径 |
### 1.2 后端 `backend/app/core/config.py`(已修改)
新增两个配置字段:
- `base_url: str` — 后端公网访问地址,别名 `BASE_URL`
- `local_upload_dir: str` — 本地上传目录,别名 `LOCAL_UPLOAD_DIR`
### 1.3 后端 `backend/app/main.py`(已修改)
本地上传目录从硬编码 `D:/tmp/...` 改为从 `settings.local_upload_dir` 读取。
### 1.4 后端 `backend/app/api/files.py`(已修改)
文件上传返回的 URL 从硬编码 `http://127.0.0.1:8000/uploads/...` 改为从 `settings.base_url` 读取。
### 1.5 前端 `frontend/web-admin/.env`(新建)
```env
VITE_API_BASE_URL=https://dda.gaowenbu.cn
VITE_ENABLE_DEMO_FALLBACK=false
```
### 1.6 前端 `frontend/web-sales/.env`(新建)
```env
VITE_API_BASE_URL=https://ddy.gaowenbu.cn
VITE_ENABLE_DEMO_FALLBACK=false
```
### 1.7 前端 Vue 组件(已修改 4 个文件)
以下文件从硬编码 `http://127.0.0.1:8000` 改为导入 `config.js``apiBaseUrl`
| 文件 | 原始写法 | 修改后 |
|------|---------|--------|
| `web-admin/src/views/DriverPage.vue` | `import.meta.env.VITE_API_BASE_URL \|\| 'http://127.0.0.1:8000'` | `import { apiBaseUrl } from '../config'` |
| `web-admin/src/views/DriverTaskDetailPage.vue` | `import.meta.env.VITE_API_BASE_URL \|\| 'http://127.0.0.1:8000'` | `import { apiBaseUrl } from '../config'` |
| `web-admin/src/views/OrderTrackingPage.vue` | `import.meta.env.VITE_API_BASE_URL \|\| 'http://127.0.0.1:8000'` | `import { apiBaseUrl } from '../config'` |
| `web-sales/src/views/OrderFormPage.vue` | `import.meta.env.VITE_API_BASE_URL \|\| "http://localhost:8000"` | `import { apiBaseUrl } from '../config'` |
### 1.8 微信小程序 `frontend/mini-app/config.js`(已修改)
```js
// 开发环境: const apiBaseUrl = "http://127.0.0.1:8000";
// 生产环境:
const apiBaseUrl = "https://dda.gaowenbu.cn";
```
---
## 二、Nginx 配置(部署到服务器)
已生成两份 Nginx 配置文件,位于 `deploy/nginx/` 目录:
### 2.1 部署步骤
```bash
# 1. 安装 Nginx如未安装
sudo apt update && sudo apt install -y nginx
# 2. 复制配置文件
sudo cp deploy/nginx/dda.gaowenbu.cn.conf /etc/nginx/sites-available/
sudo cp deploy/nginx/ddy.gaowenbu.cn.conf /etc/nginx/sites-available/
# 3. 创建软链接启用站点
sudo ln -sf /etc/nginx/sites-available/dda.gaowenbu.cn.conf /etc/nginx/sites-enabled/
sudo ln -sf /etc/nginx/sites-available/ddy.gaowenbu.cn.conf /etc/nginx/sites-enabled/
# 4. 删除默认站点(可选)
sudo rm -f /etc/nginx/sites-enabled/default
# 5. 测试配置
sudo nginx -t
# 6. 重载 Nginx
sudo systemctl reload nginx
```
### 2.2 前端文件部署路径
```
/var/www/order-flow/
├── web-admin/dist/ ← 管理员端构建产物
└── web-sales/dist/ ← 业务员端构建产物
```
部署前端文件:
```bash
# 创建目录
sudo mkdir -p /var/www/order-flow/web-admin/dist
sudo mkdir -p /var/www/order-flow/web-sales/dist
# 复制构建产物(在本地构建后上传,或在服务器上构建)
# 方式一:本地构建后 scp 上传
scp -r frontend/web-admin/dist/* user@server:/var/www/order-flow/web-admin/dist/
scp -r frontend/web-sales/dist/* user@server:/var/www/order-flow/web-sales/dist/
# 方式二:在服务器上构建
cd frontend/web-admin && npm install && npm run build
cd frontend/web-sales && npm install && npm run build
```
### 2.3 后端部署
```bash
# 安装 Python 依赖
cd backend && pip install -r requirements.txt
# 运行数据库迁移
alembic upgrade head
# 启动后端服务(推荐用 systemd 管理)
uvicorn backend.app.main:app --host 127.0.0.1 --port 8000
```
### 2.4 后端 systemd 服务文件(参考)
```ini
# /etc/systemd/system/order-flow.service
[Unit]
Description=Order Flow Backend
After=network.target mysql.service
[Service]
Type=simple
User=www-data
WorkingDirectory=/var/www/order-flow
EnvironmentFile=/var/www/order-flow/backend/.env
ExecStart=/usr/local/bin/uvicorn backend.app.main:app --host 127.0.0.1 --port 8000
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
```
```bash
sudo systemctl daemon-reload
sudo systemctl enable order-flow
sudo systemctl start order-flow
```
---
## 三、HTTPS 配置(推荐)
使用 Let's Encrypt 免费证书:
```bash
# 安装 certbot
sudo apt install -y certbot python3-certbot-nginx
# 申请证书并自动配置 HTTPS
sudo certbot --nginx -d dda.gaowenbu.cn -d ddy.gaowenbu.cn
# 证书自动续期
sudo certbot renew --dry-run
```
---
## 四、部署前检查清单
### 服务器环境
- [ ] Nginx 已安装并运行
- [ ] Python 3.10+ 已安装
- [ ] MySQL 数据库可访问(当前配置 `fn.taisan.online:33306`
- [ ] Redis 已安装(如需要)
### DNS 解析
- [ ] `dda.gaowenbu.cn` A 记录指向服务器 IP
- [ ] `ddy.gaowenbu.cn` A 记录指向服务器 IP
### 后端配置
- [ ] `backend/.env``APP_ENV=prod`
- [ ] `backend/.env``BASE_URL=https://dda.gaowenbu.cn`
- [ ] `backend/.env``CORS_ALLOW_ORIGINS` 包含两个域名
- [ ] `backend/.env``SECRET_KEY` 已修改为随机强密钥
- [ ] `backend/.env` 中数据库连接信息正确
- [ ] `AUTH_TOKEN_STORE_PATH` 指向 Linux 有效路径
- [ ] `LOCAL_UPLOAD_DIR` 指向 Linux 有效路径
### 前端配置
- [ ] `frontend/web-admin/.env``VITE_API_BASE_URL=https://dda.gaowenbu.cn`
- [ ] `frontend/web-sales/.env``VITE_API_BASE_URL=https://ddy.gaowenbu.cn`
- [ ] 前端已重新构建 (`npm run build`)
- [ ] 构建产物已部署到 `/var/www/order-flow/`
### 微信小程序
- [ ] 微信公众平台后台配置合法域名 `dda.gaowenbu.cn`
- [ ] `frontend/mini-app/config.js``apiBaseUrl` 已更新
- [ ] 小程序已重新提交审核
### 安全
- [ ] `backend/.env` 不可被外部直接访问
- [ ] 已配置 HTTPSLet's Encrypt 或其他证书)
- [ ] 防火墙仅开放 80/443 端口
- [ ] `.env` 文件权限设为 `600`(仅 owner 可读写)
---
## 五、本地开发环境恢复
如果需要恢复本地开发环境,将以下配置改回:
```bash
# backend/.env
APP_ENV=dev
BASE_URL=http://127.0.0.1:8000
CORS_ALLOW_ORIGINS=http://localhost:5173,http://localhost:5174
AUTH_TOKEN_STORE_PATH=D:/tmp/order-flow-auth/revoked_tokens.json
LOCAL_UPLOAD_DIR=D:/tmp/order-flow-oss/local-uploads
# frontend/web-admin/.env
VITE_API_BASE_URL=http://127.0.0.1:8000
# frontend/web-sales/.env
VITE_API_BASE_URL=http://127.0.0.1:8000
# frontend/mini-app/config.js
const apiBaseUrl = "http://127.0.0.1:8000";
```
---
## 六、修改文件总览
| 文件 | 操作 | 说明 |
|------|------|------|
| `backend/.env` | 修改 | APP_ENV、BASE_URL、CORS、路径配置 |
| `backend/.env.example` | 修改 | 新增 BASE_URL、LOCAL_UPLOAD_DIR 文档 |
| `backend/app/core/config.py` | 修改 | 新增 base_url、local_upload_dir 字段 |
| `backend/app/main.py` | 修改 | 本地上传目录改用配置 |
| `backend/app/api/files.py` | 修改 | 文件 URL 改用配置 |
| `frontend/web-admin/.env` | 新建 | 生产环境 API 地址 |
| `frontend/web-sales/.env` | 新建 | 生产环境 API 地址 |
| `frontend/web-admin/src/views/DriverPage.vue` | 修改 | 使用 config.js |
| `frontend/web-admin/src/views/DriverTaskDetailPage.vue` | 修改 | 使用 config.js |
| `frontend/web-admin/src/views/OrderTrackingPage.vue` | 修改 | 使用 config.js |
| `frontend/web-sales/src/views/OrderFormPage.vue` | 修改 | 使用 config.js |
| `frontend/mini-app/config.js` | 修改 | 生产 API 地址 |
| `deploy/nginx/dda.gaowenbu.cn.conf` | 新建 | 管理员端 Nginx 配置 |
| `deploy/nginx/ddy.gaowenbu.cn.conf` | 新建 | 业务员端 Nginx 配置 |
| `域名部署配置.md` | 新建 | 本文档 |