nginx+WordPressで個人ブログを構築するプロセス全体の詳細な説明

nginx+WordPressで個人ブログを構築するプロセス全体の詳細な説明

0x00 はじめに

WordPress は、世界で最も人気のある CMS システムです。PHP と MySQL のテクノロジー スタックをベースとしており、多くのプラグインを備えているため、拡張性が非常に高くなっています。最近、たまたま余った ECS があったので、楽しみのために 1 つ作ってみました。このチュートリアルは、LEMP テクノロジー スタックに基づいて構築されています。バージョンは次のとおりです。

  1. LバージョンはCentOS7.6です。
  2. Eバージョンはnginx1.12.2です
  3. MバージョンはDistrib 5.5.60-MariaDBです
  4. Pバージョンはphp7.2です

さらに、完全なhttpsがトレンドになっており、当然遅れるわけにはいかないので、Let's Encryptを使用して構成用の無料のSSL証明書も生成します。

0x01 前提条件

  • ドメイン名があります。私のドメイン名はnomansky.xyzです
  • VPSまたはクラウドサーバーは、国内IPの場合は登録が必要です
  • sudoまたはroot権限を持つユーザー。ここでは、プログラムを実行するための新しいWordPressユーザーを作成し、次のコマンドを使用してnologinに設定します。
    • a. sudo useradd -s /sbin/nologin wordpress
  • sudo yum install -y epel-release を使用して epel ソースをインストールしました
  • ファイアウォールをオフにします。セキュリティ強化のために iptables を使用することをお勧めします。
    • a. sudo systemctl stop ファイアウォールd
    • b. sudo systemctl でfirewalldを無効にする

0x02 nginxをインストールする

  • sudo yum install nginx を実行して nginx をインストールします。
  • nginxデーモンを起動し、起動時に自動的に起動するように設定します。
    • a. sudo systemctl start nginx
    • b. sudo systemctl enable nginx
  • wordpressユーザーをnginxグループに追加します(usermod -a -G nginx wordpress)、ディレクトリの権限を設定します(chmod 770 -R /var/lib/nginx/)。
  • この時点で、http://nomansky.xyz にアクセスすると、次のページが表示されます。これは、nginx が正常にインストールされたことを意味します。

0x03Mariadbをインストールする

Mariadb は MySQL のオープンソース ブランチとして、MySQL に代わる CentOS のデフォルト データベースとして使用されているので、ここでもデータベースとして Mariadb を使用します。

  • sudo yum install mariadb-server -yを実行してmariadbをインストールします。
  • Mariadbを起動し、起動時に自動的に起動するように設定します。
    • a. sudo systemctl でmariadbを起動します
    • b. sudo systemctl を有効にする mariadb
  • Mariadb を保護するには、sudo mysql_secure_installation を実行します。データベースのルートパスワードの設定、匿名ユーザーの削除、データベースのルートユーザーをローカルホストに制限、テストデータベースの削除の要件が表示されます。以下の図に示すように、これらすべてにY (はい) を選択することをお勧めします。デフォルトのデータベースのルートパスワードは空白です。

さらに、mariadbがリッスンするアドレスを127.0.0.1:3306変更する必要があります。

a. vim /etc/my.cnf.d/server.cnf実行してMariadb設定ファイルを開きます。

b. [mysqld]の下にbind=127.0.0.1を追加します。


c. systemctl restart mariadbを実行してデータベースを再起動します。

d. netstat -lntpを実行すると、ローカル ループバック アドレスをリッスンしていることがわかります。

0x04 データベースを作成する

mariadbデータベースをインストールして強化した後は、当然、データを保存するための新しいデータベースを作成する必要があります。ここでは、最初に以前に設定したルートアカウントのパスワードを使用してデータベースにログインします。mysql mysql -uroot -p 、次のステートメントを実行します。

CREATE DATABASE wordpress CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; # データベースを作成 GRANT ALL ON wordpress.* TO 'wordpress'@'localhost' IDENTIFIED BY 'your password'; # ユーザーを作成 FLUSH PRIVILEGES; # データベース権限を更新 EXIT;

