個人博客站項目源碼,高性能低占用的博客系統,這也許是我個人目前寫過的性能最高的web項目了 。目前日均處理請求數80-120w次,同時在線活躍用戶數30-100人,數據量累計已達到100多萬條,數據庫+Redis+網站主程序同時運行在一臺2核2GB的機器上,瀏覽器頁面請求秒級響應,CPU平均使用率控制在20%左右。

演示站點
首頁_懶得勤快的博客_互聯網分享精神?masuit.com
不依賴于具體的數據庫,已測試SQL Server和mysql正常,其他數據庫還請自測;也不依賴于數據庫的開發模式,code First、DB First均可自由切換。部分功能在Linux下可能無法使用,須待測,比如:硬件監測。
github
https://github.com/ldqk/Masuit.MyBlogs?github.com老項目已經移動到分支net461
開發環境
操作系統:Windows 10 2009
IDE:Visual Studio 2019 v16.8
數據庫:MySQL 8.0
Redis:redis-server-windows 3.2
當前運行環境
操作系統:Windows Server 2008 R2
數據庫:MySQL 8.0
Redis:redis-server-windows 3.2
運行時:.NET 5
服務器配置:2核+4GB+1M
硬件要求
最低配置 | 推薦配置 | |
CPU | 1核 | 2核 |
內存 | 1GB | 2GB |
帶寬 | 1Mbps | 2Mbps |
數據庫 | SQL Server 2008/MySQL 5 | SQL Server 2012/MySQL 8 |
主要功能
服務器性能監控
可直接在線實時監控服務器的運行狀態,包括CPU、網絡帶寬、磁盤使用率、內存占用等情況,可記錄最近一天的服務器健康狀態,通過websocket進行數據的推送,僅支持Windows,且需要Windows安裝最新的更新。
文章管理
包含文章審核、文章合并、文章列表的增刪查改、分類管理、專題管理;
服務器性能監控
可直接在線實時監控服務器的運行狀態,包括CPU、網絡帶寬、磁盤使用率、內存占用等情況,可記錄最近一天的服務器健康狀態,通過websocket進行數據的推送,僅支持Windows,且需要Windows安裝最新的更新。
文章管理
包含文章審核、文章合并、文章列表的增刪查改、分類管理、專題管理;
文章審核:當用戶在前臺頁進行投稿后,會進入審核狀態,審核通過后,才會在前臺頁的文章列表中展示出來。
文章合并:當用戶在前臺頁進行了文章的編輯后,會創建出文章的合并請求,當后臺管理進行相應的合并操作后,前臺用戶的修改才會正式生效,可以直接合并、編輯并合并和拒絕合并,拒絕時,修改人會收到相應的郵件通知。
文章操作:可對文章進行修改、新增、置頂、臨時刪除(下架)、還原、永久刪除、禁止評論等操作,編輯后的文章會生成歷史版本。支持上傳word文檔自動轉換, 文章支持按地區進行投放,支持5種投放模式。
分類管理:對文章的分類進行增刪查改和文章的移動等操作,與文章的關系:一對多。
專題管理:對文章的專題進行管理,與文章的關系:多對多。
快速分享:首頁快速分享欄目的管理。
評論和留言管理
對前臺用戶提交的留言和評論進行審核,當前臺用戶提交的內容可能包含有敏感詞時,會進入人工審核,審核成功才會在前臺頁中展示。
消息通知
站內消息包含評論、留言、投稿、文章合并等郵件通知。
郵件支持smtp和http模式,http模式的已支持mailgun服務。
公告管理
對網站的公告進行增刪查改管理。
雜項頁管理
一些通用的頁面管理,可自由靈活的創建靜態頁面。
系統設置
包含系統的全局設置、防火墻管理、網站運行日志記錄、友鏈管理、郵件模板的管理。
全局設置:網站的一些基本配置和SEO相關操作等;
防火墻
對網站的所有請求進行全局流量的攔截,讓規則內的請求阻止掉,支持黑名單、白名單、IP地址段(支持IPv4和IPv6)、國家或地區、關鍵詞審查、ASN、運營商等規則;
攔截記錄支持提交到cloudflare等第三方cdn服務商;
防火墻審計可一鍵加黑白名單或提交到上層防火墻服務;
防火墻記錄了詳細的日志,便于查看審計。
菜單管理
菜單支持拖拽配置,樹狀無級菜單,3種子菜單類型。
廣告管理
主動式的廣告投放管理,支持競價排名,支持在banner、邊欄、頁內、列表內的廣告展示,競價或權重的高低決定廣告出現的概率。
贊助管理
對網站打賞進行增刪查改操作,自動掩碼。
搜索統計
當前臺用戶每Session周期內的關鍵詞搜索,不重復的關鍵詞將會被記錄,用于熱詞統計,僅記錄最近一個月內的所有搜索關鍵詞,用于統計當月、7天以及當天的搜索熱詞。
任務管理
hangfire的可視化管理頁面
文件管理
服務器文件的在線管理,支持瀏覽、預覽、壓縮、解壓縮、創建文件夾、上傳、下載、打包下載等文件的基本操作。
站內搜索
站內搜索支持全文檢索,基于自定義詞庫。
友情鏈接
友情鏈接支持自助上鏈,回鏈檢測,自動排名等。
全局功能
網站全局時間將根據訪客所在時區自動進行轉換;
圖片上傳支持自定義水印文字;
圖片上傳支持本地存儲、gitlab倉庫、阿里云oss等;
前臺數據帶緩存;
對于需要前臺展示的用戶數據,將進行脫敏處理后進行展示;
支持文章,分類,評論,單文章的rss訂閱。
項目架構
項目采用單體架構,方便部署和配置,傳統的MVC模式,http://ASP.NET Core MVC+EF Core的簡單架構。
Controller→Service→Repository→DbContext

