Linux、Nginx、MySQL、PHP(LEMP)スタックをCentOS 7にインストールする方法

前書き

LEMPソフトウェアスタックは、サーバーが動的なWebサイトおよびWebアプリをホストできるようにするために通常一緒にインストールされるオープンソースソフトウェアのグループです。 この用語は、実際にはLinuxオペレーティングシステムを表す頭字語であり、ENginx Webサーバー(LAMPスタックのApacheコンポーネントを置き換える)を備えています。 サイトデータは(MariaDBを使用して)MySQLデータベースに保存され、動的コンテンツはPHPによって処理されます。

このガイドでは、CentOS 7 VPSにLEMPスタックをインストールします。 CentOSは、最初の要件であるLinuxオペレーティングシステムを満たします。

[.note]#Note: LEMPスタックは、起動時にユーザーデータにthis scriptを追加することで、ドロップレットに自動的にインストールできます。 ドロップレットユーザーデータの詳細については、this tutorialを確認してください。

前提条件

このガイドを開始する前に、サーバーに別の非ルートユーザーアカウントを設定する必要があります。 initial server setup for CentOS 7のステップ1〜4を完了することで、これを行う方法を学ぶことができます。

Note about SELinux: Nginxが実行されていないという問題が発生した場合は、Nginx構成ファイルのSELinuxコンテキストが正しいことを確認するか、SELinuxモードをpermissiveまたはdisabledに変更してください。

[[step-one -—- install-nginx]] ==ステップ1—Nginxをインストールします

サイト訪問者にWebページを表示するために、最新の効率的なWebサーバーであるNginxを採用します。

CentOS 7 EPELリポジトリを追加するには、ターミナルを開き、次のコマンドを使用します。

sudo yum install epel-release

sudoコマンドを使用しているため、これらの操作はroot権限で実行されます。 root権限でコマンドを実行する権限があることを確認するために、通常のユーザーのパスワードを求められます。

Nginxリポジトリがサーバーにインストールされたので、次のyumコマンドを使用してNginxをインストールします。

sudo yum install nginx

その後、Webサーバーがインストールされます。

インストールしたら、VPSでNginxを起動できます。

sudo systemctl start nginx

WebブラウザーでサーバーのパブリックIPアドレスにアクセスすることで、すぐにスポットチェックを実行して、すべてが計画どおりに行われたことを確認できます(この情報がない場合は、パブリックIPアドレスが何であるかを確認するために次の見出しの下のメモを参照してください)既に):

Open in a web browser:http://server_domain_name_or_IP/

デフォルトのCentOS 7 Nginx Webページが表示されます。これは、情報提供およびテスト目的であります。 これは次のようになります。

CentOS 7 Nginx Default

このページが表示された場合、Webサーバーは正しくインストールされています。

続行する前に、起動時にNginxを起動できるようにすることをお勧めします。 これを行うには、次のコマンドを使用します。

sudo systemctl enable nginx

サーバーのパブリックIPアドレスを見つける方法

サーバーのパブリックIPアドレスがわからない場合は、いくつかの方法で見つけることができます。 通常、これはSSH経由でサーバーに接続するために使用するアドレスです。

コマンドラインから、これをいくつかの方法で見つけることができます。 まず、iproute2ツールを使用して、次のように入力して住所を取得できます。

ip addr show eth0 | grep inet | awk '{ print $2; }' | sed 's/\/.*$//'

これにより、1つまたは2つの行が返されます。 どちらも正しいアドレスですが、お使いのコンピューターはどちらか一方しか使用できない可能性がありますので、それぞれを試してみてください。

別の方法は、外部の関係者を使用して、itがサーバーをどのように認識しているかを通知することです。 これを行うには、特定のサーバーにIPアドレスを尋ねます。

curl http://icanhazip.com

IPアドレスを取得する方法に関係なく、Webブラウザーのアドレスバーに入力してサーバーにアクセスできます。

[[step-two --- install-mysql-mariadb]] ==ステップ2— MySQL(MariaDB)をインストールします

Webサーバーが稼働しているので、次はMySQLのドロップイン代替品であるMariaDBをインストールします。 MariaDBは、コミュニティが開発したMySQLリレーショナルデータベース管理システムのフォークです。 基本的に、サイトが情報を保存できるデータベースを整理し、アクセスを提供します。