0x05 PHPをインストールする

CentOSのデフォルトのPHPバージョンは5.4ですが、WordPressの推奨バージョンは7.2なので、ここではPHP 7.2バージョンをインストールします。以下のコマンドを実行して、PHPと必要なPHP拡張機能をすべてインストールします。

sudo yum yum-utilsをインストールします
sudo yum インストール http://rpms.remirepo.net/enterprise/remi-release-7.rpm
sudo yum-config-manager --enable remi-php72
sudo yum インストール php-cli php-fpm php-mysql php-json php-opcache php-mbstring php-xml php-gd php-curl

私たちは Web サーバーとして Nginx を使用していますが、Nginx にはこのコンポーネントが付属していないため、PHP FPM をインストールします。さらに、PHP FPM はデフォルトでポート 9000 で apache ユーザーとして実行されます。このユーザーを wordpress に変更し、TCP ソケットから Unix ソケットに変更します。変更方法の詳細については、以下の手順を参照してください。

/etc/php-fpm.d/www.confを開き、以下の箇所を修正します。

...
ユーザー = wordpress
...
グループ = wordpress
...
listen = /run/php-fpm/www.sock
...
listen.owner = wordpress
listen.group = ワードプレス

sudo chown -R root:wordpress /var/lib/phpコマンドを使用して、ディレクトリのすべてのグループ権限がwordpressであることを確認します。

PHP FPMを自動的に再起動して起動する

a. sudo systemctl restart php-fpm
b. sudo systemctl enable php-fpm

0x06 無料証明書を申請する

技術オタクとして、無料の証明書が利用できる場合は必ずそれを利用します。したがって、無料の Let's Encrypt 証明書を申請することができます。これは無料であるだけでなく、非常に使いやすいものです。有効期間は 90 日間のみですが、スクリプト構成 crontab を通じて定期的に更新できます。

a. mkdir -p /etc/nginx/sslディレクトリに証明書が保存されます

b. openssl genrsa 4096 > account.keyこのディレクトリに入り、Let's Encryptがあなたを識別するためのRSA秘密鍵を作成します

c. openssl genrsa 4096 > domain.keyてドメイン名の RSA 秘密鍵を作成します。

d. openssl req -new -sha256 -key domain.key -out domain.csr秘密鍵ファイルを使用して、CSR ファイルを生成できます。 CSR を生成するときに、いくつかの情報を入力するよう求められます。ここで、Common Name はドメイン名です。

CA が DV (ドメイン検証) 証明書を発行する場合、ドメイン名の所有権を確認する必要があることはわかっています。従来の CA 検証方法では、通常、[email protected] に検証メールを送信しますが、Let's Encrypt はサーバー上にランダムな検証ファイルを生成し、CSR の作成時に指定したドメイン名を通じてそのファイルにアクセスします。アクセスできる場合、ドメイン名を制御できることを意味します。まず、検証ファイルを保存するディレクトリを作成します。例:
mkdir /home/wordpress/challenges

次に、Nginx を例にして HTTP サービスを設定します。

サーバー{
  サーバー名 www.nomansky.xyz nomansky.xyz;

  場所 ^~ /.well-known/acme-challenge/ {
    エイリアス /home/wordpress/challenges/;
    try_files $uri =404;
  }

  位置 / {
    ^/(.*)$ https://nomansky.xyz/$1 を永久に書き換えます。
  }
}

上記の設定は、/home/wordpress/challenges/ ディレクトリ内のファイルを検索し、見つからない場合は HTTPS アドレスにリダイレクトすることを意味します。この検証サービスは、将来証明書を更新するときに再度使用されるため、常に保持する必要があります。

次に、acme-tiny を ssl ディレクトリに保存しますwget https://raw.githubusercontent.com/diafygi/acme-tiny/master/acme_tiny.py

次に、アカウントの秘密鍵、CSR、検証ディレクトリを指定して、スクリプトpython acme_tiny.py --account-key ./account.key --csr ./domain.csr --acme-dir /home/wordpress/challenges/ > ./signed.crtを実行し、次の図を確認します。これは、生成が成功したことを意味します。

