【跳坑指南】在vps上部署hexo博客的那些事

說在前面
本地使用macOS,vps系統爲debian 8;
雖說是跳坑指南,但是這篇文章本意也僅僅自用,總結一下自己遇到的問題和解決方法,僅供參考,如有其他問題請百度(google)

整體思路:
本地調試完的hexo項目文件通過git推送給vps,然後直接部署在vps上使用域名來訪問,這樣一個屬於自己的blog就可以完成了

圖片描述

本地環境

Git

Git是一個免費的開源分佈式版本控制系統,旨在快速,高效地處理從小型到大型項目的所有事務。這原是廣泛用在代碼的版本控制,在hexo建站裏面的主要作用是推送渲染好的靜態網頁文件到部署的倉庫。

下載Git與安裝

因爲本來我就有,所以這裏就不多介紹;
網上其他大佬也有很多教程

node.js

下載Node.js與安裝

同上,本地環境也有;

Hexo

Hexo是一個快速、簡潔且高效的靜態博客框架。安裝簡單,雖然網上教程一大堆,建議參考官方文檔。重要!官方文檔有中文 😃。

官方文檔
https://hexo.io/zh-cn/

安裝hexo

首先確保本地安裝好git和node.js,在終端中輸入
npm install -g hexo-cli

創建hexo項目(建站)

hexo init <folder> // 初始化項目文件夾;<folder>爲自定義hexo項目名稱
cd <folder> // 打開項目文件夾
npm install // 安裝依賴

完成上述步驟,查看自己的項目文件夾內,目錄應爲:

.
├── node_modules //依賴包
├── scaffolds // 模版
├── source // 文章資源
|   ├── _drafts //草稿
|   └── _posts //發佈文章
├── themes //主題
|   └── landscape //默認主題
├── package.json // npm配置文件(可以不用管它)
└── _config.yml //hexo配置文件

配置hexo
既然生成了博客了,那自然需要自己來配置一下自己的博客的信息,打開_config.yml文件進行配置;
具體配置參考官方文檔:https://hexo.io/zh-cn/docs/co...

下載主題
主題我挑了很久,最後選擇綜合症的我只有選了好多人推薦的next主題
next官方文檔:
https://github.com/theme-next...

下載
根據文檔給的方式使用git clone
git clone https://github.com/theme-next/hexo-theme-next themes/next

試了幾次,我一直報錯
'RPC failed; curl 18 transfer closed with outstanding read data remaining'

解決方案:
git config http.postBuffer 524288000
當然啦,依舊報錯,並沒有解決我的問題
參考:https://www.cnblogs.com/zjfja...

所以我將git clone裏的https地址換成了ssh地址,完美解決,雖然網速依然很慢,但是不報錯啊!
git clone [email protected]/theme-next/hexo-theme-next themes/next

主題配置
直接在項目文檔裏clone或者單獨clone後將next文件夾複製進項目的themes文件夾裏

.
├── themes //主題
|   ├── landscape //默認主題
|   └── next //新clone的next主題

並在hexo配置文件中更改主題

...
theme: next //更改主題
...

其他配置暫時就不說了,以後會再次具體寫

vps環境

vps

如何購買vps不在本文詳細敘述,不論在阿里雲還是騰訊雲還是海外譬如搬瓦工之類購買,都是差不多的,vps大同小異,不過好像是國內的服務器配置域名是需要實名認證的,但是海外的就不需要;
重新說明我的vps安裝的系統是debian 8,如果有和我一樣的小夥伴那麼我的接下里的配置就很有參考價值了,當然其他版本的系統原理和流程其實也是大同小異;

再多說一句,系統不同,安裝包的命令也是不同的:
rpm/yum適用於Redhat、CentOS、Suse等平臺;
apt-get/dpkg適用於Debian、Ubuntu等平臺;
請大家自己尋找對應的安裝包,我這邊用的是apt-get;

部署原理

本地hexo文本編輯後,使用git遠程部署到vps的git倉庫。hexo d只deploy本地打包後的public文件夾;
在vps的git倉庫裏使用git hooks,當git倉庫收到最新的push時,將git倉庫接受到的內容複製到VPS上的網站根目錄內;相當於完成了手動將public文件夾複製到vps的網站根目錄內

連接vps
我覺得如果看到這篇文章了,用ssh連接vps應該是都會的吧,那我就不說了;不會的請百度(谷歌) 😂

😤 算了,我稍微提一下,打開終端輸入
ssh 用戶名(一般是root)@vps的ip地址 -p 端口號
按照提示輸入密碼,出現[root@主機名~]#,登陸成功 😀

Git

安裝git

apt-get install git

查看版本號,用以確認安裝成功
git -version

創建git用戶

爲什麼要創建git用戶?
老實說,如果是自己一個人用的vps,那麼不用git用戶其實也沒啥,但是創建的意義就是用git用戶來管理git和代碼,而不用root,這樣更安全;

創建git用戶
adduser git
按照提示設置密碼

賦予git用戶sudo權限
chmod 740 /etc/sudoers #修改權限
vim /etc/sudoers #編輯該文件

  • 此時報錯,應該是我沒有vim命令

安裝vim
apt-get install vim

  • 此時我報錯了,出現沒有 /etc/sudoers 的提示

chmod: cannot access ‘/etc/sudoers’: No such file or directory
因該是沒有安裝sudo模塊
安裝sudo
apt-get install sudo
再次執行上述操作,成功 😃

修改如下內容

