基于阿里云服務(wù)器-搭建hexo-博客2020-12-02

在阿里云Ubuntu上搭建Hexo博客

采坑總結(jié)

1.阿里云端口開放

Ubuntu默認端口都開著耿戚,阿里云安全組會做個限制存淫,因此,這里要先在安全組打開80端口(或者你要開放的其他接口)

image-20201128145750657.png

2.在Docker下的NGINX我變更了一個默認目錄

docker run --name my-nginx -p80:80 -v /root/server/tools/nginx/conf.d:/etc/nginx/conf.d -v /root/server/tools/nginx/data:/root/data -d nginx:1.18.0

這里docker容器下的/root/data下 nginx訪問這個目錄沒有權(quán)限,因此nginx會返回403

我的處理方式是抖部,直接給nginx這個目錄的權(quán)限诺凡。(不過不建議在root下东揣,可以給nginx單獨建一個文件夾)

chmod -R 777 /root/data/hexo

還有一些其他的處理方式,參考下方鏈接

(64條消息) Nginx出現(xiàn)403 forbidden_楓小秋 的博客-CSDN博客

主要搭建流程

  • (客戶端)將markdown文件渲染為HTML的靜態(tài)文件

  • (客戶端)通過hexo發(fā)布到public文件夾

  • (客戶端)通過hexo deploy將生成的文件push到git倉庫

  • (服務(wù)端)通過git-hooks自動將倉庫checkout到nginx配置的網(wǎng)站根目錄下

步驟分解

1.本地安裝

  • 安裝nodejs && git
  • 安裝hexo-cli
  • 配置發(fā)布到服務(wù)器的腳本

2.服務(wù)端配置

  • 服務(wù)端安裝 git && docker && nginx-for-docker
  • 配置服務(wù)端倉庫腹泌,git賬號嘶卧,目錄
  • 配置git hooks
  • 配置nginx反向代理

本地安裝

git安裝
$ sudo apt-get install git

配置

$ git config --global user.name "frend"
$ git config --global user.email "1020952183@qq.com"

配置完成后,需要創(chuàng)建驗證用的公鑰凉袱,因為git是通過ssh的方式訪問資源庫的芥吟,所以需要在本地創(chuàng)建驗證用的文件。使用命令

生成sshkey

$ ssh-keygen -C "1020952183@qq.com" -t rsa

參考鏈接

Ubuntu下git的安裝與使用 - L.X.M - 博客園 (cnblogs.com)

nodejs的安裝
$ sudo wget https://nodejs.org/dist/v14.15.1/node-v14.15.1.tar.gz
#解壓縮
$ sudo tar -xvf node-v14.15.1.tar.gz
$ cd node-v14.15.1/
$ sudo ./configure

執(zhí)行./configure時出現(xiàn)一個異常

Traceback (most recent call last):
  File "./configure", line 20, in <module>
    from distutils.spawn import find_executable
ModuleNotFoundError: No module named 'distutils.spawn'

據(jù)查證专甩,少了python3-distutils(python啥地方都有啊~~~)

$ sudo apt-get install python3-distutils
$ sudo ./configure
Node.js configure: Found Python 3.8.2...
WARNING: failed to autodetect C++ compiler version (CXX=g++)
WARNING: warnings were emitted in the configure phase
INFO: configure completed successfully

執(zhí)行編譯和安裝

make[1]: g++: Command not found
make[1]: *** [tools/icu/icuucx.target.mk:301: /home/frend/dev/tools/nodejs/node-v14.15.1/out/Release/obj.target/icuucx/deps/icu-small/source/common/uvectr64.o] Error 127
make: *** [Makefile:104: node] Error 2

少了g++,安裝它

$ sudo apt-get install g++

因為我這里用的是mintlinux(基于ubuntu20钟鸵,版本太高了),提示版本沖突之類的涤躲,(這里是采坑過程棺耍,最后確定是ubuntu源的問題,如果沒興趣直接跳過這段)

下列軟件包有未滿足的依賴關(guān)系:
 g++ : 依賴: g++-7 (>= 7.4.0-1~) 但是它將不會被安裝