最後に、Let's Encrypt の中間証明書をダウンロードする必要があります。HTTPS 証明書を構成するときは、中間証明書を省略したり、ルート証明書を含めたりしないでください。 Nginx の設定では、中間証明書と Web サイト証明書を組み合わせる必要があります。

wget -O - https://letsencrypt.org/certs/lets-encrypt-x3-cross-signed.pem > 中間.pem
cat signed.crt 中間.pem > 連鎖.pem

後でOCSP Staplingをスムーズに有効化するために、ルート証明書と中間証明書を結合します(この手順は省略することもできます)

wget -O - https://letsencrypt.org/certs/isrgrootx1.pem > root.pem
cat 中間.pem ルート.pem > フルチェーン.pem

Let's Encrypt によって発行された証明書は 90 日間のみ有効です。スクリプトを使用して定期的に更新することをお勧めします。 renew_cert.shを作成し、 chmod a+x renew_cert.shで実行権限を付与します。ファイルの内容は次のとおりです。

#!/bin/bash

/etc/nginx/ssl/ をコピーします
python acme_tiny.py --account-key account.key --csr domain.csr --acme-dir /home/wordpress/challenges/ > signed.crt || exit
wget -O - https://letsencrypt.org/certs/lets-encrypt-x3-cross-signed.pem > 中間.pem
cat signed.crt 中間.pem > 連鎖.pem
systemctl nginx を再起動します

crontabl 0 0 1 * * /etc/nginx/ssl/renew_cert.sh >/dev/null 2>&1でスケジュールされたタスクを設定します

0x07 WordPressをダウンロードしてNginxを設定する

WordPressを/home/wordpress/ディレクトリにダウンロードしますwget https://wordpress.org/latest.tar.gz

tar zxvf latest.tar.gz実行してWordPressファイルを抽出します。

chown -R wordpress:wordpress wordpress wordpressディレクトリの所有者をwordpressユーザーに変更します

次に、 vim /etc/nginx/nginx.confを開き、nginxの実行ロールをwordpressに変更します。

···
ユーザー wordpress;
ワーカープロセスは自動です。
···

次に、分離を目的として、メイン構成ファイル nginx.conf 内のサーバー構成ブロックをコメント アウトします。

新しいsudo mkdir /etc/nginx/snippetsディレクトリを作成し、 vim letsencrypt.confを実行して次の設定を貼り付けます。

場所 ^~ /.well-known/acme-challenge/ {
   エイリアス /home/wordpress/challenges/;
   try_files $uri =404;
}

