同站点部署说明.md
5.2 KB
同站点部署说明(前端 + API 部署在一起)
📋 部署方案
将前端静态文件放在 .NET API 的 wwwroot 目录下,由 ASP.NET Core 统一提供静态文件和 API 服务。
优势:
- ✅ 只需要一个服务,简化部署
- ✅ 不需要配置 CORS(同源)
- ✅ 统一域名和端口
- ✅ 更简单的 Nginx 配置
🚀 部署步骤
1. 打包前端
cd frontend
npm run build
前端会打包到 frontend/dist/ 目录。
2. 创建 wwwroot 目录
在 DouyinLogistics.API/publish/ 目录下创建 wwwroot 目录:
cd DouyinLogistics.API/publish
mkdir wwwroot
3. 复制前端文件到 wwwroot
将前端打包后的文件复制到 wwwroot 目录:
# 复制所有前端文件
cp -r frontend/dist/* DouyinLogistics.API/publish/wwwroot/
4. 上传到服务器
将整个 publish 目录上传到服务器,例如:
/www/wwwroot/douyin-api/
目录结构应该是:
/www/wwwroot/douyin-api/
├── DouyinLogistics.API.dll
├── appsettings.json
├── wwwroot/ ← 前端文件在这里
│ ├── index.html
│ ├── assets/
│ │ ├── index-xxx.css
│ │ └── index-xxx.js
│ └── favicon.ico
└── ... (其他 DLL 文件)
5. 配置 Nginx
在宝塔面板 → 网站 → douyin.ponggame.cn → 设置 → 反向代理,配置:
- 目标URL:
http://127.0.0.1:5000 - 发送域名:
$host - 已启用: ✅
不需要配置静态文件路径,所有请求都转发给 .NET API,由 API 处理静态文件和 API 请求。
6. 启动服务
使用 systemd 或 Supervisor 启动服务:
dotnet DouyinLogistics.API.dll --urls http://127.0.0.1:5000
7. 测试访问
- 前端页面:
https://douyin.ponggame.cn/ - API 接口:
https://douyin.ponggame.cn/api/orders - Swagger:
https://douyin.ponggame.cn/swagger
🔧 路由规则
API 路由
- 所有
/api/* 请求 → 由Controllers处理 - 例如:
/api/orders,/api/auth/authorize
静态文件路由
- 所有
/assets/*请求 → 从wwwroot/assets/提供 - 例如:
/assets/index-xxx.js,/assets/index-xxx.css
前端路由(Vue Router)
- 所有其他请求 → 返回
wwwroot/index.html - 例如:
/,/orders,/about - Vue Router 会在前端处理这些路由
📝 自动化脚本
创建部署包脚本(同站点)
创建 创建同站点部署包.sh:
#!/bin/bash
echo "=========================================="
echo "创建同站点部署包(前端 + API)..."
echo "=========================================="
# 1. 打包前端
echo "📦 打包前端..."
cd frontend
npm run build
cd ..
# 2. 打包后端
echo "📦 打包后端..."
cd DouyinLogistics.API
dotnet publish -c Release -o ./publish --self-contained false
cd ..
# 3. 创建 wwwroot 目录
echo "📁 创建 wwwroot 目录..."
mkdir -p DouyinLogistics.API/publish/wwwroot
# 4. 复制前端文件到 wwwroot
echo "📋 复制前端文件到 wwwroot..."
cp -r frontend/dist/* DouyinLogistics.API/publish/wwwroot/
# 5. 创建部署包
DEPLOY_DIR="deploy_single_site_$(date +%Y%m%d_%H%M%S)"
mkdir -p "$DEPLOY_DIR"
cp -r DouyinLogistics.API/publish/* "$DEPLOY_DIR/"
echo "✅ 部署包创建完成!"
echo ""
echo "部署包位置: $DEPLOY_DIR"
echo ""
echo "目录结构:"
echo " $DEPLOY_DIR/"
echo " ├── DouyinLogistics.API.dll"
echo " ├── appsettings.json"
echo " ├── wwwroot/ ← 前端文件"
echo " │ ├── index.html"
echo " │ └── assets/"
echo " └── ... (其他文件)"
echo ""
echo "请将 $DEPLOY_DIR 目录上传到服务器!"
⚠️ 注意事项
1. 前端 API 地址
前端已配置为使用相对路径 /api,会自动适配当前域名。
如果需要修改,可以在 frontend/.env.production 中设置:
VITE_API_BASE_URL=/api
2. Swagger 访问
Swagger 仍然可以通过 /swagger 访问,但建议在生产环境关闭。
3. 静态文件缓存
浏览器可能会缓存静态文件,更新前端后需要清除缓存或使用版本号。
4. 文件权限
确保 wwwroot 目录有读取权限:
chmod -R 755 /www/wwwroot/douyin-api/wwwroot
🔄 更新部署
更新前端
- 重新打包:
npm run build - 复制文件:
cp -r frontend/dist/* DouyinLogistics.API/publish/wwwroot/ - 上传到服务器(覆盖旧文件)
- 重启服务:
sudo systemctl restart douyin-api
更新后端
- 重新打包:
dotnet publish -c Release -o ./publish - 复制前端文件到新的 publish/wwwroot
- 上传到服务器(覆盖旧文件)
- 重启服务:
sudo systemctl restart douyin-api
🧪 验证部署
- 访问首页:
https://douyin.ponggame.cn/应该显示前端页面 - 访问 API:
https://douyin.ponggame.cn/api/orders应该返回 JSON 数据 - 前端路由:
https://douyin.ponggame.cn/orders应该显示订单列表页面 - 静态资源: 浏览器开发者工具 → Network,检查 CSS/JS 文件是否正常加载
部署完成后,前端和 API 都在同一个站点下,无需配置 CORS! ✅