在阿里云上關(guān)于Hexo的部署和管理

背景

我不知道有多少人是在自己的服務(wù)器上部署Hexo博客服務(wù)的,反正我是這樣的。最早是因?yàn)間ithub在國(guó)內(nèi)訪問(wèn)有點(diǎn)太慢了,國(guó)內(nèi)的pages服務(wù)又還沒(méi)有出來(lái),剛好自己在云服務(wù)上有一臺(tái)用來(lái)玩的服務(wù)器,所以就直接部署上去。雖然后面國(guó)內(nèi)的pages的也有了,但也懶得再遷移過(guò)去了。但是自己的服務(wù)器上部署Hexo有幾個(gè)問(wèn)題,就是數(shù)據(jù)同步問(wèn)題。用過(guò)Hexo的人都知道,hexo是在我們自己的電腦寫(xiě)博文,然后生成靜態(tài)文件,然后再將public目錄發(fā)布出去。如果是用pages,只需要push上去就行了,如果是在自己的服務(wù)器中,就需要先登錄到服務(wù)器,然后pull,想想都麻煩。

解決方案

以前我都是用Rsync,配置麻煩,用起來(lái)也不是不方便,不過(guò)因?yàn)橐荒暌矝](méi)寫(xiě)幾次博文,也懶得折騰了。最近工作有變動(dòng),想著把劃水的時(shí)間用來(lái)看書(shū)寫(xiě)博文,所謂工欲善,必先利其器,所以準(zhǔn)備把整個(gè)博客系統(tǒng)弄完整一點(diǎn)。

整體架構(gòu)圖

博客系統(tǒng)功能圖

通過(guò)上圖,大家能知道我的整個(gè)博客系統(tǒng)的部署情況以及實(shí)現(xiàn)哪些功能。

有三個(gè)東西:

  1. Nginx,使用它的反向代理功能,來(lái)實(shí)現(xiàn)請(qǐng)求轉(zhuǎn)發(fā)
  2. 一個(gè)是我的hexo博客源碼(不是生成文件)
  3. Hexo-Manager管理系統(tǒng)(我自己用寫(xiě)的一個(gè)Hexo管理系統(tǒng))

Nginx配置

在整體架構(gòu)圖中,我的服務(wù)器有兩個(gè)服務(wù),一個(gè)是基于Hexo的博客服務(wù),一個(gè)是用于管理Hexo的Hexo-Manager服務(wù)。而我希望blog.robinwu.com的請(qǐng)求到博客系統(tǒng),而manager.robinwu.com的請(qǐng)求到Hexo-Manager服務(wù)。我原來(lái)用nodejs的時(shí)候,用express可以很好的解決這個(gè)問(wèn)題,但是用java寫(xiě)hexo-manager的時(shí)候,卻沒(méi)有找到比較好的方式,而且把兩個(gè)服務(wù)分開(kāi)會(huì)比較好,畢竟當(dāng)Hexo-Manager掛掉后,我還是希望博客服務(wù)可以繼續(xù)可用。

Nginx是一個(gè)高性能的HTTP和反向代理web服務(wù)器,所以我部署了一個(gè)Nginx在服務(wù)器上,用于請(qǐng)求轉(zhuǎn)發(fā)。

安裝Nginx

在mac和linux上安裝Nginx還是比較簡(jiǎn)單,至于windows,因?yàn)槲覜](méi)有安裝過(guò),所以大家如果相應(yīng)需求,可以自行g(shù)ogole下。

mac上安裝
brew install nginx
linxu安裝
yum install nginx

配置反向代理

在安裝完Nginx后,我們需要修改配置文件。

在linux中,配置文件路徑為/etc/nginx/nginx.conf

