一。開篇詞#
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 が無効になっていない