一。開篇詞#
1.1 前言#
- 公式ドキュメントでは、Hexo が同時にワンクリックデプロイを複数のプラットフォームに行うことができると紹介しています。複数のdeployerを同時に使用するだけです。
Hexo は迅速で便利なワンクリックデプロイ機能を提供しており、1 つのコマンドでウェブサイトをサーバーにデプロイできます。
$ 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: サイトが更新されました
  message: hexo {{ now('YYYYMMDD') }}
- type: git
  repository: git@github.com:mycpen/mycpen.github.io.git
  branch: main
  commit: サイトが更新されました
  message: hexo {{ now('YYYYMMDD') }}       # messageはカスタムコミットメッセージで、デフォルトはサイトが更新されました: YYYY-MM-DD HH:mm:ss
- type: git
  repository: git@gitee.com:mycpen/mycpen.gitee.io.git
  branch: master
  commit: サイトが更新されました
  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 Hooks を使用してクラウドサーバーにデプロイ 新しい git ユーザー、権限ディレクトリを追加
* 403 エラーのアクセス Nginx の起動ユーザーを root に変更
403 エラーのアクセス SELinux が無効になっていない