N: 忽略‘official-package-repositories.list_bak’(于目錄‘/etc/apt/sources.list.d/’)种樱,鑒于它的文件擴展名無效
E: 無法修正錯誤蒙袍,因為您要求某些軟件包保持現(xiàn)狀,就是它們破壞了軟件包間的依賴關(guān)系嫩挤。

這里有個依賴包的解決方案害幅,需要安裝aptitude

$ sudo apt-get install aptitude
#在用這種方式安裝
$ sudo aptitude install g++
下列動作將解決這些依賴關(guān)系:

     保持 下列軟件包于其當前版本:
1)     g++ [未安裝的]
2)     g++-7 [未安裝的]
3)     libc-dev-bin [未安裝的]
4)     libc6-dev [未安裝的]
5)     libstdc++-7-dev [未安裝的]

     保留下列未解決的依賴關(guān)系:
6)     gcc-7 推薦 libc6-dev (>= 2.13-0ubuntu6)
7)     libgcc-7-dev 推薦 libc6-dev (>= 2.13-0ubuntu6)

這里要觀察下,如果有些包配置不合理的岂昭,就不能繼續(xù)了以现,否則會導(dǎo)致系統(tǒng)奔潰

問題解決方案參考鏈接

(64條消息) ubuntu問題g++ : 依賴: g++-4.8 (>= 4.8.2-5~) 但是它將不會被安裝_sunshaozong111的博客-CSDN博客

配置ubuntu源

實際上,是我ubuntu源配錯了,附上清華大學(xué)的源

ubuntu | 鏡像站使用幫助 | 清華大學(xué)開源軟件鏡像站 | Tsinghua Open Source Mirror

編譯nodejs

$ sudo make(這個過程很漫長..)
$ sudo make install
$ sudo cp ./node /usr/sbin/
#測試下
frend@frend:~$ node -v
v14.15.1
設(shè)定nodejs源
$ npm config set registry https://registry.npm.taobao.org

參考

(轉(zhuǎn))nodejs npm國內(nèi)鏡像 - 秋葉leaf - 博客園 (cnblogs.com)

參考文檔

(64條消息) ubuntu18.04安裝最新nodejs_瘋子風(fēng)的博客-CSDN博客_nodejs ubuntu安裝

安裝hexo-cli

hexo-cli的安裝叼风,官方文檔

文檔 | Hexo

安裝hexo-cli

$ sudo npm install -g hexo-cli

初始化一個站點

$ hexo init blog
INFO  Cloning hexo-starter https://github.com/hexojs/hexo-starter.git
INFO  Install dependencies
added 185 packages from 440 contributors in 14.624s

14 packages are looking for funding
  run `npm fund` for details

INFO  Start blogging with Hexo!

這樣就可以了取董,啟動看看效果、

$ hexo s
INFO  Validating config
INFO  Start processing
INFO  Hexo is running at http://localhost:4000 . Press Ctrl+C to stop.

訪問localhost:4000 在瀏覽器能看到這個无宿,就說明成功了

image-20201130165020519.png

服務(wù)端配置

服務(wù)端安裝git

服務(wù)端安裝git和本地安裝git的方式一致茵汰,這里說說設(shè)置用戶

添加一個用戶

$ sudo adduser git
#修改一下授權(quán)
$ sudo chmod 740 /etc/sudoers
$ sudo vim /etc/sudoers
#找到這一行
# User privilege specification
root    ALL=(ALL:ALL) ALL
#將git添加進去
git     ALL=(ALL:ALL) ALL
#修改好之后,將權(quán)限還原
$ sudo chmod 400 /etc/sudoers
#git服務(wù)器打開RSA認證
$ sudo vim /etc/ssh/sshd_config
PubkeyAuthentication yes
AuthorizedKeysFile      .ssh/authorized_keys .ssh/authorized_keys2

修改git密碼

$ sudo passwd git
git(這里我密碼也給了git孽鸡,生產(chǎn)環(huán)境必須設(shè)定一個復(fù)雜的密碼)

切換 到git用戶 創(chuàng)建~/.ssh 和 ~/.ssh/authorized_keys文件

$ mkdir ~/.ssh
$ vim ~/.ssh/authorized_keys

然后從本地安裝的git中復(fù)制出 .ssh/id_rsa.pub的內(nèi)容

到服務(wù)器上的authorized_keys文件內(nèi)