次に、新しいvim /etc/nginx/conf.d/wordpress.conf設定ファイルを作成し、次の設定に変更します。

 # HTTP -> HTTPS にリダイレクト
  サーバー{
    聞く 80;
    サーバー名 www.nomansky.xyz nomansky.xyz;

    snippets/letsencrypt.conf を含めます。
    301 https://nomansky.xyz$request_uri を返します。
  }

  # WWW を NON WWW にリダイレクト
  サーバー{
    443 ssl http2 をリッスンします。
    サーバー名 www.nomansky.xyz;

    ssl_certificate /etc/nginx/ssl/chained.pem;
    ssl_certificate_key /etc/nginx/ssl/domain.key;

    301 https://nomansky.com$request_uri を返します。
  }

  サーバー{
    443 ssl http2 をリッスンします。
    サーバー名 nomansky.com;

    ルート /home/wordpress/wordpress;
    インデックスindex.php;

    # SSLパラメータ
    ssl_certificate /etc/nginx/ssl/chained.pem;
    ssl_certificate_key /etc/nginx/ssl/domain.key;

    # ログファイル
    アクセスログ /home/wordpress/log/nomansky.xyz.access.log;
    error_log /home/wordpress/log/nomansky.xyz.error.log;

    場所 = /favicon.ico {
      log_not_found オフ;
      access_log オフ;
    }
    
          場所 = /robots.txt {
      すべて許可する。
      log_not_found オフ;
      access_log オフ;
    }

    位置 / {
      try_files $uri $uri/ /index.php?$args;
    }

    場所 ~ \.php$ {
      try_files $uri =404;
      fastcgi_pass unix:/run/php-fpm/www.sock;
      fastcgi_index インデックス.php;
      fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
      fastcgi_params を含めます。
    }

    場所 ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ {
      有効期限が最大になります。
      log_not_found オフ;
    }

ログディレクトリmkdir -p /home/wordpress/logを作成し、権限を設定しますchown -R wordpress:wordpress /home/wordpress/log

nginx -t構文チェックが正常かどうかを確認します。正常であれば、 nginx -s reload nginx をリロードします。

次に、WordPress ページが正常に開かれ、完了していることが確認できます。

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • WordPress をベースに個人ブログをゼロから構築する方法を教える 6 つのステップ
  • ホストNginx + Docker WordPress Mysqlを設定するための詳細な手順
  • Nginx 環境での WordPress マルチサイト構成の詳細な説明
  • Nginx で WordPress 擬似静的を設定する方法の例
  • Nginx で WordPress を設定する方法
  • WordPress ウェブサイトのアクセスが遅い問題を解決する方法に関する詳細なグラフィックチュートリアル

<<:  Vue はグラフィック検証コードログインを実装します

>>:  MySQL はエンタープライズレベルのログ管理、バックアップ、リカバリの実践的なチュートリアルを実装します

推薦する

Vue で jsx 構文を正しく使用する方法

目次序文仮想DOM仮想DOMとは仮想DOMの利点レンダリング関数とは何ですか? jsx Vue3 で...

mysql binlog ログを正しくクリーンアップする 2 つの方法

mysqlはbinlogログを正しくクリーンアップします序文: MySQL の binlog はデー...

MySQL GRANT ユーザー認証の実装

承認とは、ユーザーに特定の権限を付与することです。たとえば、新しく作成したユーザーに、すべてのデータ...

Centos7 での python3 のインストールとアンインストールに関するチュートリアル

1. Python 3をインストールする1. 依存パッケージをインストールしますyum instal...

MySQL パーティション テーブルの基本入門チュートリアル

序文最近のプロジェクトでは、大量のデータを保存する必要があり、このデータには有効期限があります。クエ...

portainer を使用してリモート docker に接続するチュートリアル

Portainer は、Docker ホストと Docker Swarm クラスターの管理に使用でき...

HTML入力ファイルコントロールはアップロードされるファイルの種類を制限します

入力ファイルの HTML コントロールを Web ページに追加します。 <input id=&...

MySQLはカバーインデックスを使用してテーブルリターンを回避し、クエリを最適化します。

序文カバーリング インデックスについて説明する前に、まずそのデータ構造である B+ ツリーを理解する...

MySQLの共同クエリ最適化メカニズムの詳細な説明

目次MySQL フェデレーテッド クエリ実行戦略。実行計画フェデレーテッドクエリオプティマイザーMy...

jQueryとCSSを組み合わせてトップに戻る機能を実現

CSS操作 CS $("").css(名前|プロ|[,値|関数]) 位置$(&q...

VirtualBox仮想マシンがNATモードで外部ネットワークに接続できない問題の解決策

背景VirtualBox 仮想マシン (Ubuntu 16.04 システムがロードされている) には...

WangEditor リッチ テキスト コンポーネントを Angular でカプセル化する方法

リッチ テキスト コンポーネントは、Web プログラムで、特にブログやフォーラムなどの Web サイ...

MySQLデータをOracleに移行する正しい方法

mysql データベースには student テーブルがあり、その構造は次のとおりです。 Oracl...

クリーンなコードのための Web デザインの 12 の法則 [グラフィック]

美しいコードは美しい Web サイトの基礎です。優れた CSS は、同様に優れた HTML の上にの...

Mysql はテーブル内の古いデータを定期的にクリアし、いくつかのデータを保持します (推奨)

以下の目標を達成するため: Mysql データベースは、一定の間隔 (2 時間または 1 日、カスタ...