在mac中,配置文件路徑為/usr/local/etc/nginx/nginx.conf。

  client_max_body_size 20m; #上傳文件大小限制為20M
    server {
        listen       80 default_server;
        server_name  *.robinwu.com; # 域名
        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;
        if ($http_host ~* "^(.*?)\.robinwu\.com$") {    
            set $domain $1;                         
        }

        location / {
        if ($domain ~* "www") {
            root /usr/share/nginx/BlogSource/public; #Hexo生成目錄路徑
        }
        if ($domain ~* "blog") {
            root /usr/share/nginx/BlogSource/public;
        }
        if ($domain ~* "") {
            root /usr/share/nginx/BlogSource/public;
        }
        if ($domain ~* "manager") {
            proxy_pass http://localhost:8080; #Hexo-Manager的本地服務(wù)地址
            root index;
        }

        tcp_nodelay     on;
        proxy_read_timeout 300; #設(shè)置代理讀超時(shí)時(shí)間為5分鐘,必現(xiàn)上傳文件超時(shí)報(bào)錯(cuò)
        proxy_set_header Host            $host;
        proxy_set_header X-Real-IP       $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
       
        index index.html index.htm;
    
        }

        error_page 404 /404.html;
            location = /40x.html {
        }

        error_page 500 502 503 504 /50x.html;
            location = /50x.html {
        }
    }

上面的配置文件,就是我服務(wù)器上Nginx的配置項(xiàng),有幾個(gè)東西需要注意下:

  1. client_max_body_size 20m;
    這個(gè)配置項(xiàng)使用來(lái)配置上傳文件大小,如果超過(guò)這個(gè)值,Nginx就會(huì)報(bào)錯(cuò),我在Hexo-Manager也相應(yīng)做了這個(gè)限制。

  2. *server_name .robinwu.com;
    域名,可以根據(jù)自己的情況進(jìn)行修改

  3. **if (http_host ~* "^(.*?)\.robinwu\.com") **
    我需要讓Nginx根據(jù)blog和manager的前綴進(jìn)行轉(zhuǎn)發(fā)請(qǐng)求,所以這個(gè)正則是用來(lái)獲取這個(gè)前綴的

  4. root /usr/share/nginx/BlogSource/public;
    配置Hexo的生成文件地址,這個(gè)路徑必須是Nginx有權(quán)限的,所以建議跟我一樣,直接放到Nginx的目錄下

  5. proxy_read_timeout 300;
    Nginx到Hexo-Manager的轉(zhuǎn)發(fā)請(qǐng)求是有超時(shí)時(shí)間的,為了避免上傳文件超時(shí),所以我將這個(gè)值配置為300S

hexo博客源碼

hexo需要用ssh的方式clone到服務(wù)器上,建議目錄為/usr/share/nginx/,因?yàn)檫@樣就不需要再配置Nginx的訪問(wèn)權(quán)限了。

Hexo-Manager部署

在開(kāi)發(fā)Hexo-Manager的時(shí)候,我也不知道其他人是否也有這個(gè)需求,但是我還是盡量將大部分配置弄成可自定義的,附件大小除外,因?yàn)槲蚁肴绻粋€(gè)附件需要超過(guò)20M,還是在其他平臺(tái)上傳后,再?gòu)?fù)制到文檔中會(huì)比較好。

配置Hexo-Manager

Hexo-Manager的所有的配置都寫(xiě)在/data/hexo-manager/config.json

{
    "userName":"登錄的用戶名",
    "passWord":"登錄的密碼",
    "hexo.root.dir.path":"/Users/robinwu/Documents/Blog/BlogSource/",
    "hexo.posts.dir.path":"/Users/robinwu/Documents/Blog/BlogSource/source/_posts/",
    "hexo.drafts.dir.path":"/Users/robinwu/Documents/Blog/BlogSource/source/_drafts/",
    "oss.access.key.id":"",
    "oss.access.key.secret":"",
    "oss.endPoint":"",
    "oss.bucketName":"",
    "wechat.appId":"",
    "wechat.secret":"",
    "blog.url":"http://localhost"}

幾個(gè)配置項(xiàng)我解釋下:

  1. userNamepassWord
    hexo-manager是有登錄功能,畢竟是部署在外網(wǎng)的,所以需要賬號(hào)密碼

  2. hexo.root.dir.path
    用來(lái)配置Hexo在服務(wù)器上的相關(guān)路徑,記得最后面的/

  3. oss
    是用來(lái)配置阿里云的參數(shù)的,目前來(lái)說(shuō)一定要設(shè)置,如果有朋友不需要,可以跟我說(shuō)私信或者在簡(jiǎn)書(shū)評(píng)論,我可以做成可配置的,或者直接自己拿代碼改,后續(xù)我會(huì)把代碼開(kāi)源

  4. wechat
    是用配置微信公眾號(hào),目前來(lái)說(shuō)沒(méi)用,可以不填,因?yàn)槲野l(fā)現(xiàn)我的訂閱號(hào)是個(gè)人的,無(wú)法認(rèn)證,也就無(wú)法自動(dòng)發(fā)布博文,所以寫(xiě)一半就沒(méi)有繼續(xù)寫(xiě)了

  5. blog.url
    是用來(lái)從hexo-manager的文檔列表跳轉(zhuǎn)到具體博文頁(yè)面的

