【全國(guó)】 集團(tuán)簡(jiǎn)介 關(guān)注我們
幫學(xué)院 商標(biāo)分類表-2024尼斯分類 知識(shí)產(chǎn)權(quán)交易

快幫集團(tuán)

博客網(wǎng)站建設(shè)系統(tǒng)開(kāi)發(fā)方案

2019-04-07

博客網(wǎng)站需求設(shè)計(jì)與方案設(shè)計(jì)


1 背景與規(guī)劃


很早就想通過(guò)寫(xiě)博客,對(duì)自己的技術(shù)進(jìn)行反思與沉淀,但是由于拖延癥晚期,一直沒(méi)有實(shí)際執(zhí)行,而且市面上的各種博客系統(tǒng)創(chuàng)建的博客頁(yè)面總是有很多第三方的元素,顯得頁(yè)面很繁瑣,我個(gè)人是很討厭這些多余的東西,所以就有了自己搭一個(gè)博客的念頭。


最初是2016年的時(shí)候打算用wordpress來(lái)搭建,因?yàn)檎w框架已經(jīng)成熟,api也很完善。但是用起來(lái)需要對(duì)這些api很熟悉才能靈活的定制博客,否則就會(huì)束手束腳,而且當(dāng)時(shí)編程能力還比較差,對(duì)前端代碼幾乎一無(wú)所知,寫(xiě)起來(lái)十分困難,加上剛換了工作,就沒(méi)有更深入的去了解。這兩年以來(lái)用業(yè)余時(shí)間斷斷續(xù)續(xù)學(xué)習(xí)了一些前端技術(shù),而且實(shí)際工作中對(duì)系統(tǒng)架構(gòu)設(shè)計(jì)的理解也有了比較大的成長(zhǎng),所以就萌生了從零搭建一個(gè)純凈博客系統(tǒng)的念頭,

  

用最簡(jiǎn)單粗暴的代碼實(shí)現(xiàn)功能。


支持文章的發(fā)布、修改與查看(離線發(fā)布)。


可以增加刪除文章分類(分類分為主分類和副分類,比如主分類:技術(shù),下屬有PHPMySQL、Linux等副分類)。

  

PC瀏覽美觀,暫不考慮移動(dòng)端的兼容。

  

Google、百度等搜索引擎可搜到

  

兼容移動(dòng)端,考慮使用bootstrap的響應(yīng)式布局。

  

線上線下配置分離


對(duì)代碼進(jìn)行模塊化的封裝1. 后端代碼抽象出路由模塊、數(shù)據(jù)庫(kù)模塊、網(wǎng)絡(luò)請(qǐng)求模塊、http響應(yīng)模塊。2. 前端代碼抽象出網(wǎng)絡(luò)請(qǐng)求模塊。

 

支持評(píng)論、訂閱功能

  

支持線上發(fā)布、修改文章(權(quán)限控制)

   

多機(jī)部署

   

將文章合成自動(dòng)生成的js代碼,實(shí)現(xiàn)簡(jiǎn)單的防爬機(jī)制

 

2 技術(shù)選型

 

最終選用的技術(shù)棧如下:

 

前端:Vue

后端:Golanggin框架) + MySQL + Nginx + Linux

 

前端:


其實(shí)一年前我對(duì)前端技術(shù)還是一無(wú)所知,大概20175月份左右,有了一個(gè)想做教育APP的想法,直到1712月左右工作的壓力才逐漸小了一些,每天大概有兩小時(shí)左右的業(yè)余時(shí)間可以搞一些小玩意。


當(dāng)時(shí)考慮到做APP的話,無(wú)論Andriod還是iOS如果想做原生APP,學(xué)習(xí)成本太高,而且要做兩套APP,就選了學(xué)習(xí)成本最低的微信小程序。小程序一旦寫(xiě)好,甚至不需要安裝就可以獲得媲美原生APP的功能,還有微信的流量,實(shí)在是方便。小程序使用的語(yǔ)言又恰好和html、jscss很像,于是這才漸漸有了一些了解。


回到這次開(kāi)發(fā)博客的技術(shù)棧,在經(jīng)過(guò)同學(xué)還有同事的安利后,前端框架決定使用Vue,輕量級(jí)框架,學(xué)習(xí)成本較低。

 

后端服務(wù)開(kāi)發(fā)語(yǔ)言:


后端服務(wù)的話,由于我本身是做了三年的PHP開(kāi)發(fā),使用PHP開(kāi)發(fā)博客的話,幾乎沒(méi)有什么新的技術(shù)難題,更不用說(shuō)成長(zhǎng)了。PHP屬于動(dòng)態(tài)腳本語(yǔ)言,所以打算使用一種之前沒(méi)用過(guò)的靜態(tài)編譯型語(yǔ)言。


近些年來(lái),Golang作為一門新興語(yǔ)言,實(shí)在是勁頭火熱,各大公司的許多項(xiàng)目也在向Golang逐漸轉(zhuǎn)型,所以我選擇Golang作為后端開(kāi)發(fā)語(yǔ)言,雖然可能暫時(shí)用不到channel和協(xié)程這些語(yǔ)言特性,但也可以為學(xué)習(xí)新語(yǔ)言打開(kāi)一扇大門了。


本來(lái)Golang是可以不用框架,直接裸寫(xiě)服務(wù),不過(guò)之前面試羅輯思維的時(shí)候,了解過(guò)他們框架用的gin,網(wǎng)上查了查發(fā)現(xiàn)這屬于一個(gè)輕量級(jí)框架,似乎評(píng)價(jià)還可以,所以就打算拿來(lái)用用,正好在博客的第二版可以對(duì)框架進(jìn)行一些二次開(kāi)發(fā),增加一些技術(shù)難題和工作量。

 

 反向代理服務(wù)器

