博客程序架構
本博客程序是博主11年的時候參考loachs小泥鰍博客內核開發的.net跨平台博客cms,距今已有6年多了,個人博客網站一直在用,雖然沒有wordpress那么強大,但是當時在深究.net的同時,自己能寫一個博客程序,並且基於獨立Linux服務器搭建一個自己的.net網站還是挺有意思,畢竟當年運行在linux下的.net網站還是極少數的,之前的部署方式一直沿用至今,網站服務器僅僅內存512M擴充到1G,畢竟現在的操作系統512M實在是有點少,如果是跑靜態站點還可以,動態的再多放點東西就會內存報警了,廢話不多說,看代碼。
技術棧
- .net framework 4.0
- sqlite 數據庫
- mono linux 運行環境以及mono下的sqlite庫
- nvelocity 模板引擎
- dapper 輕量級orm框架
- vs2010
代碼結構
左側主要分為三個文件夾,Jqpress.web是存放web路由入口、模板皮膚、上傳文件以及后台管理程序,上圖default.aspx.cs代碼里有處理301跳轉的,主要用來處理jqpress.com自動跳轉到www.jqpress上,確保對搜索引擎處理友好,需要大家手動移除此代碼。
路由設計
整個前台入口是從default.aspx作為路由入口跳轉到核心路由控制器BlogController,Controller根據url請求的type參數做路由處理。
模板引擎設計
模板引擎采用nvelocity,是java的velocity的.net翻譯版本,現在依然活躍在java界,采用這個模板引擎的原因是因為簡單,高效,通用,成熟。
可以看到一個模板皮膚包含圖片、模板、樣式、預覽圖、配置文件,wordpress好像也跟這差不多。
數據存儲設計
作為輕量級的博客程序,數據庫就沒必要用sqlserver或者mysql這樣的大塊頭了,sqlite絕對夠用了,如果是windows下的可以用access,但是sqlite真心好用,語法就是mysql的精簡版,速度非常之快,上圖是原生sqlite沒通過orm的直接寫法。
orm更是采用stackoverflow出品的dapper,速度快,原生sql,簡單,因為要支持linux,所以sqlite的操作類需要using Mono.Data.Sqlite;
,上圖是通過dapper的寫法,沒有密密麻麻的參數了,不過當前項目還沒有完全轉dapper,希望有感興趣的同學將此份源碼改造成更好的.net 博客cms系統。
由於windows下和linux操作sqlite的原生方法差別比較大,如果通過dapper來操作的話還是可以實現自由切換
數據庫結構
jq_category
分類及標簽表jq_comments
評論表jq_links
友鏈及導航設置jq_posts
文章表jq_sites
站點訪問統計數字及文章、分類、數量統計表jq_users
賬戶表
運行
vs2010調試模式預覽
博客首頁
后台登錄,默認用戶名admin,密碼admin
后台首頁
文章編輯
linux部署方式
linux下需要安裝mono和jexus就可以運行起來,mono作為.net framework的linux運行環境,jexus作為web服務器。
如上圖是我的博客站點jexus配置,因為我的服務器上還有其他語言的站點,所以沒有直接采用jexus對外服務,前面還套了層nginx作為代理。
上圖為我服務器上的mono安裝信息。
linux服務器上的的.net 程序問題
- jexus不支持中文,所以文件上傳的路徑必須重寫成字母加數字符號形式,
- jexus web服務器是默認對大小寫敏感的,所以部署的時候一定要
只需要把 jws這個腳本文件中的 “export MONO_IOMAP=...”這一句前邊的“#”去掉,就可以不區分大小寫了
源碼獲取
https://github.com/robotbird/jqpress-aspx
為了防止部分同學無法訪問Github,所以放oschina的gitee上了
https://gitee.com/robotbird/jqpress-aspx
后記
至於架構為什么不用.net mvc ,那是因為當時只買得起最便宜的.net 虛擬服務器,不用單獨買服務器一年才幾十塊錢,所以說此版本的.net 博客程序對服務器的要求是極低的,基本支持所有的.net 空間提供商,如果是自建服務的話,我也重新開發了一套基於mvc3的cms程序,大家可以先預覽下[bjjxysbz.com,下回分解下。
作為一個多年的.net開發人員,后又混跡java,現在成為產品狗,偶爾用用python做些日常的工作,作為一個邁入中年的老程序員,想想還是不忘初心,熱愛技術,后續也會抽出時間將自己的作品逐一搬到網上,緬懷下青春,個人的博客站點 機器鳥,后續會將繼續在博客園上發表技術類型的文章,回歸社區,不再獨自前行。
博客程序還不是很完善,bug可能比較多,如果有代碼、開發、部署問題請聯系qq:330296409,或者郵箱robotbird#qq.com。