cjxd

cjxd

长恨此身非我有,何时忘却营营

Nginxを使用してHugoをクラウドサーバーにデプロイする

一、Nginx のインストール#

  1. Nginx のアンインストール
sudo apt-get purge nginx nginx-common # Nginxをアンインストールし、設定ファイルを削除します。
apt install nginx
  1. Nginx の一般的なコマンド
nginx -s stop       Nginxを迅速に停止し、関連情報を保存せずにwebサービスを終了します。
nginx -s quit       Nginxをスムーズに停止し、関連情報を保存してwebサービスを終了します。
nginx -s reload     Nginxの設定を変更したため、設定を再読み込みします。
nginx -s reopen     ログファイルを再オープンします。
nginx -c filename   Nginxにデフォルトの設定ファイルの代わりに指定の設定ファイルを指定します。
nginx -t            実行せずに設定ファイルをテストします。Nginxは設定ファイルの文法の正しさをチェックし、設定ファイルで参照されているファイルを開こうとします。
nginx -v            Nginxのバージョンを表示します。
nginx -V            Nginxのバージョン、コンパイラのバージョン、および設定パラメータを表示します。

毎回コマンドを入力したくない場合は、Nginx のインストールディレクトリに startup.bat という起動バッチファイルを新たに追加し、ダブルクリックで実行できます。内容は以下の通りです:

@echo off
rem 起動前にNginxが既に起動していてpidファイルが記録されている場合、指定されたプロセスをkillします
nginx.exe -s stop

rem 設定ファイルの文法の正しさをテストします
nginx.exe -t -c conf/nginx.conf

rem バージョン情報を表示します
nginx.exe -v

rem 指定された設定でNginxを起動します
nginx.exe -c conf/nginx.conf

Linux の場合は、以下のように書くと思いますが、正しいかどうかは未確認です。

#!/bin/sh

# 起動前にNginxが既に起動していてpidファイルが記録されている場合、指定されたプロセスをkillします
nginx -s stop

# 設定ファイルの文法の正しさをテストします
nginx -t -c conf/nginx.conf

# バージョン情報を表示します
nginx -v

# 指定された設定でNginxを起動します
nginx -c conf/nginx.conf

二、rsync を使用してpublicフォルダーをサーバーにアップロード#

rsync -avuz --progress --delete public/ root@ipアドレス:/home/public/

前提として VPS にも rsync をインストールする必要があります;Mac には標準でツールが付属しており、Windows プラットフォームでは Fz クライアントを使用してファイルを同期します。

apt install rsync

三、SSL 証明書の取得#

  1. CerBot クライアントを取得
install certbot
  1. 証明書を取得
certbot certonly --webroot -w /var/www/example -d example.com -d www.example.com

このコマンドは example.com と www.example.com の 2 つのドメインに対して証明書を生成します。--webroot モードを使用すると、/var/www/example に.well-known フォルダーが作成され、このフォルダーにはいくつかの検証ファイルが含まれます。certbot は example.com/.well-known/acme-challenge にアクセスすることで、あなたのドメインがこのサーバーにバインドされているかを検証します。このコマンドはほとんどのケースでニーズを満たすことができますが、時には私たちのサービスのいくつかにはルートディレクトリがない場合があります。例えば、マイクロサービスなどです。この場合、--webroot を使用することはできません。certbot には別のモード --standalone があります。このモードでは、ウェブサイトのルートディレクトリを指定する必要はなく、サーバーの 443 ポートを自動的に有効にしてドメインの所有権を検証します。他のサービス(例えば Nginx)が 443 ポートを占有している場合は、これらのサービスを停止し、証明書が生成された後に再度有効にする必要があります。

certbot certonly --standalone -d example.com -d www.example.com

証明書が生成された後、/etc/letsencrypt/live/ ディレクトリ内に対応するドメインのフォルダーが表示され、その中に証明書へのショートカットが保存されています。

これで最初の証明書の生成が完了しました。次は、ウェブサーバーの設定を行い、HTTPS を有効にします。

四、nginx の nginx.conf ファイルの設定#

/etc/nginx ディレクトリ内

# 設定する最初の場所、ここでのユーザーはrootに変更する必要があります。そうしないと権限がない可能性があります。
user root;

worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;

