dingdanquanliucheng/域名部署配置.md
2026-06-14 16:20:04 +08:00

284 lines
9.2 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.

# 域名部署配置文档
> **使用宝塔面板部署?** 请直接参考 [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` | 新建 | 本文档 |