mycpen

Mycpen

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

04_Hexo-マルチプラットフォームデプロイ-クラウドサーバー-GitHub-Gitee

一。開篇詞#

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 のアップロード速度は以下の図の通りです

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: サイトが更新されました
  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;
}

三。注意点#

  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 が無効になっていない


読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。