Dpz.Core.Web
Dpz.Core.Web 是 dpz.core 项目的核心 Web 前端/后端应用,基于 ASP.NET Core (.NET 10) 构建。它集成了丰富的功能,包括博客文章、动态、评论、实时聊天、身份验证等。
🛠 技术栈
后端
- 核心框架: .NET 10.0 (ASP.NET Core MVC)
- 数据库/缓存: MongoDB, Redis (StackExchange.Redis)
- 配置中心: AgileConfig
- 身份认证: OpenIddict (OAuth2/OIDC), JWT Bearer
- 后台任务: Hangfire
- 实时通信: SignalR (Redis Backplane)
- 响应式/设备检测: DeviceDetector.NET, Wangkanai.Detection, Wangkanai.Responsive
- 日志: Serilog
- Web 优化: WebMarkupMin (HTML/XML 压缩), Brotli/Gzip 压缩
- Markdown: Markdig
- 图片处理: SixLabors.ImageSharp
- 其他: AngleSharp (HTML 解析), HtmlSanitizer (安全清理), MailKit (邮件)
前端
- TypeScript - 类型安全的 JavaScript 超集
- esbuild - 超快速打包工具(< 50ms 增量编译)
- ESLint 9 + typescript-eslint - TS 代码质量检查(Flat Config)
- Prettier - 代码格式化
- ES Modules - 原生模块系统
- jQuery - DOM 操作和 AJAX
- SignalR - 实时通信客户端
✨ 功能特性
- 内容管理: 文章、动态 (Mumble)、评论、代码片段管理。
- 用户系统: 基于 Cookie 和 OpenIddict 的身份验证,支持第三方登录整合。
- 实时互动: 集成 SignalR 实现实时聊天、弹幕通知等功能。
- 设备适配: 自动检测设备类型(移动端/桌面端)并适配视图。
- 安全防护:
- IP 限流 (IpRateLimit)
- 爬虫/Bot 拦截 (RejectBotsMiddleware)
- 跨域资源共享 (CORS) 配置
- 性能优化:
- 响应式缓存 (ResponseCaching)
- 静态资源指纹/缓存控制
- HTML/XML 最小化
🚀 快速开始
前置要求
- .NET 10 SDK
- Node.js 18+ (用于构建前端资源)
- Redis Server
- Docker (可选,用于容器化部署)
本地开发
1. 初始化前端环境(首次运行)
# 初始化 TypeScript 和依赖
.\build.ps1 init
这会自动安装所有依赖并验证构建配置。 clean-css-cli 和 esbuild 均使用项目本地 npm 依赖,不需要全局安装。
2. 前端开发(Watch 模式)
# 启动主应用 watch(实时编译 TS/JS)
.\build.ps1 dev
# 兼容旧命令,同样启动主应用 watch
.\build.ps1 dev-all
# 代码检查与格式化
npm run lint
npm run format
在 watch 模式下,修改 .js 或 .ts 文件会自动重新编译(通常 < 50ms),刷新浏览器即可看到效果。
3. 运行 .NET 项目
配置 appsettings.json 中的 AgileConfig 连接:
"AgileConfig": {
"appId": "your-app-id",
"secret": "your-secret",
"nodes": "http://your-agile-config-server",
"env": "DEV"
}
启动项目:
dotnet run
访问 https://localhost:5001
4. 生产构建
# 完整构建(CSS + JS + 文件哈希)
.\build.ps1
# 或
.\build.ps1 build
构建流程:
- CSS 处理:
- 从
Views/Shared/_IncludeCssFilePartial.cshtml的 Development 段提取全局样式并合并压缩为global.min.css - 使用项目本地
node_modules/.bin/cleancss,不依赖全局clean-css-cli
- 从
- JavaScript 处理(esbuild):
- 构建主应用入口
- 生产模式输出带内容哈希的文件名(例如
app.min.[hash].js) - 主应用启用
splitting,输出scripts/chunks/*分包
- 文件哈希策略:
- CSS:由 PowerShell 使用 MD5(8位小写)重命名
- JS:由 esbuild 内置内容哈希(8位大写 Base32)输出
- 资源清单:
- esbuild 先产出
.app中间清单 build.ps1合并并写入wwwroot/assets-manifest.json- 运行时由
AssetService在非 Development 环境映射到带哈希路径
- esbuild 先产出
前端开发工作流
开发模式:
主应用(.\build.ps1 dev):
修改 wwwroot/scripts/**.js/.ts
-> esbuild watch 编译
-> 输出 wwwroot/scripts/app.dev.js + source map + dev chunks
兼容命令(.\build.ps1 dev-all):
- app: wwwroot/scripts/app.dev.js
构建脚本命令
.\build.ps1 help # 显示帮助
.\build.ps1 init # 初始化环境(安装依赖)
.\build.ps1 dev # 开发 watch(主应用)
.\build.ps1 dev-all # 开发 watch(兼容旧命令)
.\build.ps1 build # 生产构建(默认)
npm run lint # ESLint 检查 TS/TSX
npm run lint:fix # ESLint 自动修复
npm run format # Prettier 格式化 TS/TSX
npm run format:check # 检查格式
🐳 Docker 部署
项目提供了详细的 Docker 部署支持。
构建镜像
# 切换到解决方案根目录
cd /home/ubuntu/project/dpz.core/src
# 构建镜像
sudo docker build -t dpz.core -f Dpz.Core.Web/Dockerfile .
sudo docker build \
-t 127.0.0.1:3383/dpz.core:<version> \
-t 127.0.0.1:3383/dpz.core:latest \
-f Dpz.Core.Web/Dockerfile .
# 推送镜像
sudo docker push 127.0.0.1:3383/dpz.core:<version>
sudo docker push 127.0.0.1:3383/dpz.core:latest
运行容器
生产环境
sudo docker run --restart=always \
--name dpz.core \
-e TZ=Asia/Shanghai \
-p 2372:8080 \
-d registry.dpangzi.com/dpz.core:latest
预发布环境 (UAT)
sudo docker build -t dpz.core.uat -f Dpz.Core.Web/Dockerfile .
sudo docker run --restart=always \
--name dpz.core.uat \
-e "AgileConfig:env=STAGING" \
-e TZ=Asia/Shanghai \
-p 33801:8080 \
-d dpz.core.uat:latest
测试环境
sudo docker network create dpz.core # 如果需要
sudo docker build -t dpz.core.test -f Dpz.Core.Web/Dockerfile .
sudo docker run --restart=always \
--name dpz.core.test \
-e "AgileConfig:env=TEST" \
-e TZ=Asia/Shanghai \
-p 33803:8080 \
-d dpz.core.test:latest
⚙️ 配置说明
拦截规则 (InterceptRules)
项目支持通过配置定义请求拦截规则,用于防御爬虫和恶意请求。
{
"InterceptRules": [
{ "Type": "UserAgent", "Pattern": "*bot*" },
{ "Type": "ClientIp", "Pattern": "192.168.1.*" },
{ "Type": "Uri", "Pattern": "/admin/*" }
]
}
IIS Web.Config
如果使用 IIS 托管,项目包含预配置的 web.config 规则,主要用于文件扩展名过滤,确保安全性。
📂 项目结构
src/Dpz.Core.Web/
├── Controllers/ # MVC 控制器
├── Views/ # Razor 视图
├── wwwroot/ # 静态资源
│ ├── css/ # 样式文件
│ ├── scripts/ # JavaScript/TypeScript
│ │ ├── modules/ # 功能模块
│ └── assets-manifest.json # 资源清单(自动生成)
├── Middleware/ # 自定义中间件
├── Library/ # 辅助类库、TagHelpers
├── Models/ # 视图模型
├── esbuild/ # 前端构建配置
├── build.ps1 # 统一构建脚本
├── tsconfig.json # TypeScript 配置
├── package.json # Node.js 依赖
└── Program.cs # 应用入口
📚 相关文档
- 构建脚本帮助:
.\build.ps1 help
📝 许可证
Copyright © dpangzi.
AI 正在分析代码…
评论加载中...