一。開篇詞#
1.1 前言#
- 官方文檔介紹了 Hexo 可以同時
一鍵部署
到多個平台,只需要同時使用多個deployer
。
Hexo 提供了快速方便的一鍵部署功能,讓您只需一條命令就能將網站部署到伺服器上。
$ hexo deploy
在開始之前,您必須先在
_config.yml
中修改參數,一個正確的部署配置中至少要有type
參數,例如:deploy: type: git
您可同時使用多個 deployer,Hexo 會依照順序執行每個 deployer。
deploy: - type: git repo: - type: heroku repo:
1.2. 說明#
- 使用
Git Hooks
同步 Hexo 生成的靜態文件。(後期我棄用 git,改用 rsync 了)
二。步驟#
2.1 雲伺服器創建 Git 倉庫#
$ cd /opt/git/
$ git init --bare hexo.git # 創建 Hexo 遠程倉庫 git init --bare 倉庫名.git
$ cd /opt/git/hexo.git/hooks/
$ vim post-receive
#!/bin/bash
git --work-tree=/opt/www/hexo --git-dir=/opt/git/hexo.git checkout -f
# --work-tree=/opt/www/hexo 設置工作樹的路徑
# --git-dir=/opt/git/hexo.git 設置存儲庫的路徑
$ chmod +x post-receive # 給鉤子文件添加執行權限
$ mkdir /opt/www/hexo # 創建工作樹路徑
$ chmod -R 777 /opt/www/hexo # 授權,否則到後面訪問報 403
2.1.2 deployer 使用 rsync 進行部署#
前言:後面發現使用 git 上傳至雲伺服器速度太慢了(不清楚啥原因),改用 rsync。
git 上傳速度如下圖
-
使 git bash 支持 rsync(Windows)
參考
https://blog.csdn.net/m0_48613893/article/details/124104757
https://blog.csdn.net/qq_38689395/article/details/125758842
如果文件重複,就跳過
如果出錯就修改文件名.\usr\bin\msys-xxhash-0.8.0.dll → msys-xxhash-0.dll
-
./_config.yml
文件deploy: - type: rsync host: IP地址 user: 使用者名稱 root: 遠程主機的根目錄 port: 22 delete: true verbose: true ignore_errors: false
在傳大文件(也就 10M)時依舊很慢,但比前者速度快些。
2.2 配置本地 Hexo _config.yml#
./_config.yml
文件,同步部署GitHub、Gitee、雲伺服器
# Deployment - 部署
## Docs: https://hexo.io/zh-cn/docs/one-command-deployment.html
deploy:
- type: git
repository: root@IP地址:/opt/git/hexo.git
branch: master
commit: Site updated
message: hexo {{ now('YYYYMMDD') }}
- type: git
repository: git@github.com:mycpen/mycpen.github.io.git
branch: main
commit: Site updated
message: hexo {{ now('YYYYMMDD') }} # message為自定義提交信息,默認為 Site updated: YYYY-MM-DD HH:mm:ss
- type: git
repository: git@gitee.com:mycpen/mycpen.gitee.io.git
branch: master
commit: Site updated
message: hexo {{ now('YYYYMMDD') }}
2.3 配置 SSH 免密登錄#
- 本地 SSH 公鑰 如
~/.ssh/id_rsa.pub
內容添加至雲伺服器~/.ssh/authorized_keys
中
2.4 部署#
- 本地 Hexo 源文件項目下敲
hexo clean ; hexo g ; hexo d
2.5 使用 NGINX 做 Web 伺服器#
- 新增虛擬主機配置
$ cat /usr/local/nginx/conf/conf.d/blog.cpen.top.conf
server {
listen 80;
listen 443 ssl;
server_name blog.cpen.top;
error_page 404 /404.html;
# 強制HTTPS跳轉
if ($scheme = "http") {
return 307 https://$host$request_uri;
}
root /opt/www/hexo;
ssl_certificate /usr/local/nginx/ssl/blog.cpen.top.pem;
ssl_certificate_key /usr/local/nginx/ssl/blog.cpen.top.key;
access_log /data/service_logs/nginx/blog.cpen.top_access.log misc;
error_log /data/service_logs/nginx/blog.cpen.top_error.log;
}
- 最後瀏覽器訪問 https://blog.cpen.top/
三。注意點#
-
配置 SSH
免密
; -
存儲目錄
授權
;給工作樹路徑 /opt/www/hexo 777 權限,~~ 一開始沒授權 訪問報 403,環境為 CentOS 8.2;~~ 原因找到了,第 5 點。
-
開放端口。注意是否需要在雲伺服器新增
安全組策略
,80、443 端口需要打開; -
SELinux 等原因。
-
403 權限問題
後面查詢發現了403
的原因,Nginx 編譯安裝時我指定了啟動用戶為 普通用戶(默認為 nobody),導致起的工作進程權限不夠。而 Hexo 上傳的新的靜態文件權限不為 777。所以修改 Nginx 的啟動用戶為 root。
$ vim /usr/local/nginx/conf/nginx.conf user root; $ nginx -s reload
四。參考文章#
使用 Git Hooks 部署至雲伺服器 新增 git 用戶、授權目錄