#查看客戶端電腦上的rsa.pub
$ cat ~/.ssh/id_rsa.pub
#復(fù)制到服務(wù)器的以下路徑
~/.ssh/authorized_keys

測試一下ssh 能否免密登錄

$ ssh -v git@www.edayask.com
#可以看到能直接登進來蹂午,就說明git配置成功了
Last login: Mon Nov 30 16:35:53 2020 from 192.168.0.105
git@lo:~$

初始化一個git倉庫

$ sudo git init --bare hexo.git
設(shè)置hexo.git的目錄擁有者為git用戶
$ sudo chown -R git:git hexo.git

配置鉤子(提交之后觸發(fā))

在倉庫hexo.git下創(chuàng)建一個鉤子文件

touch hooks/post-receive

內(nèi)容

#!/bin/bash
git --work-tree=/home/frend/server/nginx/data/hexo --git-dir=/home/git/hexo.git checkout -f

給鉤子文件配置可執(zhí)行權(quán)限

$ chmod +x post-receive

注意,這里的--work-tree后面的路徑是要配置到的路徑 --git-dir是git倉庫的路徑彬碱,這個要根據(jù)自己的實際情況來定豆胸,這個鉤子的意圖是每次push之后,會把要部署的博客的內(nèi)容刷新到服務(wù)器的工作目錄巷疼,這樣就能達到自動部署的目的了晚胡。

服務(wù)端部署參考資料

Hexo部署在阿里云服務(wù)器上 - 簡書 (jianshu.com)

測試一下,本地能不能拉取到空倉庫

frend@frend-dev:~/dev/tmp$ git clone git@www.edayask.com:/home/git/hexo.git
Cloning into 'hexo'...
warning: You appear to have cloned an empty repository.

服務(wù)端安裝Docker和Docker-nginx

參考文件:應(yīng)用篇-Ubuntu18-安裝Docker-2020-12-02 - 簡書 (jianshu.com)
TODO

配置發(fā)布路徑

修改hexo的配置文件_config.yml

deploy:
  type: git
  repo: git@www.edayask.com:/home/git/hexo.git
  branch: master

安裝hexo-deployer-git這是一個集成git發(fā)布hexo的工具

$ sudo npm install --save hexo-deployer-git

配置package.json文件嚼沿,集成發(fā)布腳本,修改 deploy

"scripts": {
    "build": "hexo generate",
    "clean": "hexo clean",
    "deploy": "hexo clean && hexo g -d",
    "server": "hexo server"
}
#執(zhí)行發(fā)布
$ npm run deploy
//--省略部分日志
Branch 'master' set up to track remote branch 'master' from 'git@www.edayask.com:/home/git/hexo.git'.
INFO  Deploy done: git

看到 Deploy done表示發(fā)布成功估盘,此時,去服務(wù)器看看骡尽,有沒有被部署過去

~/server/nginx/data/hexo$ ls

發(fā)現(xiàn)這里并沒有被提交上來遣妥,經(jīng)過檢查,這個目錄是管理員的目錄攀细,git用戶是沒有權(quán)限的箫踩,因此,這里要給git用戶授權(quán)谭贪,可訪問境钟。

$ sudo chown -R git hexo

在查看一次

$ ls
2020  archives  css  fancybox  index.html  js

可以看到,文件已經(jīng)被發(fā)布到這個路徑了故河,接下來配置nginx

將root目錄指向到創(chuàng)建容器時映射的目錄吱韭,如果你忘了映射的目錄可以用以下命令查看

$ sudo docker inspect 容器名 | grep Mounts -A 20

配置nginx

location / {
    root /www/html/hexo;
    index index.html index.htm;
}

這里nginx默認是沒有權(quán)限訪問www/html目錄的吆豹,要給授權(quán)鱼的。

#進入nginx的容器中
$ sudo docker exec -it my-nginx bash
## 將www目錄給nginx用戶
$ chown nginx:nginx -R ./www/

重啟NGINX

$ sudo docker restart my-nginx

訪問路徑

image-20201201172912826.png

更改git用戶默認的shell

為了安全起見,上述創(chuàng)建的git賬號痘煤,不允許ssh登錄凑阶,只允許git訪問

cat /etc/shells # 查看 git-shell 是否在登錄方式里面
which git-shell # 找到git-shell的路徑,記下來
vim /etc/shells

