在阿里云Ubuntu上搭建Hexo博客
采坑總結(jié)
1.阿里云端口開放
Ubuntu默認端口都開著耿戚,阿里云安全組會做個限制存淫,因此,這里要先在安全組打開80端口(或者你要開放的其他接口)
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-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 在瀏覽器能看到這個无宿,就說明成功了
服務(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
訪問路徑
更改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部署到阿里云
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)
比較詳細的主題描述,沒親測