現在只有這么一個項目了,額外的引用了Masuit.Tools.Core這個項目作為工具庫,因為.NET Core無處不在的依賴注入,使得數據庫和ORM之間沒有了強依賴的關系,這使得更換數據庫的成本相對較低,所以所有的代碼都全部放在了一起。
文件夾定義:
App_Data:存放網站的一些常規數據,以文本的形式存在,這類數據不需要頻繁更新的。
┠─cert文件夾:存放https證書
┠─ban.txt:敏感詞庫
┠─CustomKeywords.txt:搜索分詞詞庫
┠─denyip.txt:IP地址黑名單
┠─DenyIPRange.txt:IP地址段黑名單
┠─GeoLite2-City.mmdb:MaxMind地址庫
┠─ip2region.db:ip2region地址庫
┠─mod.txt:審查詞庫
┠─whitelist.txt:IP地址白名單
Common:之前老項目的Common項目;
Configs:項目的一些配置對象
Controllers:控制器
Extensions:一些擴展類或一些項目的擴展功能,比如hangfire、ueditor、中間件、攔截器等;
Hubs:SignalR推送服務類;
Infrastructure:數據訪問基礎設施,包含Repository和Services,相當于老項目的DAL和BLL;
Migrations:數據庫CodeFirst模式的遷移文件;
Models:老項目的Models項目,存放一些實體類或DTO;
Views:razor視圖
wwwroot:項目的所有靜態資源;
核心功能點技術實現
后端技術棧:
依賴注入容器:.NET Core自帶的+Autofac,autofac主要負責批量注入和屬性注入;
實體映射框架:automapper 9.0;
緩存框架:CacheManager統一管理網站的熱數據,如Session、內存緩存,EFSecondLevelCache.Core負責管理EF Core的二級緩存;
定時任務:hangfire統一管理定時任務,包含友鏈回鏈檢查、文章定時發布、訪客統計、搜索熱詞統計、Lucene庫刷新等任務;
Websocket:SignalR進行流推送實現服務器硬件健康狀態的實時監控;
硬件檢測:Masuit.Tools封裝的硬件檢測功能;
全文檢索:Masuit.LuceneEFCore.SearchEngine基于http://Lucene.Net 4.8實現的全文檢索中間件;
中文分詞:結巴分詞結合本地詞庫實現中文分詞;
斷點下載:Masuit.Tools封裝的斷點續傳功能;
Redis:CSRedis負責Redis的讀寫操作;
文件壓縮:Masuit.Tools封裝的zip文件壓縮功能;
Html字符串操作:htmldiff.net-core實現文章版本的內容對比,HtmlAgilityPack實現html字符串的“DOM”操作,主要是用于提取img標簽,HtmlSanitizer實現表單的html代碼的仿XSS處理;
圖床:支持多個圖床的上傳:gitee、gitlab、阿里云OSS、sm.ms圖床、人民網圖床;
攔截器:授權攔截器、請求攔截器負責網站全局流量的攔截和清洗、防火墻攔截器負責攔截網站自帶防火墻規則的請求流量、異常攔截器、url重定向重寫攔截器,主要用于將http的請求重定向到https;
請求IP來源檢查:IP2Region+本地數據庫實現請求IP的來源檢查;
RSS:WilderMinds.RssSyndication實現網站的RSS源;
EF擴展功能:zzzproject相關nuget包
Word文檔轉換:OpenXml實現瀏覽器端上傳Word文檔轉換為html字符串。
在線文件管理:angular-filemanager+文件管理代碼實現服務器文件的在線管理
前端技術棧
前臺頁面:
基于bootstrap3布局
ueditor+layedit富文本編輯器
notie提示欄+sweetyalert彈窗+layui組件
angularjs
后臺管理頁:
angularjs單一頁面應用程序
material布局風格
highchart+echart圖表組件
ng-table表格插件
material風格angular-filemanager文件管理器
性能和安全相關
hangfire實現分布式任務調度;
Z.EntityFramework.Plus實現數據訪問層的高性能數據庫批量操作;
http://Lucene.NET實現高性能站內檢索;
通過url的敏感詞檢查過濾惡意流量;
限制客戶端的請求頻次;
表單的AntiForgeryToken防止惡意提交;
ip2region+MaxMind地址庫實現請求來源審查;
用戶信息采用端到端RSA非對稱加密進行數據傳輸;
項目部署
編譯:
編譯需要將Masuit.Tools項目和Masuit.LuceneEFCore.SearchEngine項目也一起clone下來,和本項目平級目錄存放,才能正常編譯,否則,將Masuit.Tools項目和Masuit.LuceneEFCore.SearchEngine項目移除,通過nuget安裝也是可以的。

配置文件:
主要需要配置的是https證書、數據庫連接字符、redis、BaiduAK以及圖床配置;

同時,BaiduAK參與了數據庫的加密,如果你沒有BaiduAK,自行到百度地圖開放平臺申請,免費的。
如果你使用了CDN,需要配置TrueClientIPHeader選項為真實IP請求轉發頭,如cloudflare的叫CF-Connecting-IP。
如果Redis不在本機,需要在配置文件中的Redis節下配置,固定為Redis,值的格式:127.0.0.1:6379,allowadmin=true,若未正確配置,將按默認值“127.0.0.1:6379,allowadmin=true,abortConnect=false”。
IIS:部署時必須將應用程序池的標識設置為LocalSystem,否則無法監控服務器硬件,同時需要安裝.NET Core Hosting運行時環境,IIS程序池改為無托管代碼。

獨立運行:配置好環境和配置文件后,可直接通過dotnet Masuit.MyBlogs.Core.dll --port 80 --sslport 443命令運行。
docker:自行爬文。
運行參數:
網站默認會以5000和5001端口運行,如果需要指定端口,需要在appsettings.json中進行配置。


后臺管理:
初始用戶名:masuit
初始密碼:123abc@#$