然后把剛才記下來的路徑添加進去衷快,保存宙橱,然后vim /etc/passwd,把git:x:1000:1000::/home/git:/bin/bash修改為git:x:1000:1000:,,,:/home/git:/usr/bin/git-shell

這樣本地再用ssh應(yīng)該就沒法登錄了师郑,只能進行g(shù)it操作环葵。

至此,將hexo博客部署到阿里云就已經(jīng)完成了

參考鏈接

授權(quán)目錄|https://www.cnblogs.com/pangchunyu/p/12886372.html

查看容器的掛載目錄|docker:如何查看容器的掛載映射目錄-流觴 (lnmpweb.cn)

授權(quán)目錄2|https://blog.csdn.net/kl28978113/article/details/80493360

(64條消息) 記錄Hexo部署到阿里云服務(wù)器全過程_星速云-CSDN博客_hexo部署到阿里云

nginx Tags - Docker Hub

Hexo的官網(wǎng)|Hexo (edayask.com)

(64條消息) nginx配置靜態(tài)html_keybersan的博客-CSDN博客_nginx配置html

Hexo部署在阿里云服務(wù)器上 - 簡書 (jianshu.com)

幾個主題推薦的帖子

我還沒來得及弄主題宝冕,需要美化添加主題的张遭,可以參考以下幾個鏈接

(64條消息) Hexo 好看的主題推薦_浮沉半生的博客-CSDN博客_hexo主題

這個主題好評度很高

Molunerfinn/hexo-theme-melody: A simple & beautiful & fast theme for Hexo. (github.com)

比較詳細的主題描述,沒親測

(64條消息) Hexo+icarus主題配置_飛魚の博客-CSDN博客

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末地梨,一起剝皮案震驚了整個濱河市菊卷,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌宝剖,老刑警劉巖洁闰,帶你破解...
    沈念sama閱讀 206,482評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異万细,居然都是意外死亡扑眉,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評論 2 382
  • 文/潘曉璐 我一進店門赖钞,熙熙樓的掌柜王于貴愁眉苦臉地迎上來襟雷,“玉大人,你說我怎么就攤上這事仁烹∷逝” “怎么了?”我有些...
    開封第一講書人閱讀 152,762評論 0 342
  • 文/不壞的土叔 我叫張陵卓缰,是天一觀的道長计呈。 經(jīng)常有香客問我,道長征唬,這世上最難降的妖魔是什么捌显? 我笑而不...
    開封第一講書人閱讀 55,273評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮总寒,結(jié)果婚禮上扶歪,老公的妹妹穿的比我還像新娘。我一直安慰自己摄闸,他們只是感情好善镰,可當我...
    茶點故事閱讀 64,289評論 5 373
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著年枕,像睡著了一般炫欺。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上熏兄,一...
    開封第一講書人閱讀 49,046評論 1 285
  • 那天品洛,我揣著相機與錄音树姨,去河邊找鬼。 笑死桥状,一個胖子當著我的面吹牛帽揪,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播辅斟,決...
    沈念sama閱讀 38,351評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼台丛,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了砾肺?” 一聲冷哼從身側(cè)響起挽霉,我...
    開封第一講書人閱讀 36,988評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎变汪,沒想到半個月后侠坎,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,476評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡裙盾,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,948評論 2 324
  • 正文 我和宋清朗相戀三年实胸,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片番官。...
    茶點故事閱讀 38,064評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡庐完,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出徘熔,到底是詐尸還是另有隱情门躯,我是刑警寧澤,帶...
    沈念sama閱讀 33,712評論 4 323
  • 正文 年R本政府宣布酷师,位于F島的核電站讶凉,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏山孔。R本人自食惡果不足惜懂讯,卻給世界環(huán)境...
    茶點故事閱讀 39,261評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望台颠。 院中可真熱鬧褐望,春花似錦、人聲如沸串前。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,264評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽酪呻。三九已至减宣,卻和暖如春盐须,著一層夾襖步出監(jiān)牢的瞬間玩荠,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,486評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留阶冈,地道東北人闷尿。 一個月前我還...
    沈念sama閱讀 45,511評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像女坑,于是被迫代替她去往敵國和親填具。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,802評論 2 345

推薦閱讀更多精彩內(nèi)容