Golang服務(wù)器前面我是打算再搭一個(gè)Nginx1是為了后續(xù)流量上升后的負(fù)載均衡做準(zhǔn)備,2是因?yàn)?/span>jscss等靜態(tài)資源肯定需要一個(gè)web服務(wù)器提供服務(wù)。反正CDN暫時(shí)是不考慮了orz

 

數(shù)據(jù)庫(kù):


數(shù)據(jù)庫(kù)選擇使用MySQL,畢竟MySQL可以說(shuō)是當(dāng)前業(yè)界最流行的關(guān)系型數(shù)據(jù)庫(kù)。


MongoDB這種數(shù)據(jù)庫(kù)說(shuō)實(shí)話我還沒(méi)用過(guò),從網(wǎng)上的資料看起來(lái)的應(yīng)用場(chǎng)景似乎也不太匹配,這次就不用了,等后續(xù)有時(shí)間再看看吧。


Redis暫時(shí)也就不用了,一開(kāi)始似乎也不需要用到這種設(shè)備,用了反而增加系統(tǒng)復(fù)雜度。

 

操作系統(tǒng):


服務(wù)器的操作系統(tǒng)不多嗶嗶,就是Linux,其他也不廢話了。

 

3 數(shù)據(jù)庫(kù)設(shè)計(jì)

 

第一版主要實(shí)現(xiàn)以下幾個(gè)功能:方便的增加、修改;瀏覽數(shù)計(jì)數(shù);記錄創(chuàng)建、修改時(shí)間;記錄文章分類。

 

建表語(yǔ)句如下:

 

CREATE TABLE `article_detail` (

 `id` bigint(11) NOT NULL AUTO_INCREMENT COMMENT '主鍵自增ID',

 `uuid` varchar(32) NOT NULL DEFAULT '' COMMENT '文章ID',

 `content` text COMMENT '文章內(nèi)容',

 `browser_count` bigint(11) NOT NULL DEFAULT '0' COMMENT '瀏覽數(shù)',

 `create_time` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT '創(chuàng)建時(shí)間',

 `main_category_uuid` varchar(32) NOT NULL DEFAULT '' COMMENT '主類別ID',

 `sub_category_uuid` varchar(32) NOT NULL DEFAULT '' COMMENT '副類別ID',

 `title` varchar(255) NOT NULL DEFAULT '' COMMENT '文章標(biāo)題',

 `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '更新時(shí)間',

 PRIMARY KEY (`id`),

 UNIQUE KEY `idx_uuid` (`uuid`),

 KEY `idx_main_category_uuid` (`main_category_uuid`),

 KEY `idx_sub_category_uuid` (`sub_category_uuid`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

 

表結(jié)構(gòu)就不多說(shuō)了,加了三個(gè)索引,uuid是每個(gè)文章的唯一標(biāo)記,主、副類別ID的索引是為了在篩選文章列表的時(shí)候加快查詢速度用的。加索引在數(shù)據(jù)量夠大時(shí),可以增加查詢速度,具體原理以后會(huì)寫(xiě)文章講解。

 

主副類別表;

建表語(yǔ)句如下:

CREATE TABLE `main_category` (

 `id` bigint(11) NOT NULL AUTO_INCREMENT COMMENT '主鍵自增ID',

 `uuid` varchar(32) NOT NULL DEFAULT '' COMMENT '主類別ID',

 `title` varchar(255) NOT NULL DEFAULT '' COMMENT '類別名稱',

 `create_time` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT '創(chuàng)建時(shí)間',

 PRIMARY KEY (`id`),

 UNIQUE KEY `idx_uuid` (`uuid`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

 

CREATE TABLE `sub_category` (

 `id` bigint(11) NOT NULL AUTO_INCREMENT COMMENT '主鍵自增ID',

 `uuid` varchar(32) NOT NULL DEFAULT '' COMMENT '副類別ID',

 `title` varchar(255) NOT NULL DEFAULT '' COMMENT '類別名稱',

 `create_time` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT '創(chuàng)建時(shí)間',

 `main_uuid` varchar(32) NOT NULL DEFAULT '' COMMENT '對(duì)應(yīng)的主類別ID',

 PRIMARY KEY (`id`),

 UNIQUE KEY `idx_uuid` (`uuid`),

 KEY `idx_main_uuid` (`main_uuid`)

) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8

 

  

??其實(shí)這么建表我是有點(diǎn)糾結(jié)的,很多地方,為了父子節(jié)點(diǎn)的拓展方便,可能會(huì)只建一張表,然后表內(nèi)有一個(gè)父節(jié)點(diǎn)ID的字段,就可以實(shí)現(xiàn)無(wú)限多級(jí)的父子關(guān)系,不過(guò)我覺(jué)著這里沒(méi)必要有無(wú)限多級(jí)的父子關(guān)系,而且建兩張表的話,父子關(guān)系會(huì)更清晰。

 

文章內(nèi)容來(lái)源于網(wǎng)絡(luò),侵刪

常見(jiàn)問(wèn)題

京公網(wǎng)安備 11010802036823號(hào)

   

京ICP備16051929號(hào)

   

增值電信業(yè)務(wù)許可證編號(hào):京B2-20190686

   

專利代理機(jī)構(gòu)代碼:16087

   

人力資源服務(wù)許可證編號(hào):1101082019043

   

代理記賬許可證書(shū)編號(hào):DLJZ11010820210015

0