部署Hexo-Manager

下載安裝包:hexo-manager.zip

安裝包中有下面幾個(gè)文件:


安裝包
  1. config.json 為配置文件

  2. hexo-manager-0.0.1-SNAPSHOT.jar 是具體的應(yīng)用程序

  3. run.sh 當(dāng)應(yīng)用程序上傳到服務(wù)器上后,到具體目錄,就可以運(yùn)行此文件啟動(dòng)或者直接運(yùn)行nohup java -jar -Djava.security.egd=file:/dev/./urandom hexo-manager-0.0.1-SNAPSHOT.jar > access.log 2>&1 &

解釋下啟動(dòng)命令

  1. nohup和最后&
    配合使用,讓程序在后臺(tái)運(yùn)行,避免你退出后,程序也退出了,注意需要用exit來(lái)退出服務(wù)器

  2. java -jar
    啟動(dòng)jar程序

  3. -Djava.security.egd=file:/dev/./urandom
    我用UUID來(lái)生成登錄憑證,但是有時(shí)候這個(gè)過(guò)程會(huì)很慢,所以配置這個(gè),讓生成過(guò)程快點(diǎn)。

  4. > access.log 2>&1
    讓程序的命令行輸出都到access.log文件中

使用Hexo-Manager

登錄界面

當(dāng)你沒(méi)有登錄的時(shí)候,訪問(wèn)manager.robinwu.com的時(shí)候,都會(huì)跳轉(zhuǎn)登錄界面


登錄界面
Hexo管理界面

登錄過(guò)后,就會(huì)跳轉(zhuǎn)到Hexo管理頁(yè)面


Hexo管理界面

有幾個(gè)功能:

  1. git同步,當(dāng)上傳代碼的git倉(cāng)庫(kù),可以通過(guò)這個(gè)按鈕可以讓你服務(wù)器上的的Hexo代碼進(jìn)行g(shù)it同步
  2. clean,用來(lái)清除你服務(wù)器上的Hexo的生成文件,也就public目錄,具體命令為hexo clean
  3. 生成靜態(tài)文件,用來(lái)讓你服務(wù)器的上的Hexo生成靜態(tài)文件或者刷新,具體命令為hexo generate
Posts頁(yè)面

該頁(yè)面會(huì)展示你Hexo的_posts目錄里面的文件,并且提供相應(yīng)的連接可以跳轉(zhuǎn)到具體博文頁(yè)面、簡(jiǎn)書(shū)的編輯頁(yè)、微信公眾號(hào)的管理頁(yè)面,后面這兩個(gè)沒(méi)啥用,加進(jìn)去是讓自己方便點(diǎn),記得同步到簡(jiǎn)書(shū)和微信公眾號(hào)


Posts頁(yè)面
Drafts頁(yè)面

該頁(yè)面會(huì)展示你Hexo的_draft目錄里面的文件


Drafts頁(yè)面
上傳附件頁(yè)面

該頁(yè)面可以用來(lái)上傳服務(wù),上傳文件后,會(huì)返回一個(gè)url顯示在頁(yè)面上


上傳附件頁(yè)面

上傳結(jié)果展示

總結(jié)

每次做完以前想做的事情后,就會(huì)覺(jué)得好像就這樣,沒(méi)啥了不起的,也沒(méi)啥成就感,遠(yuǎn)遠(yuǎn)比不上過(guò)程中的充實(shí)。Hexo-Manager滿足我很早以前想要的git同步、hexo生成以及附件功能,但缺少了簡(jiǎn)書(shū)同步和微信公眾號(hào)的同步,有些遺憾。我也不知道有多少人會(huì)有和我同樣的需求,希望對(duì)一些同道中人有些幫助吧。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容