chore(docs): 添加项目完整文档与快速启动指南
- 新增详细的 Fengling 项目文档,涵盖项目结构、技术栈、环境准备 - 包含后端与前端开发指南与规范说明 - 提供丰富的第三方组件安装及 Docker 容器部署示例 - 描述本地开发流程、测试策略及调试技巧 - 详细介绍生产环境部署、CI/CD 集成及云平台部署方案 - 增加监控、性能优化及故障排查的最佳实践 - 新建管理后台前端 Dockerfile 和对应 nginx 配置文件 - 新增项目快速启动的 README 指南,方便开发者快速上手
This commit is contained in:
parent
d88ec60ef4
commit
62f050a4f1
33
Frontend/Fengling.Backend.Admin/Dockerfile
Normal file
33
Frontend/Fengling.Backend.Admin/Dockerfile
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
# Frontend/Fengling.Backend.Admin/Dockerfile
|
||||||
|
FROM node:18-alpine AS build
|
||||||
|
|
||||||
|
# 设置工作目录
|
||||||
|
WORKDIR /app
|
||||||
|
|
||||||
|
# 复制 package 文件
|
||||||
|
COPY package.json pnpm-lock.yaml ./
|
||||||
|
|
||||||
|
# 安装 pnpm 和依赖
|
||||||
|
RUN npm install -g pnpm
|
||||||
|
RUN pnpm install --frozen-lockfile
|
||||||
|
|
||||||
|
# 复制源代码
|
||||||
|
COPY . .
|
||||||
|
|
||||||
|
# 构建应用
|
||||||
|
RUN pnpm build
|
||||||
|
|
||||||
|
# 生产阶段
|
||||||
|
FROM nginx:alpine AS runtime
|
||||||
|
|
||||||
|
# 复制构建产物
|
||||||
|
COPY --from=build /app/dist /usr/share/nginx/html
|
||||||
|
|
||||||
|
# 复制 nginx 配置
|
||||||
|
COPY nginx.conf /etc/nginx/nginx.conf
|
||||||
|
|
||||||
|
# 暴露端口
|
||||||
|
EXPOSE 80
|
||||||
|
|
||||||
|
# 启动 nginx
|
||||||
|
CMD ["nginx", "-g", "daemon off;"]
|
||||||
62
Frontend/Fengling.Backend.Admin/nginx.conf
Normal file
62
Frontend/Fengling.Backend.Admin/nginx.conf
Normal file
@ -0,0 +1,62 @@
|
|||||||
|
# nginx.conf for Vue applications
|
||||||
|
events {
|
||||||
|
worker_connections 1024;
|
||||||
|
}
|
||||||
|
|
||||||
|
http {
|
||||||
|
include /etc/nginx/mime.types;
|
||||||
|
default_type application/octet-stream;
|
||||||
|
|
||||||
|
# 日志格式
|
||||||
|
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
|
||||||
|
'$status $body_bytes_sent "$http_referer" '
|
||||||
|
'"$http_user_agent" "$http_x_forwarded_for"';
|
||||||
|
|
||||||
|
access_log /var/log/nginx/access.log main;
|
||||||
|
error_log /var/log/nginx/error.log;
|
||||||
|
|
||||||
|
sendfile on;
|
||||||
|
tcp_nopush on;
|
||||||
|
tcp_nodelay on;
|
||||||
|
keepalive_timeout 65;
|
||||||
|
types_hash_max_size 2048;
|
||||||
|
|
||||||
|
# Gzip 压缩
|
||||||
|
gzip on;
|
||||||
|
gzip_vary on;
|
||||||
|
gzip_min_length 1024;
|
||||||
|
gzip_types text/plain text/css text/xml text/javascript application/javascript application/xml+rss application/json;
|
||||||
|
|
||||||
|
server {
|
||||||
|
listen 80;
|
||||||
|
server_name localhost;
|
||||||
|
|
||||||
|
# 根路径
|
||||||
|
location / {
|
||||||
|
root /usr/share/nginx/html;
|
||||||
|
index index.html index.htm;
|
||||||
|
try_files $uri $uri/ /index.html; # 支持 Vue Router history 模式
|
||||||
|
}
|
||||||
|
|
||||||
|
# 静态资源缓存
|
||||||
|
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ {
|
||||||
|
expires 1y;
|
||||||
|
add_header Cache-Control "public, immutable";
|
||||||
|
}
|
||||||
|
|
||||||
|
# API 代理 (开发时可能需要)
|
||||||
|
location /api/ {
|
||||||
|
proxy_pass http://backend:80;
|
||||||
|
proxy_set_header Host $host;
|
||||||
|
proxy_set_header X-Real-IP $remote_addr;
|
||||||
|
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||||
|
proxy_set_header X-Forwarded-Proto $scheme;
|
||||||
|
}
|
||||||
|
|
||||||
|
# 错误页面
|
||||||
|
error_page 500 502 503 504 /50x.html;
|
||||||
|
location = /50x.html {
|
||||||
|
root /usr/share/nginx/html;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
1418
PROJECT_DOCUMENTATION.md
Normal file
1418
PROJECT_DOCUMENTATION.md
Normal file
File diff suppressed because it is too large
Load Diff
178
README.md
Normal file
178
README.md
Normal file
@ -0,0 +1,178 @@
|
|||||||
|
# Fengling 项目快速开始指南
|
||||||
|
|
||||||
|
## 🚀 5分钟快速启动
|
||||||
|
|
||||||
|
### 1. 环境检查
|
||||||
|
|
||||||
|
确保已安装以下软件:
|
||||||
|
- [.NET 10 SDK](https://dotnet.microsoft.com/download/dotnet/10.0)
|
||||||
|
- [Node.js 18+](https://nodejs.org/)
|
||||||
|
- [Docker Desktop](https://www.docker.com/products/docker-desktop/)
|
||||||
|
- [Git](https://git-scm.com/)
|
||||||
|
|
||||||
|
验证安装:
|
||||||
|
```bash
|
||||||
|
dotnet --version # 应显示 10.0.xxx
|
||||||
|
node --version # 应显示 18.x 或 20.x
|
||||||
|
docker --version # 应显示 Docker 版本
|
||||||
|
```
|
||||||
|
|
||||||
|
### 2. 获取代码
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git clone <your-repo-url>
|
||||||
|
cd Demo
|
||||||
|
```
|
||||||
|
|
||||||
|
### 3. 启动基础设施
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 启动 Redis 和其他依赖服务
|
||||||
|
cd Backend/scripts
|
||||||
|
docker-compose up -d
|
||||||
|
```
|
||||||
|
|
||||||
|
### 4. 启动后端服务
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 新终端窗口
|
||||||
|
cd Backend/src/Fengling.Backend.Web
|
||||||
|
dotnet run
|
||||||
|
```
|
||||||
|
|
||||||
|
后端将在 `http://localhost:5511` 启动
|
||||||
|
|
||||||
|
### 5. 启动前端
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 管理后台 - 新终端窗口
|
||||||
|
cd Frontend/Fengling.Backend.Admin
|
||||||
|
pnpm install
|
||||||
|
pnpm dev
|
||||||
|
|
||||||
|
# H5会员端 - 新终端窗口
|
||||||
|
cd Frontend/Fengling.H5
|
||||||
|
pnpm install
|
||||||
|
pnpm dev
|
||||||
|
```
|
||||||
|
|
||||||
|
### 6. 访问应用
|
||||||
|
|
||||||
|
- **管理后台**: http://localhost:3000
|
||||||
|
- **H5会员端**: http://localhost:3001
|
||||||
|
- **API 文档**: http://localhost:5511/swagger
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📁 项目结构速览
|
||||||
|
|
||||||
|
```
|
||||||
|
Demo/
|
||||||
|
├── Backend/ # 后端服务 (.NET 10)
|
||||||
|
│ ├── src/ # 源代码
|
||||||
|
│ ├── test/ # 测试代码
|
||||||
|
│ └── scripts/ # 基础设施脚本
|
||||||
|
├── Frontend/
|
||||||
|
│ ├── Fengling.Backend.Admin/ # 管理后台 (Vue 3)
|
||||||
|
│ └── Fengling.H5/ # H5会员端 (Vue 3)
|
||||||
|
├── docs/ # 详细文档
|
||||||
|
└── PROJECT_DOCUMENTATION.md # 完整文档
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🔧 常用命令
|
||||||
|
|
||||||
|
### 后端开发
|
||||||
|
```bash
|
||||||
|
# 还原依赖
|
||||||
|
dotnet restore
|
||||||
|
|
||||||
|
# 构建项目
|
||||||
|
dotnet build
|
||||||
|
|
||||||
|
# 运行开发模式
|
||||||
|
dotnet watch run
|
||||||
|
|
||||||
|
# 运行测试
|
||||||
|
dotnet test
|
||||||
|
|
||||||
|
# 数据库迁移
|
||||||
|
dotnet ef database update
|
||||||
|
```
|
||||||
|
|
||||||
|
### 前端开发
|
||||||
|
```bash
|
||||||
|
# 安装依赖
|
||||||
|
pnpm install
|
||||||
|
|
||||||
|
# 启动开发服务器
|
||||||
|
pnpm dev
|
||||||
|
|
||||||
|
# 构建生产版本
|
||||||
|
pnpm build
|
||||||
|
|
||||||
|
# 代码检查
|
||||||
|
pnpm lint
|
||||||
|
```
|
||||||
|
|
||||||
|
### 基础设施管理
|
||||||
|
```bash
|
||||||
|
# 启动所有服务
|
||||||
|
docker-compose up -d
|
||||||
|
|
||||||
|
# 查看服务状态
|
||||||
|
docker-compose ps
|
||||||
|
|
||||||
|
# 停止服务
|
||||||
|
docker-compose down
|
||||||
|
|
||||||
|
# 完全清理
|
||||||
|
docker-compose down -v
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🎯 开发约定
|
||||||
|
|
||||||
|
### 后端
|
||||||
|
- 使用 Clean Architecture 分层架构
|
||||||
|
- 遵循 DDD 领域驱动设计原则
|
||||||
|
- API 使用 FastEndpoints 框架
|
||||||
|
- 数据验证使用 FluentValidation
|
||||||
|
- 使用 MediatR 处理命令查询
|
||||||
|
|
||||||
|
### 前端
|
||||||
|
- 使用 Composition API 风格
|
||||||
|
- TypeScript 严格模式
|
||||||
|
- Tailwind CSS 样式系统
|
||||||
|
- Pinia 状态管理
|
||||||
|
- Vue Router 路由管理
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📚 学习资源
|
||||||
|
|
||||||
|
详细文档请查看: [PROJECT_DOCUMENTATION.md](PROJECT_DOCUMENTATION.md)
|
||||||
|
|
||||||
|
主要技术栈文档:
|
||||||
|
- [.NET 10 官方文档](https://learn.microsoft.com/zh-cn/dotnet/)
|
||||||
|
- [Vue 3 官方文档](https://vuejs.org/)
|
||||||
|
- [Tailwind CSS](https://tailwindcss.com/)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## ❓ 常见问题
|
||||||
|
|
||||||
|
**Q: 后端启动失败,提示数据库连接错误?**
|
||||||
|
A: 确保 Docker 服务已启动:`docker-compose up -d`
|
||||||
|
|
||||||
|
**Q: 前端页面空白?**
|
||||||
|
A: 检查控制台是否有错误,确认后端 API 是否正常运行
|
||||||
|
|
||||||
|
**Q: 需要帮助?**
|
||||||
|
A: 查看完整文档或联系项目维护者
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
*Happy Coding! 🎉*
|
||||||
66
deploy.ps1
Normal file
66
deploy.ps1
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
# deploy.ps1 - Windows 部署脚本
|
||||||
|
|
||||||
|
param(
|
||||||
|
[string]$Version = "latest",
|
||||||
|
[string]$Registry = "your-registry.com",
|
||||||
|
[string]$Namespace = "your-namespace"
|
||||||
|
)
|
||||||
|
|
||||||
|
$ErrorActionPreference = "Stop"
|
||||||
|
|
||||||
|
$ProjectName = "fengling"
|
||||||
|
Write-Host "🚀 开始部署 $ProjectName 版本 $Version" -ForegroundColor Green
|
||||||
|
|
||||||
|
try {
|
||||||
|
# 1. 构建后端镜像
|
||||||
|
Write-Host "📦 构建后端镜像..." -ForegroundColor Yellow
|
||||||
|
Set-Location Backend
|
||||||
|
docker build -t "$Registry/$Namespace/fengling-backend:$Version" -f src/Fengling.Backend.Web/Dockerfile .
|
||||||
|
docker push "$Registry/$Namespace/fengling-backend:$Version"
|
||||||
|
Set-Location ..
|
||||||
|
|
||||||
|
# 2. 构建前端镜像
|
||||||
|
Write-Host "🎨 构建前端镜像..." -ForegroundColor Yellow
|
||||||
|
|
||||||
|
# 管理后台
|
||||||
|
Set-Location Frontend/Fengling.Backend.Admin
|
||||||
|
docker build -t "$Registry/$Namespace/fengling-admin:$Version" .
|
||||||
|
docker push "$Registry/$Namespace/fengling-admin:$Version"
|
||||||
|
Set-Location ../..
|
||||||
|
|
||||||
|
# H5会员端
|
||||||
|
Set-Location Frontend/Fengling.H5
|
||||||
|
docker build -t "$Registry/$Namespace/fengling-h5:$Version" .
|
||||||
|
docker push "$Registry/$Namespace/fengling-h5:$Version"
|
||||||
|
Set-Location ../..
|
||||||
|
|
||||||
|
# 3. 部署到 Kubernetes (如果使用)
|
||||||
|
if (Test-Path "k8s") {
|
||||||
|
Write-Host "☸️ 部署到 Kubernetes..." -ForegroundColor Yellow
|
||||||
|
kubectl set image deployment/fengling-backend fengling-backend="$Registry/$Namespace/fengling-backend:$Version"
|
||||||
|
kubectl set image deployment/fengling-admin fengling-admin="$Registry/$Namespace/fengling-admin:$Version"
|
||||||
|
kubectl set image deployment/fengling-h5 fengling-h5="$Registry/$Namespace/fengling-h5:$Version"
|
||||||
|
|
||||||
|
# 等待部署完成
|
||||||
|
kubectl rollout status deployment/fengling-backend
|
||||||
|
kubectl rollout status deployment/fengling-admin
|
||||||
|
kubectl rollout status deployment/fengling-h5
|
||||||
|
}
|
||||||
|
|
||||||
|
# 4. 部署到 Docker Compose (如果使用)
|
||||||
|
if (Test-Path "docker-compose.prod.yml") {
|
||||||
|
Write-Host "🐳 部署到 Docker Compose..." -ForegroundColor Yellow
|
||||||
|
docker-compose -f docker-compose.prod.yml pull
|
||||||
|
docker-compose -f docker-compose.prod.yml up -d
|
||||||
|
}
|
||||||
|
|
||||||
|
Write-Host "✅ 部署完成!" -ForegroundColor Green
|
||||||
|
Write-Host "应用查看地址:" -ForegroundColor Cyan
|
||||||
|
Write-Host "- 管理后台: http://your-admin-domain.com" -ForegroundColor White
|
||||||
|
Write-Host "- H5会员端: http://your-h5-domain.com" -ForegroundColor White
|
||||||
|
Write-Host "- API 文档: http://your-api-domain.com/swagger" -ForegroundColor White
|
||||||
|
|
||||||
|
} catch {
|
||||||
|
Write-Host "❌ 部署失败: $($_.Exception.Message)" -ForegroundColor Red
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
60
deploy.sh
Normal file
60
deploy.sh
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# deploy.sh - 自动化部署脚本
|
||||||
|
|
||||||
|
set -e # 遇到错误立即退出
|
||||||
|
|
||||||
|
# 配置变量
|
||||||
|
PROJECT_NAME="fengling"
|
||||||
|
VERSION=${1:-"latest"}
|
||||||
|
REGISTRY="your-registry.com"
|
||||||
|
NAMESPACE="your-namespace"
|
||||||
|
|
||||||
|
echo "🚀 开始部署 $PROJECT_NAME 版本 $VERSION"
|
||||||
|
|
||||||
|
# 1. 构建后端镜像
|
||||||
|
echo "📦 构建后端镜像..."
|
||||||
|
cd Backend
|
||||||
|
docker build -t $REGISTRY/$NAMESPACE/fengling-backend:$VERSION -f src/Fengling.Backend.Web/Dockerfile .
|
||||||
|
docker push $REGISTRY/$NAMESPACE/fengling-backend:$VERSION
|
||||||
|
cd ..
|
||||||
|
|
||||||
|
# 2. 构建前端镜像
|
||||||
|
echo "🎨 构建前端镜像..."
|
||||||
|
|
||||||
|
# 管理后台
|
||||||
|
cd Frontend/Fengling.Backend.Admin
|
||||||
|
docker build -t $REGISTRY/$NAMESPACE/fengling-admin:$VERSION .
|
||||||
|
docker push $REGISTRY/$NAMESPACE/fengling-admin:$VERSION
|
||||||
|
cd ../..
|
||||||
|
|
||||||
|
# H5会员端
|
||||||
|
cd Frontend/Fengling.H5
|
||||||
|
docker build -t $REGISTRY/$NAMESPACE/fengling-h5:$VERSION .
|
||||||
|
docker push $REGISTRY/$NAMESPACE/fengling-h5:$VERSION
|
||||||
|
cd ../..
|
||||||
|
|
||||||
|
# 3. 部署到 Kubernetes (如果使用)
|
||||||
|
if [ -d "k8s" ]; then
|
||||||
|
echo "☸️ 部署到 Kubernetes..."
|
||||||
|
kubectl set image deployment/fengling-backend fengling-backend=$REGISTRY/$NAMESPACE/fengling-backend:$VERSION
|
||||||
|
kubectl set image deployment/fengling-admin fengling-admin=$REGISTRY/$NAMESPACE/fengling-admin:$VERSION
|
||||||
|
kubectl set image deployment/fengling-h5 fengling-h5=$REGISTRY/$NAMESPACE/fengling-h5:$VERSION
|
||||||
|
|
||||||
|
# 等待部署完成
|
||||||
|
kubectl rollout status deployment/fengling-backend
|
||||||
|
kubectl rollout status deployment/fengling-admin
|
||||||
|
kubectl rollout status deployment/fengling-h5
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 4. 部署到 Docker Compose (如果使用)
|
||||||
|
if [ -f "docker-compose.prod.yml" ]; then
|
||||||
|
echo "🐳 部署到 Docker Compose..."
|
||||||
|
docker-compose -f docker-compose.prod.yml pull
|
||||||
|
docker-compose -f docker-compose.prod.yml up -d
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "✅ 部署完成!"
|
||||||
|
echo "应用查看地址:"
|
||||||
|
echo "- 管理后台: http://your-admin-domain.com"
|
||||||
|
echo "- H5会员端: http://your-h5-domain.com"
|
||||||
|
echo "- API 文档: http://your-api-domain.com/swagger"
|
||||||
Loading…
Reference in New Issue
Block a user