# User privilege specification
root    ALL=(ALL:ALL) ALL

修改後

# User privilege specification
root    ALL=(ALL:ALL) ALL
git     ALL=(ALL:ALL) ALL #添加此行內容

修改迴文件的權限
chmod 440 /etc/sudoers

切換git用戶,配置ssh
下載和上傳代碼的都是使用git這個用戶,但我們又不想要每次都輸入密碼,怎麼辦?
所以我們使用ssh證書,本地生成公鑰複製至服務端,每次登陸只要服務器自動覈對公鑰是否匹配即可

切換git用戶
su git

創建.ssh文件夾
mkdir ~/.ssh

創建authorized_keys文件並編輯,將公鑰複製進去即可
vim ~/.ssh/authorized_keys
保存退出

  • 本地

先在本地電腦中獲取公鑰,再將公鑰複製粘貼到authorized_keys
(本地)查看公鑰
cat ~/.ssh/id_rsa.pub | pbcopy

修改公鑰文件相應權限
chmod 600 ~/.ssh/authorzied_keys #只有擁有者有讀寫權限
chmod 700 ~/.ssh #只有擁有者有讀、寫、執行權限

返回本地客戶端,測試是否可以連接上服務器(此時應該免密登陸成功) 😃
ssh -v git@$ip -p $port
如果不成功請重試以上配置ssh步驟

配置git hooks

先確定自己想將項目的根目錄放在哪裏?
我的是這樣的:
/home/git/blog/blog.git #git倉庫
/home/git/blog/hexo #項目根目錄

初始化git倉庫
git init --bare blog.git
參數 --bare ,創建一個裸倉庫,不包含工作區

配置git hooks
我們這裏要使用的是 post-receive 的 hook,這個 hook 會在整個 git 操作過程完結以後被運行。hook詳情

在blog.git/hooks目錄下新建一個post-receive文件:
vim post-receive

文件中寫入:

#!/bin/sh
git --work-tree=/home/git/blog/hexo --git-dir=/home/git/blog/blog.git checkout -f

--work-tree 對應項目部署根目錄
--git-dir 對應版本庫目錄
保存退出

添加post-receive文件的可執行權限
chmod +x post-receive

blog.git的擁有者爲git用戶
chown -R git:git blog.git

禁用git用戶的shell登錄權限
vim /etc/passwd
找到
git:x:1001:1001:,,,:/home/git:/bin/bash
改爲
git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell
保存退出
這樣git用戶無法使用shell登陸,但可以通過ssh正常使用git推送

參考:https://www.cnblogs.com/navys...

多說一句
執行ll命令,確保以上blog.git、.ssh、blog目錄的用戶組權限爲git:git
ll /home/git

如果不是,執行
chown git:git -R /home/git/blog

nginx

安裝 nginx

安裝 Ngnix
apt-get install nginx

查看版本號(確認安裝成功)
nginx -v

配置 nginx

nginx.conf

配置文件路徑
/etc/nginx/nginx.conf
我看了看,不同vps版本系統的文件路徑不太一樣,請大家自己尋找對應系統的教程或者自己在系統裏尋找文件路徑

打開nginx.conf文件所在目錄
cd /etc/nginx

# 修改前先備份一下
cp nginx.conf nginx.conf.bak
# 修改配置文件
vim nginx.conf

修改配置文件中的server部分:

    server {
        # 默認80端口
        listen       80 default_server;
        listen       [::]:80 default_server;
        # 修改server_name爲自己之前註冊好的域名
        server_name  www.xksblog.top xksblog.top;
        # 修改網站根目錄,在這裏存放你的Hexo靜態文件,請自行選擇或創建目錄
        root         /home/git/blog/hexo;
        # 下面保持默認
        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;

        location / {
            root    /home/git/blog/hexo; #部署的blog根目錄
            index   index.html index.htm
        }

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

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

保存退出,使用nginx -t查看配置是否有錯誤

啓動ngnix
service nginx start
瀏覽器打開服務器public IP,檢查ngnix是否啓動成功

停止ngnix
nginx -s stop

重啓nginx
nginx -s reload

查看運行狀態
systemctl status nginx
顯示running表示成功運行

nginx.conf
cd /etc/nginx/sites-available //切換目錄
cp default default.bak //備份默認配置
vim default //修改配置

找到server,修改裏面所有的location和root

server {
    listen 80 default; #默認監聽80端口
    root /home/git/blog/hexo; #網站根目錄
    ...
}

重啓nginx
nginx -s reload

查看運行狀態
systemctl status nginx
顯示running表示成功運行

參考:
VPS搭建個人Hexo博客
Hexo搭建個人博客並使用Git部署到VPS

本地deploy

現在距離成功還有一步之遙

安裝deploy插件

npm install hexo-deployer-git --save

hexo 的 deploy 配置

打開hexo配置文件_config.yml, 找到deploy

# Deployment
## Docs: https://hexo.io/docs/deployment.html
deploy:
    type: git
    repo: git@VPS的IP:blog.git目錄
    branch: master

一般到這邊就可以直接hexo d了, 但是我報錯了,發現默認端口22是無法連接上的,因爲vps的默認端口不是22;
此時有兩種解決方法

  • 一種是修改vps的默認端口至22;
  • 第二種就是修改一下deploy的配置,從指定端口連接

我選擇第二種,方法如下:
repo: ssh://git@ip:port/blog.git目錄

推送部署
hexo d

此時用域名或者vps ip連接,自己的blog就完成了!😃

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章