天天看點

在vps上搭建hexo部落格

最近更換了伺服器,需要把自己的Hexo Next重新部署到新伺服器上,本文記錄一下在vps上搭建hexo部落格的過程。

在vps上搭建hexo部落格需要下面這些工具:

  1. Nginx: 用于部落格展示
  2. SSH:用于Git 推送
  3. Git: 用于将生成的靜态檔案推送到vps上

本文伺服器環境為CentOS 7.6

整體流程為:

在vps上搭建hexo部落格

設定SSH登入

想要完成Git推送,首先得設定SSH登入。過程如下:

# 添加hexo使用者
adduser hexo
# 切換到hexo使用者
su hexo
# 切換到hexo使用者目錄
cd /home/hexo
# 建立.ssh檔案夾
mkdir .ssh
# 建立authorized_keys檔案并編輯
vim .ssh/authorized_keys
# 如果你還沒有生成公鑰,那麼首先在本地電腦中執行 cat ~/.ssh/id_rsa.pub | pbcopy生成公鑰
# 再将公鑰複制粘貼到authorized_keys
# 儲存關閉authorized_keys後,修改相應權限
chmod 600 .ssh/authorized_keys
chmod 700 .ssh
           

測試是否設定成功:

ssh -v hexo@伺服器ip
           

Git

安裝Git

yum install git
           

配置post-update鈎子

Git的鈎子腳本位于版本庫.git/hooks目錄下,當Git執行特定操作時會調用特定的鈎子腳本。當版本庫通過git init或者git clone建立時,會在.git/hooks目錄下建立示例腳本,使用者可以參照示例腳本的寫法開發适合的鈎子腳本。

鈎子腳本要設定為可運作,并使用特定的名稱。Git提供的示例腳本都帶有.sample擴充名,是為了防止被意外運作。如果需要啟用相應的鈎子腳本,需要對其重命名(去掉.sample擴充名)。

post-update

該鈎子腳本由遠端版本庫的git receive-pack指令調用。當從本地版本庫完成一個推送之後,即當所有引用都更新完畢後,在遠端伺服器上該鈎子腳本被觸發執行。

是以我們需要配置post-update鈎子以便可以及時更新我們在VPS上存放Hexo 靜态檔案的目錄。

# 回到hexo目錄
cd /home/hexo
# 變成hexo使用者
su hexo
# 建立blog目錄存放hexo靜态檔案
mkdir /home/hexo/blog
# 使用hexo使用者建立git裸倉庫,以blog.git為例
git init --bare blog.git
# 進入鈎子檔案夾hooks
cd blog.git/hooks/
# 啟用post-update
mv post-update.sample post-update
# 添加執行權限
chmod +x post-update
# 配置post-update
vim post-update
           
  1. 注釋如下行:
exec git update-server-info
           
  1. 添加如下代碼:
git --work-tree="靜态檔案VPS存放目錄" --git-dir="剛才建立的VPS git位址" checkout -f
例:
git --work-tree=/home/hexo/blog --git-dir=/home/hexo/blog.git checkout -f
           

例:

在vps上搭建hexo部落格

Nginx

安裝Nginx

yum install nginx
           

使用

nginx -v

檢視,顯示版本号則安裝成功。

Nginx配置

server {
        # 預設80端口
        listen       80 default_server;
        listen       [::]:80 default_server;
        # 修改server_name為自己之前注冊好的域名,沒有就不用更改
        server_name  morethink.cn;
        # 修改網站根目錄,在這裡存放你的Hexo靜态檔案,請自行選擇或建立目錄
        root         /home/hexo/blog;
        # 其他保持不變
        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;

        location / {
        }

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

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

配置本地Hexo

找到本地Hexo部落格的站點配置檔案

_config.yml

,找到以下内容并修改:

deploy:
  type: git
  repo: hexo@你的伺服器IP:/home/git/blog.git
  branch: master
           

然後在根目錄執行以下指令:

hexo clean
hexo g -d
           
在vps上搭建hexo部落格

遇到的問題總結

  1. 如果無法推送到vps,請檢查hexo使用者是否有權限操作所需目錄
  2. 關于

    nginx root 403

    問題: 在我配置nginx碰到一個403問題,改了檔案權限還是403,後來發現是nginx.conf中 user預設設定錯了,把

    user nginx

    改成

    user root

    就好了。
  3. deploy成功之後無法通路
    1. 檢視vps靜态目錄是否有html檔案,沒有就是Git推送問題
    2. 檢視Nginx配置是否成功(通過

      systemctl status nginx.service -l

      檢視詳細錯誤)

參考文檔:

  1. https://www.worldhello.net/gotgit/08-git-misc/070-hooks-and-templates.html