include /usr/share/nginx/modules/*.conf;

events {
    worker_connections 1024;
}

http {
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile            on;
    tcp_nopush          on;
    tcp_nodelay         on;
    keepalive_timeout   65;
    types_hash_max_size 2048;

    include             /etc/nginx/mime.types;
    default_type        application/octet-stream;

    include /etc/nginx/conf.d/*.conf;
    
    # httpの設定
    server {
        # 設定する2つ目の場所、80アクセスポート
        listen       80 default_server; 
        listen       [::]:80 default_server;
        
        # 設定する3つ目の場所、ドメイン名
        server_name blog.ryujinx.top;
        rewrite ^(.*) https://$server_name$1 permanent; # 自動的にhttpからhttpsにリダイレクト
        # 設定する4つ目の場所、ここでpublicフォルダーを指します
        root /home/public;

        include /etc/nginx/default.d/*.conf;
        
        # 設定する5つ目の場所
        location / {
            root /home/public;
            index  index.html index.htm;
        }
        
        # 設定する6つ目の場所
        error_page 404 /404.html;
        location = /40x.html {
            root   /home/public;
        }

        error_page 500 502 503 504 /50x.html;
            location = /50x.html {
        }
    }
    
    # httpsの設定
     server {
         listen 443 ssl;
         # 設定する7つ目の場所
         server_name blog.ryujinx.top;
         root /home/public;
         
         # 設定する8つ目の場所
         ssl_certificate /etc/letsencrypt/live/blog.ryujinx.top/fullchain.pem;
         ssl_certificate_key /etc/letsencrypt/live/blog.ryujinx.top/privkey.pem;
         
         # 設定する9つ目の場所、私の書き方に従ってください
         ssl_session_timeout 10m;
         ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
         ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
         ssl_prefer_server_ciphers on;
         
         # 設定する10の場所
         error_page 404 /404.html;
         location = /404.html {
              root /home/public;
         }

         include /etc/nginx/default.d/*.conf;
     }

}

ポート 80 は http サービスの設定に使用され、ポート 443 は https サービスの設定に使用されます。これで Nginx の設定が完了しました。

設定が完了したら、設定ファイルを再読み込みします。

sudo nginx -s reload

Nginx サービスの実行状況を確認します。

sudo systemctl status nginx

Nginx サービスを再起動します。

sudo systemctl restart nginx

今後の記事の公開#

rsync を使用してpublicフォルダーを同期するだけです。

注意事項#

1. SSL 証明書の自動更新#

SSL の有効期限は 90 日で、期限が切れると以下のコマンドで更新します。

certbot renew --dry-run

証明書を生成する際に--standaloneモードを使用した場合、ドメインを検証する際には443ポートを有効にする必要があります。このエラーは、有効にする必要があるポートがすでに占有されていることを意味します。この場合、nginxを一旦停止しなければなりません。実際にservice nginx stopを実行すると、エラーは発生せず、すべての証明書が正常に更新されました。

# cronスクリプトを作成
touch certbot-auto-renew-cron 
# ファイルに以下の内容を追加
15 2 * */2 * certbot renew --pre-hook "service nginx stop" --post-hook "service nginx start"

--pre-hookこのパラメータは、更新操作を実行する前に行う必要があることを示します。--standaloneモードの証明書があるため、nginxサービスを停止してポートの占有を解除する必要があります。--post-hookこのパラメータは、更新操作が完了した後に行う必要があることを示します。ここでは Nginx サービスを再度有効にします。

最後に、crontabを使用してこの定期タスクを開始します。

crontab certbot-auto-renew-cron

効率的な方法:npm の可視化インターフェースを使用して設定#

Docker-Compose で npm をインストール#

  1. このような docker-compose.yml ファイルを作成します:

    version: '3.8'
    services:
      app:
        image: 'jc21/nginx-proxy-manager:latest'
        restart: unless-stopped
        ports:
          - '80:80'
          - '81:81'
          - '443:443'
        volumes:
          - ./data:/data
          - ./letsencrypt:/etc/letsencrypt
    
  2. スタックを起動するには、次のコマンドを実行します。

    docker-compose up -d
    # docker-compose-pluginを使用している場合
    docker compose up -d
    
  3. 管理 UI にログインします
    http://localhost:81

    デフォルトの管理ユーザー:

    Email:    [email protected]
    Password: changeme
    

設定#

  1. detail ページに正しい IP を入力し、ブログのポートに 80 を入力し、すでに解析されているドメイン名を入力します。
  2. ssl タブで証明書を申請します。
  3. advanced にパスを入力します。
     location / {
       root /data/xxxx.github.io;
     }
    

    /data/xxxx.github.io は npm がインストールされたルートディレクトリからの相対パスで、対応するフォルダーに html フォルダーをアップロードします。
    具体的な使い方は nginx location [PATTERN] を参照してください。

参考#

hugo ブログを腾讯云軽量サーバーにデプロイ

Let's Encrypt の使用方法、無料の SSL 証明書であなたのウェブサイトを HTTPS に

Nginx の簡易チュートリアル

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