title: hexo部署到服務器
date: 2020-02-23 09:09:25
comments: true
toc: true
top: false
categories:
- [筆記,hexo]
tags: [hexo,github,webhook]
不使用github pages,改為自己的服務器。將代碼托管到gtihub,使用webhook實現github與服務器同步推送代碼,並且安裝hexo-admin來實現后台管理與服務器到github上的推送。
購買服務器
服務器商千千萬,自行挑選一個靠譜的。
注意:國內各服務商有學生優惠套餐,但是只能購買大陸服務器,且大陸服務器需要備案才能使用,備案很麻煩,要花十幾到二十天左右。但是便宜穩定。
進入服務商的購買頁面,選擇配置。
若是一鍵選擇套餐購買,需要選擇地區、選擇服務器的配置、選擇服務器鏡像系統、服務器帶寬(越大則服務器能承受的壓力越大)、購買時長。
若是自定義配置,需要選擇購買的計時方式、配置的詳細選擇,更多的系統選擇以及自定義鏡像、存儲空間。
總結就是越強越貴,時間越長越貴。個人博客不需要非常好的配置,推薦系統選擇linux
注意:大陸服務器需要至少購買3個月時長才可以進行備案。
假如是國外服務器,則購買后可以直接進行部署了。如果是頭鐵選了國內,則需要先進行備案(大概20天左右。備案流程放到最后。)
我使用的寶塔控制面板,簡單方便無腦。安裝寶塔后,可以在控制面板進行操作來操作自己的服務器。
注:若服務器操作過程出現無法挽回的問題,可以在服務器控制台重裝系統。
連接服務器
首先下載putty、xhell等連接工具,我使用的是finalshell,用哪個都可以,原理都一樣,用服務器商自帶的登陸功能也可以。打開后界面如圖。
點擊文件夾,新建一個連接,選擇SSH連接
名稱自定義,主機為上一步的ip地址。填寫完后點擊確定。
(國外服務器可勾選智能加速,國內則不勾選)此時我使用的是美國服務器,所以勾選了海外加速。
可以看到新建了一個服務器連接,ssr為剛剛自定義的名稱,后面有ip地址和端口號,和服務器主機名。
雙擊該連接,進入服務器,連接成功出現如圖所示界面。
如果出現該窗口
點接受並保存。
部署到服務器
解析域名
注:若github page有綁定域名的話,先把綁定解除,並且將解析暫停,否則會沖突。
到域名管理處,點擊解析
按照如圖所示添加兩條記錄,一個主機記錄選@
(直接輸入域名即可進入網站),一個選www
(前面加上www可進入網站),也可以自定義一個前綴,但在后面站點配置時要加進去。
記錄類型選A,指向一個IP地址,然后在記錄值處填自己服務器的公網IP。
主機記錄說明:
安裝寶塔面板
根據官方教程進行安裝。
若安裝完成不能使用,則需要放行端口:
騰訊雲:https://www.bt.cn/bbs/thread-1229-1-1.html
進入服務器,根據自身系統輸入安裝命令,命令失效則看官方教程,有備用命令
Centos安裝命令:
yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh
Ubuntu/Deepin安裝命令:
wget -O install.sh http://download.bt.cn/install/install-ubuntu_6.0.sh && sudo bash install.sh
Debian安裝命令:
wget -O install.sh http://download.bt.cn/install/install-ubuntu_6.0.sh && bash install.sh
Fedora安裝命令:
wget -O install.sh http://download.bt.cn/install/install_6.0.sh && bash install.sh
以cenOS為例:
輸入命令進行安裝
輸入y,安裝寶塔,然后稍等片刻
如圖安裝完成,會顯示控制面板的url以及用戶名和密碼
安裝完成后,就可以關閉finalShell了,打開瀏覽器,輸入該地址,並輸入剛剛顯示的用戶名和密碼,進入面板
這里建議進入后修改登陸面板的帳號與密碼,不使用默認生成的。並且將面板的網址保存起來,方便以后直接輸入網址進入面板。
進入面板后,會出現如下提示,進行安裝軟件。可以根據需求進行安裝,也可以直接點一鍵安裝,推薦LNMP,且選擇極速安裝,編譯安裝太慢。
創建站點
寶塔面板安裝完成后,在導航欄點擊網站,選擇添加站點。
設置如下,在域名處填寫自己的域名,可填寫多個 (填寫進的域名在解析完成后可以訪問到該網站)
生成站點后,點擊網站名或者后面的設置,可以進入站點設置來添加一些新的域名以及二級域名等等。
其中abc為自定義的二級域名,想不想設置隨意。設置了就需要在解析時填寫對應的主機記錄。
點擊添加后如下,這樣用戶可以通過以下域名訪問到該服務器部署的網站,如果不想讓github.io的地址也訪問到該服務器,可以刪除。
添加的域名需要解析到服務器才可以正常使用。
添加完成后關閉設置即可。
最后到域名管理處。進行解析。添加記錄如下
- 記錄值:www和@各添加一次,
- 記錄類型:選A
- 線路類型:默認
- 記錄值:你的服務器IP地址
結果如下(若有自定義二級域名等等,需要再添加上。)
等待幾分鍾生效,即可通過域名訪問該服務器。
使用webhook實現同步頁面
雖然服務器是配置好了,但是寶塔並不支持代碼托管,也就是說使用hexo d
命令推送的代碼並不能推到寶塔上來實現更新網站。於是使用webhook來實現與github代碼同步。
原理:
安裝寶塔WebHook
在寶塔面板導航欄點擊軟件商店。搜索 webhook
點擊安裝。
配置webhook
安裝完成后,點擊設置,(可以勾選首頁顯示。)
點擊添加,名稱隨意,執行腳本先隨便填寫一點內容,點擊提交后再編輯腳本。
(若出現編輯不能保存的情況,則在寶塔面板的右上角點修復)
添加完成后點擊編輯,刪除原來隨意填寫的內容,添加如下代碼並修改gitHttp。
注:
- 原代碼有一個$1變量,在后面的密鑰部分的URL地址最后通過param=X,將X作為 該變量傳入腳本,但因為我無論怎么改都會出現參數錯誤,因此將該變量刪掉了。然后改一下代碼,將$1的參數替換為固定的值,只要站點目錄存在就沒問題。
- 大概是因為自己設置了保存博客源代碼的分支為默認分支的原因,用原代碼里面的有一句
git pull
總是拉不過來文件,在服務器上手動拉取發現拉取的是博客源代碼的分支。故在原代碼中將git pull
改成git pull origin master
來指定拉取靜態頁面的分支。
#!/bin/bash
echo ""
#輸出當前時間
date --date='0 days ago' "+%Y-%m-%d %H:%M:%S"
echo "Start"
#git項目路徑
gitPath="/www/wwwroot/【站點根目錄】"
#git 網址
gitHttp="【倉庫git地址】"
echo "Web站點路徑:$gitPath"
#判斷項目路徑是否存在
if [ -d "$gitPath" ]; then
cd $gitPath
#判斷是否存在git目錄
if [ ! -d ".git" ]; then
echo "在該目錄下克隆 git"
sudo -Hu www git clone $gitHttp gittemp --depth=1
sudo mv gittemp/.git .
sudo rm -rf gittemp
fi
#拉取最新的項目文件
echo "拉取最新文件"
sudo -Hu www git reset --hard origin/master
sudo -Hu www git pull origin master
#設置目錄權限
echo "設置目錄權限"
sudo chown -R www:www $gitPath
echo "End"
exit
else
echo "該項目路徑不存在"
echo "End"
exit
fi
更新: 在指令語句前加入sudo,授予管理員權限,避免執行失敗
gitHttp路徑為github代碼倉庫的地址,需要到代碼庫中查看(帶.git尾綴的地址,即hexo部署時配置 _config.yml
時填寫的地址。),點擊復制鍵進行復制
粘貼后格式應該如下
gitHttp="https://github.com/XXXXXX.git"
隨后點擊右下角的保存即可。
github配置hook
編輯完成后,點擊查看密鑰
復制好密鑰以及下方URL的&
前面的內容(全復制也可以)
進入github的網站代碼庫的設置,導航欄選webhook,然后點擊Add webhook
填寫內容
填寫好后點擊Add webhook。
然后回到面板,點擊測試,然后在日志中查看結果。
同時回到github的webhook界面,編輯剛剛的鈎子
在最下面可以看到成功的信息。
這樣以后在本地進行的deploy,服務器最自動鈎取github倉庫的master分支,實現將博客部署到服務器上。然后使用域名就可以進行訪問(不要加https://)。
添加SSL證書,開啟https協議
注:若出現訪問拒絕的話,注意是否加了https協議。
沒有配置SSL證書的話,用https訪問會被拒絕。SSL證書有收費的也有免費的。
寶塔自帶免費證書,但要求實名認證。
接下來以個人服務商騰訊雲的免費證書為例,
按步驟填寫即可注冊證書。添加后下載證書,然后解壓。
若關閉了界面,可以在SSL證書處下載證書
打開下載好的文件夾,打開Apache
打開.crt
和.key
結尾的文件。
然后在寶塔面板進入站點的設置,圖中點擊網站名或者設置都可以
如圖,在SSL界面其他證書里,將.key
結尾的密鑰放入左邊,.crt
結尾的證書放入右邊,保存,然后強制HTTPS,即可開啟https協議。
源代碼同步到服務器(舍棄)
更新(必看):
本來是想的利用hexo-admin實現在服務器上開啟后台管理,然后就能實現理想中的功能:
-
本地操作完博客后,源代碼+靜態頁面+文章都可以同步到服務器上
-
服務器操作完博客后,源代碼+靜態頁面+文章也都同步到本地
這樣的話,我可以在本地嘗試修改主題與配置,滿意后進行推送同步到服務器。在沒有hexo與git環境時(如臨時用其他電腦或者用手機),然后又不能安裝或者不想安裝的話,可以通過hexo-admin后台來寫文章並deploy,等到了自己的電腦上直接克隆就可以完成同步了。
但在配置時發現了一個問題,hexo-admin提供的deploy功能貌似僅支持以hexo開頭的命令,如hexo d
、hexo new "文章名"
,我試圖加入git命令然后就報錯了。
這就導致我能成功將本地的源代碼、靜態頁面推送到服務器,但是用hexo-admin新建然后寫的文章是沒辦法自動保存到github上來克隆到本地的。再考慮到安裝插件的問題,一些功能需要安裝一些插件(如音樂播放器、live2D、加入視頻等等)。插件是不會被推送的,若想推送插件的話,每次推送都要等待很長時間。
綜上,故暫時舍棄源代碼同步到服務器,讓服務器僅保存靜態頁面就行了。所以下面的內容可以不用看了。
PS:關於能否使用git命令的問題已經提交到github上的Issues,如果有解決辦法的話希望能留言告訴我。
在服務器上部署hexo
關於CentOS的安裝git、Node.js我遇到一些問題,參考了下面兩篇文章完美解決,故這里就不說安裝方法了,直接看這兩篇就行了。
CentOS安裝Git參考鏈接:
https://www.cnblogs.com/imyalost/p/8715688.html
注:Hexo需要10版本以上才能支持,默認安裝的話版本開頭為6,需要安裝最新版本才可以,我就用默認安裝Node.js的方法結果最后hexo安裝失敗。
CentOS安裝最新版Node.js參考鏈接:
https://www.jianshu.com/p/4a9449506924
安裝hexo指令:
npm install hexo-cli -g
警告不用理會。
克隆保存在github上的博客代碼
通過cd命令切換到想保存博客根目錄的文件夾下,例如我打算把博客的根目錄放在 /www下,則輸入cd /www
,
然后克隆在github上的博客源代碼,例如我的命令為
git clone https://github.com/lluuiq/lluuiq.github.io.git
,后面是倉庫地址,改為自己的。
git clone 【倉庫地址】
這樣在輸入該指令的文件夾下會出現【yourusername】.github.io的文件夾,里面放着博客的源代碼。
若想改個名字的話,在包含根目錄的文件夾下(我的是/www)輸入下面指令
mv 【yourusername】.github.io 【newname】
我將文件夾名稱改為wa2000,下面的wa2000文件夾都是博客根目錄。
在服務器上的hexo根目錄已經建成,接下來就是同步github上的源代碼倉庫,使得當github倉庫的文件更新時,服務器上的博客源代碼也會同步更新。
服務器上的hexo同步github
寶塔與webhook安裝
步驟同 部署到服務器
設置webhook
與上方內容相同,但需要更改的是分支名選擇存放博客目錄的分支
個人的配置(參照修改)
git項目路徑:gitPath="/www/wa2000"
git網址:gitHttp="https://github.com/lluuiq/lluuiq.github.io.git"
分支名:source
#!/bin/bash
echo ""
#輸出當前時間
date --date='0 days ago' "+%Y-%m-%d %H:%M:%S"
echo "Start"
#git項目路徑
gitPath="【你的博客根目錄地址】"
#git 網址
gitHttp="【你的倉庫地址】"
echo "Web站點路徑:$gitPath"
#判斷項目路徑是否存在
if [ -d "$gitPath" ]; then
cd $gitPath
#判斷是否存在git目錄
if [ ! -d ".git" ]; then
echo "在該目錄下克隆 git"
git clone $gitHttp gittemp
mv gittemp/.git .
rm -rf gittemp
fi
#拉取最新的項目文件
git reset --hard origin/【你的分支名】
git pull
#設置目錄權限
chown -R www:www $gitPath
echo "End"
exit
else
echo "該項目路徑不存在"
echo "End"
exit
fi
添加webhook后,參考上方內容與倉庫進行鏈接即可。
創建站點
如圖點擊添加站點。
添加域名可以加前綴,但加了前綴也要加入對應的解析。根目錄后面一定要是public文件夾,生成的靜態頁面會保存在該文件夾中,只有將該文件夾設為根目錄網站才會正常顯示,最后點擊提交即可創建。
然后回到服務器,安裝必要包
npm install hexo --save
npm install --save hexo-deployer-git
輸入github的用戶名與密碼
git config --global user.email "【github郵箱】"
git config --global user.name "【github用戶名】"
配置SSH
配置SSH免去每次推送都要帳號密碼,任意地方輸入下方指令,【注釋】部分可用自己郵箱,github,也可以不加-C
ssh-keygen -t rsa -C "【注釋】"
中間都按回車就行了,然后到ssh存放的地方
cd ~/.ssh
vim id_rsa.pub
打開id_rsa.pub后,復制里面的公鑰(用finalshell的話直接在下方的文件目錄里雙擊打開也可以)
然后到如圖地方添加公鑰
然后到倉庫的地方,復制ssh地址
(若本來就是ssh地址則跳過)打開根目錄的配置文件_config.yml,將deploy下的repository改為ssh地址。
在博客的根目錄下生成靜態頁面並嘗試推送到github
hexo clean
hexo g
hexo d
注:若出現下方情況則使用下方命令刪除.user.ini
chattr -i 【.user.ini路徑】
rm -rf 【.user.ini路徑】
若出現下方情況則修改ssh配置
vim /etc/ssh/sshd_config
找到 RSAAuthentication與PubkeyAuthentication,將注釋去掉,並確定AuthorizedKeysFile后面為.ssh/authorized_keys
且可用。
然后重啟ssh服務。
/sbin/service sshd restart
再次執行hexo d
可能會出現下方警告
該警告是讓你將github的IP加入host,可以無視,也可以加進去去掉警告。
vim /etc/hosts
然后在里面加入【警告中的IP地址】 github.com
,保存並退出即可。
清除、生成、推送都成功后,重啟寶塔面板
/etc/init.d/bt restart
重啟后,在本地使用推送將博客源代碼推到github時,服務器上會自動拉取進行同步。
接下來就是在服務器上開啟遠程后台管理了。
開啟后台管理(舍棄)
使用hexo-admin插件開啟后台管理功能,可以通過網頁進入后台管理文章,也可以通過內置的腳本實現部署與推送。
放行4000端口
到寶塔面板的安全里放行4000端口,說明隨意填。
以騰訊雲為例,到服務器的管理處放行4000端口。
注意:hexo s
命令不支持https,在輸入網站時不要加https
測試推送
git操作官方文檔,或者百度git指令查詢詳細用法。
在根目錄處執行下方執行指令
git add .
git commit -m "【更新說明,隨便填】"
git push origin 【博客源代碼分支名】
出現上方提示說明可以進行推送。
如果保存源代碼的分支不是默認的,要在git push
后面空一格加上origin 【博客源代碼分支名】
若提示
則輸入
git remote add origin 【github倉庫的ssh地址】
編寫腳本
在根目錄創建一個文件夾存放腳本(直接放根目錄也行,但后面記得更改配置的路徑),名稱隨意,我用admin作為文件夾名,deploy作為腳本名。然后進入創建的文件夾,新建並編輯一個腳本文件
我的代碼為mkdir admin
與vim deploy.sh
mkdir 【新建的文件夾】
cd 【創建的文件夾】
vim 【腳本名】.sh
在腳本文件中輸入下方指令,“save blog”里面是更新說明,自定義填寫。
#!/usr/bin/env sh
hexo g
hexo d
然后按ESC,接着輸入:wq
保存並退出。
這樣當用后台管理時,會先生成靜態頁面,再進行部署,部署完成后會將源代碼推送到github。
可自行修改需要的命令,例如加入hexo clean
,也可以加一些其他自己需要的命令。
為剛剛腳本授予權限
chmod +x 【腳本名】.sh
然后執行該腳本看看效果,如果一切順利,則可以進行下一步。效果大概如圖:
腳本配置好后,開啟開機自動啟動hexo s
命令來啟動后台,因為hexo-admin
在創建的存放腳本的文件夾中新建自啟腳本(同樣名稱自定義)
cd 【存放腳本的文件夾】
vim 【自啟腳本文件名】.sh
然后輸入命令,cd后面的路徑要換成自己的博客根目錄路徑,例如我的為cd /www/wa2000
#!/bin/bash
cd 【博客根目錄路徑】
hexo s
寫完后同樣按ESC,輸入:wq
保存並退出
添加權限
chmod +x 【自啟腳本名】.sh
然后返回服務器的根目錄,打開etc/rc.d/rc.local
cd ~
vim /etc/rc.d/rc.local
在下面添加腳本路徑,如我的腳本存放目錄為/www/blog/admin/server.sh
,添加效果如下
然后保存並退出。
執行下方命令授權
chmod +x /etc/rc.d/rc.local
然后重啟服務器
reboot
稍等片刻進入http://【域名】:4000
,若能進入,說明配置成功。
安裝hexo-admin並配置
參考文檔:Easy Hexo hexo-admin官網
服務器上進入博客根目錄,然后輸入命令安裝hexo-admin
npm install --save hexo-admin
安裝完成后即可通過http://【域名】:4000/admin
進入后台。接下來進行一些配置。
進入后台的設置界面,點擊紅框內的鏈接。
如圖,填入登陸后台用的用戶名與密碼,secret能為密碼進行加密,隨意填自己喜歡的短語就行。
將生成的代碼拷貝到博客根目錄下的配置文件_config.yml
中,並添加deployCommand
deployCommand的內容單引號內為一條指令
./admin/deploy.sh
指運行保存在admin文件夾內的deploy.sh,將路徑改為自己的腳本運行指令即可。
保存,然后重啟服務器。
關於網站備案的瑣事
到購買服務器/域名的服務商那里有詳細的備案流程說明,這里僅記錄個人備案遇到的坑。以騰訊雲舉例。
-
國家規定服務器需要購買至少3個月才能備案
學生套餐優惠只能購買三次,一次最短購買一個月時長,最長為一年時長,本來抱着試試的心態只買了一個月,結果發現居然要至少3個月才能備案,於是只能再去用學生套餐來延長時長,本來三次機會,結果花了兩次機會只買了一年一個月,如果確定想用大陸服務器並且想長時間使用的話,建議一次購買最長時長,10元/月算非常便宜了。
-
審核時間長
首先需要先為域名進行實名認證,實名認證后備案需要申請幕布進行拍照(給你郵過去,免郵),等幕布到了以后按要求拍照並上傳,填寫關於網站的資料以及服務器的資料,最后提交。
大概騰訊那邊審核一兩天,然后騰訊幫你提交到審核局審核個10天左右(最晚一個月,個人經歷時間為10天左右),審核通過后會給你工信部備案號,但還要到全國互聯網安全管理服務平台再提交一次備案,不過這個審核較快,一天就通過了。通過后會給你聯網備案號。
以百度為例
上面的為工信部備案號,下面的為聯網備案號。
-
關於在全國互聯網安全管理服務平台備案
注意:里面有一個為網站填寫信息的,有個選擇網站是否為交互類型,如果不是論壇、有注冊功能的那種一定要選擇否,選是的話需要到當地公安局一趟進行當面審核。這是為了保證網站安全所以需要到公安局進行審核,並且填寫大概7-8頁厚的表格。