mycpen

Mycpen

记录学习历程与受益知识
github
telegram
bilibili

04_Hexo-多平台部署-雲伺服器-GitHub-Gitee

一。開篇詞#

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 上傳速度如下圖

image-20220906115955982

  1. 使 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

  2. ./_config.yml 文件

    deploy:
    - type: rsync
      host: IP地址
      user: 使用者名稱
      root: 遠程主機的根目錄
      port: 22
      delete: true
      verbose: true
      ignore_errors: false
    

    參考 https://hexo.io/zh-cn/docs/one-command-deployment#Rsync

在傳大文件(也就 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;
}

三。注意點#

  1. 配置 SSH 免密

  2. 存儲目錄授權

    給工作樹路徑 /opt/www/hexo 777 權限,~~ 一開始沒授權 訪問報 403,環境為 CentOS 8.2;~~ 原因找到了,第 5 點。

  3. 開放端口。注意是否需要在雲伺服器新增安全組策略,80、443 端口需要打開;

  4. SELinux 等原因。

  5. 403 權限問題
    後面查詢發現了 403 的原因,Nginx 編譯安裝時我指定了啟動用戶為 普通用戶(默認為 nobody),導致起的工作進程權限不夠。而 Hexo 上傳的新的靜態文件權限不為 777。

    所以修改 Nginx 的啟動用戶為 root。

    $ vim /usr/local/nginx/conf/nginx.conf
    user    root;
    
    $ nginx -s reload
    

四。參考文章#

官方文檔 一鍵部署

* 使用 Git Hooks 部署至雲伺服器

使用 Git Hooks 部署至雲伺服器

使用 Git Hooks 部署至雲伺服器 新增 git 用戶、授權目錄

* 訪問 403 修改 Nginx 啟動用戶為 root

* 訪問 403 授權 777 目錄

訪問 403 CentOS 8 環境

訪問 403 SELinux 未關閉


載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。