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