ここでも、yumを使用してソフトウェアを取得してインストールできます。 今回は、コンポーネントが相互に通信できるようにする他の「ヘルパー」パッケージもインストールします。

sudo yum install mariadb-server mariadb

インストールが完了したら、次のコマンドでMariaDBを起動する必要があります。

sudo systemctl start mariadb

MySQLデータベースが実行されたので、危険なデフォルトを削除し、データベースシステムへのアクセスを少し制限する簡単なセキュリティスクリプトを実行します。 次を実行して、インタラクティブスクリプトを開始します。

sudo mysql_secure_installation

プロンプトが表示され、現在のルートパスワードが求められます。 MySQLをインストールしたばかりなので、おそらくMySQLがないので、Enterキーを押して空白のままにします。 次に、rootパスワードを設定するかどうかを尋ねるプロンプトが表示されます。 先に進み、Yと入力して、指示に従います。

mysql_secure_installation prompts:Enter current password for root (enter for none):
OK, successfully used password, moving on...

Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorisation.

New password: password
Re-enter new password: password
Password updated successfully!
Reloading privilege tables..
 ... Success!

残りの質問については、各プロンプトで「ENTER」キーを押してデフォルト値を受け入れる必要があります。 これにより、一部のサンプルユーザーとデータベースが削除され、リモートルートログインが無効になり、これらの新しいルールがロードされるため、MySQLはすぐに変更を反映します。

最後にしたいことは、MariaDBを起動時に起動できるようにすることです。 これを行うには、次のコマンドを使用します。

sudo systemctl enable mariadb

この時点で、データベースシステムがセットアップされ、先に進むことができます。

[[step-three --- install-php]] ==ステップ3—PHPをインストールします

PHPは、動的コンテンツを表示するコードを処理するセットアップのコンポーネントです。 スクリプトを実行し、MySQLデータベースに接続して情報を取得し、処理されたコンテンツをWebサーバーに渡して表示できます。

もう一度、yumシステムを利用してコンポーネントをインストールできます。 php-mysqlおよびphp-fpmパッケージも含める予定です。

sudo yum install php php-mysql php-fpm

PHPプロセッサを構成する

これでPHPコンポーネントがインストールされましたが、セットアップをより安全にするために少し構成を変更する必要があります。

root権限でメインのphp-fpm構成ファイルを開きます。

sudo vi /etc/php.ini

このファイルで探しているのは、cgi.fix_pathinfoを設定するパラメーターです。 これはセミコロン(;)でコメント化され、デフォルトで「1」に設定されます。

これは、PHPファイルが完全に一致しない場合に検出できる最も近いファイルを実行しようとするようにPHPに指示するため、非常に安全でない設定です。 これにより基本的に、ユーザーは実行を許可されないスクリプトを実行できるようにPHPリクエストを作成できます。

行のコメントを外し、次のように「0」に設定することで、これらの両方の条件を変更します。

/etc/php.ini excerpt

cgi.fix_pathinfo=0

完了したら、ファイルを保存して閉じます。

次に、php-fpm構成ファイルwww.confを開きます。

sudo vi /etc/php-fpm.d/www.conf

listenパラメータを指定する行を見つけて、次のように変更します。

/etc/php-php.d/www.conf — 1 of 3

listen = /var/run/php-fpm/php-fpm.sock

次に、listen.ownerlisten.groupを設定する行を見つけて、コメントを解除します。 彼らはこのように見えるはずです:

/etc/php-php.d/www.conf — 2 of 3

listen.owner = nobody
listen.group = nobody

最後に、usergroupを設定する行を見つけて、それらの値を「apache」から「nginx」に変更します。

/etc/php-php.d/www.conf — 3 of 3

user = nginx
group = nginx

その後、保存して終了します。

ここで、次のように入力してPHPプロセッサを起動するだけです。

sudo systemctl start php-fpm

これにより、行った変更が実装されます。

次に、ブート時にphp-fpmを開始できるようにします。

sudo systemctl enable php-fpm

[[step-four -—- configure-nginx-to-process-php-pages]] ==ステップ4—PHPページを処理するようにNginxを構成する

これで、必要なコンポーネントがすべてインストールされました。 まだ必要な設定変更は、動的コンテンツにPHPプロセッサを使用するようにNginxに指示することだけです。

これはサーバーブロックレベルで行います(サーバーブロックはApache仮想ホストに似ています)。 次のように入力して、デフォルトのNginxサーバーブロック構成ファイルを開きます。

sudo vi /etc/nginx/conf.d/default.conf

現在、コメントを削除すると、Nginxのデフォルトサーバーブロックは次のようになります。

/etc/nginx/conf.d/default.conf — original

server {
    listen       80;
    server_name  localhost;

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}

サイトのこのファイルに変更を加える必要があります。

  • 最初に、ディレクトリが要求されたときにPHPインデックスファイルを提供できるように、indexディレクティブの最初の値としてindex.phpオプションを追加する必要があります

  • また、server_nameディレクティブを変更して、サーバーのドメイン名またはパブリックIPアドレスを指すようにする必要があります

  • 実際の構成ファイルには、エラー処理ルーチンを定義するコメントアウトされた行が含まれています。 その機能を含めるためにコメントを外します

  • 実際のPHP処理では、別のセクションの一部のコメントを外す必要があります。 また、try_filesディレクティブを追加して、NginxがPHPプロセッサに不正なリクエストを渡さないようにする必要があります。

必要な変更は、下のテキストでは赤で表示されています。 必要に応じて、すべてをコピーして貼り付けてから、server_nameの値を適切なドメイン名またはIPアドレスに置き換えます。

/etc/nginx/conf.d/default.conf — updated

server {
    listen       80;
    server_name  server_domain_name_or_IP;

    # note that these lines are originally from the "location /" block
    root   /usr/share/nginx/html;
    index index.php index.html index.htm;

    location / {
        try_files $uri $uri/ =404;
    }
    error_page 404 /404.html;
    error_page 500 502 503 504 /50x.html;
    location = /50x.html {
        root /usr/share/nginx/html;
    }

    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}

上記の変更を行ったら、ファイルを保存して閉じることができます。

Nginxを再起動して、必要な変更を加えます。

sudo systemctl restart nginx

[[step-five -—- test-php-processing-on-your-web-server]] ==ステップ5—WebサーバーでPHP処理をテストする

システムがPHP用に適切に構成されていることをテストするために、非常に基本的なPHPスクリプトを作成できます。

このスクリプトをinfo.phpと呼びます。 Apacheがファイルを見つけてそれを正しく提供するためには、「webルート」と呼ばれる非常に特定のディレクトリに保存する必要があります。

CentOS 7では、このディレクトリは/usr/share/nginx/html/にあります。 次のように入力して、その場所にファイルを作成できます。

sudo vi /usr/share/nginx/html/info.php

これにより、空のファイルが開きます。 有効なPHPコードである次のテキストをファイル内に配置します。

PHPスクリプトのテスト

終了したら、ファイルを保存して閉じます。

これで、WebサーバーがPHPスクリプトによって生成されたコンテンツを正しく表示できるかどうかをテストできます。 これを試すには、Webブラウザでこのページにアクセスするだけです。 サーバーのパブリックIPアドレスが再び必要になります。

訪問するアドレスは次のとおりです。

Open in a web browser:http://your_server_IP_address/info.php

訪れるページは次のようになります。

CentOS 7 default PHP info

このページは基本的に、PHPの観点からサーバーに関する情報を提供します。 デバッグや、設定が正しく適用されていることを確認するのに役立ちます。

これが成功した場合、PHPは期待どおりに機能しています。

実際にサーバーに関する情報を許可されていないユーザーに提供する可能性があるため、このテスト後にこのファイルを削除することをお勧めします。 これを行うには、次のように入力できます。

sudo rm /usr/share/nginx/html/info.php

後で情報に再度アクセスする必要がある場合は、いつでもこのページを再作成できます。

結論

LEMPスタックがインストールされたので、次に何をするかについて多くの選択肢があります。 基本的に、サーバーにほとんどの種類のWebサイトとWebソフトウェアをインストールできるプラットフォームをインストールしました。

Related