著者は、 Apache Software Foundation を選択して、 Write forDOnationsプログラムの一環として100ドルの寄付を受け取りました。

序章

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

LEMPスタックコンポーネントは、CentOS 7EPELリポジトリを使用してインストールされる場合があります。 ただし、このリポジトリには古いパッケージが含まれています。 たとえば、このリリースが長い間サポートされていなくても、EPELから5.4.16より前のバージョンのPHPをインストールすることはできません。 新しいバージョンのソフトウェアを入手するには、SCLとも呼ばれるソフトウェアコレクションを使用することをお勧めします。 SCLは、RedHatが提供する開発者リソースのコレクションであり、以前にインストールされたパッケージに影響を与えることなく、同じシステムで複数のバージョンのソフトウェアを使用できるようにします。

このガイドでは、CentOS7サーバーにLEMPスタックをインストールします。 CentOSオペレーティングシステムがLinuxコンポーネントを処理します。 Software Collectionsリポジトリを使用して残りのコンポーネントをインストールしてから、単純なWebページを提供するようにコンポーネントを構成します。

前提条件

このチュートリアルを開始する前に、 CentOS 7初期サーバーセットアップガイドに従って、sudo非rootユーザーを含むCentOS7サーバーをセットアップする必要があります。

ステップ1—ソフトウェアコレクションリポジトリを有効にする

CentOSのSCLにアクセスするには、CentOSLinuxソフトウェアコレクションリリースファイルをインストールします。

  1. sudo yum install centos-release-scl

次のコマンドを使用して、使用可能なSCLパッケージのリストを表示します。

  1. yum --disablerepo='*' --enablerepo='centos-sclo-rh' --enablerepo='centos-sclo-sclo' list available

システム全体の競合を回避するために、SCLパッケージは/opt/rhディレクトリにインストールされます。 これにより、たとえば、Python2.7を削除したり干渉したりすることなくCentOS7マシンにPython3.5をインストールできます。

SCLパッケージのすべての構成ファイルは、/etc/opt/rh/ディレクトリ内の対応するディレクトリに保存されます。 SCLパッケージは、PATHLD_LIBRARY_PATHMANPATHなどの付属アプリケーションの使用に必要な環境変数を定義するシェルスクリプトを提供します。 これらのスクリプトは、/opt/rh/package-name/enableとしてファイルシステムに保存されます。

これで、このガイドで概説されているパッケージのインストールを開始する準備が整いました。

ステップ2—NginxWebサーバーをインストールする

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

次のyumコマンドを使用してNginxをインストールします。 強調表示された値を、インストールするNginxのバージョンに必ず置き換えてください。 最新バージョンは、パッケージ名の中で最も高い番号になります(この記事の執筆時点では、112)。

  1. sudo yum install rh-nginx112

インストールが完了したら、Nginxサービスを開始します。

  1. sudo systemctl start rh-nginx112-nginx

systemctl statusコマンドを入力して、Nginxが実行されていることを確認します。

  1. sudo systemctl status rh-nginx112-nginx
Output
● rh-nginx112-nginx.service - The nginx HTTP and reverse proxy server Loaded: loaded (/usr/lib/systemd/system/rh-nginx112-nginx.service; disabled; vendor preset: disabled) Active: active (running) since Fri 2018-03-19 15:15:43 UTC; 1min 17s ago Main PID: 10556 (nginx) CGroup: /system.slice/rh-nginx112-nginx.service ├─10556 nginx: master process /opt/rh/rh-nginx112/root/usr/sbin/nginx ├─10557 nginx: worker process └─10558 nginx: worker process Mar 19 15:15:43 lemp-centos-222 systemd[1]: Starting The nginx HTTP and reverse proxy server... Mar 19 15:15:43 lemp-centos-222 nginx-scl-helper[10541]: nginx: the configuration file /etc/opt/rh/rh-nginx... ok Mar 19 15:15:43 lemp-centos-222 nginx-scl-helper[10541]: nginx: configuration file /etc/opt/rh/rh-nginx112/...ful Mar 19 15:15:43 lemp-centos-222 systemd[1]: Started The nginx HTTP and reverse proxy server. Hint: Some lines were ellipsized, use -l to show in full.

この時点で、サーバーは、許可されていないユーザーによる許可されていないアクセスに対して脆弱である可能性があります。 これを修正するには、firewalldを使用してファイアウォールを設定します。 最初にfirewalldをインストールする必要がある場合があります。これは、次のコマンドで実行できます。

  1. sudo yum install firewalld

次に、firewalldサービスを開始します。

  1. sudo systemctl start firewalld

次に、サーバーへのSSHアクセス、およびNginxへのHTTPおよびHTTPS接続を許可するファイアウォールルールをいくつか追加します。

  1. sudo firewall-cmd --permanent --add-service=ssh
  2. sudo firewall-cmd --zone=public --permanent --add-service=http
  3. sudo firewall-cmd --zone=public --permanent --add-service=https

新しいファイアウォールルールを実装するには、firewalldをリロードします。

  1. sudo firewall-cmd --reload

Firewalldの詳細については、 CentOS7でFirewallDを使用してファイアウォールを設定する方法をご覧ください。

これらの新しいファイアウォールルールを追加すると、Webブラウザでサーバーのドメイン名またはパブリックIPアドレスにアクセスして、サーバーが稼働しているかどうかをテストできます。

サーバーを指すドメイン名がなく、サーバーのパブリックIPアドレスがわからない場合は、端末に次のように入力してドメイン名を見つけることができます。

  1. curl -4 icanhazip.com

結果のIPアドレスをWebブラウザのアドレスバーに入力すると、Nginxのデフォルトのランディングページが表示されます。

http://server_domain_or_IP

Nginx default page

このページが表示されている場合は、Nginxが正常にインストールされています。 続行する前に、次のコマンドを使用してNginxが起動時に起動できるようにします。

  1. sudo systemctl enable rh-nginx112-nginx

これでNginxサーバーがインストールされ、MariaDBデータベースソフトウェアのインストールに進むことができます。

ステップ3—サイトデータを管理するためのMariaDBのインストール

Webサーバーができたので、MySQLのドロップイン代替品であるMariaDBをインストールして、サイトのデータを保存および管理します。

次のコマンドでMariaDBをインストールします。 ここでも、強調表示された値を、インストールするバージョン番号に置き換えます。最大の番号は、利用可能な最新バージョン(102、この記事の執筆時点)です。

  1. sudo yum install rh-mariadb102

インストールが完了したら、次のコマンドを使用してMariaDBサービスを開始します。

  1. sudo systemctl start rh-mariadb102-mariadb

これで、MariaDBがインストールされ、実行されます。 ただし、その構成はまだ完了していません。

インストールを保護するために、MariaDBには、安全でないデフォルト設定を変更するように求めるセキュリティスクリプトがインストールされています。 次のように入力してスクリプトを実行します。

  1. source /opt/rh/rh-mariadb102/enable
  2. mysql_secure_installation

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

. . .
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 authorization.

Set root password? [Y/n] Y
New password: password
Re-enter new password: password
Password updated successfully!
Reloading privilege tables..
 ... Success!
. . .

残りの質問については、各プロンプトでENTERキーを押して、デフォルト値を受け入れます。 これにより、一部の匿名ユーザーとテストデータベースが削除され、リモートrootログインが無効になり、これらの新しいルールが読み込まれるため、MariaDBは行った変更をすぐに実装します。

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

  1. sudo systemctl enable rh-mariadb102-mariadb

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

ステップ4—処理用のPHPのインストールと構成

これで、ページを提供するためにNginxがインストールされ、データを保存および管理するためにMariaDBがインストールされました。 ただし、動的コンテンツを生成できるものはまだインストールされていません。 これがPHPの出番です。

Nginxには他のWebサーバーのようなネイティブPHP処理が含まれていないため、「fastCGIプロセスマネージャー」の略であるphp-fpmをインストールする必要があります。 後で、PHPリクエストをこのソフトウェアに渡して処理するようにNginxを構成します。

このモジュールをインストールし、PHPがデータベースバックエンドと通信できるようにするヘルパーパッケージも入手してください。 インストールにより、必要なPHPコアファイルが取り込まれます。 次のように入力してこれを行います。

  1. sudo yum install rh-php71-php-fpm rh-php71-php-mysqlnd

これでPHPコンポーネントがインストールされましたが、セットアップのセキュリティを強化するために、構成を少し変更する必要があります。

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

  1. sudo vi /etc/opt/rh/rh-php71/php.ini

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

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

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

/etc/opt/rh/rh-php <^> 71 <^> / php.ini
cgi.fix_pathinfo=0

終了したら、ファイルを保存して閉じます(ESCを押し、:wqと入力して、Enterを押します)。

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

  1. sudo vi /etc/opt/rh/rh-php71/php-fpm.d/www.conf

デフォルトでは、このファイルはApacheサーバーで動作するように構成されています。 サーバーにはNginxがインストールされているので、usergroupを設定する行を見つけて、それらの値を「apache」から「nginx」に変更します。

/etc/opt/rh/rh-php <^> 71 <^> /php-fpm.d/www.conf
user = nginx
group = nginx

次に、ファイルを保存して閉じます。

次に、次のように入力してPHPプロセッサを起動します。

  1. sudo systemctl start rh-php71-php-fpm

次に、php-fpmを有効にして起動時に開始します。

  1. sudo systemctl enable rh-php71-php-fpm

これで、サーバーにPHPが正常にインストールされました。 ただし、サーバーがサイトのコンテンツを正しく提供できるように、インストールした他のソフトウェアと連携するように構成する必要があります。

ステップ5—PHPプロセッサを使用するようにNginxを構成する

この時点で、LEMPスタックに必要なすべてのコンポーネントがインストールされています。 構成を変更する必要があるのは、動的コンテンツにPHPプロセッサを使用するようにNginxに指示することだけです。

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

  1. sudo vi /etc/opt/rh/rh-nginx112/nginx/nginx.conf

location ~ \.php$ブロック(serverブロック内にあるPHPリクエストを処理するファイルのセグメント)とその内容のコメントを外し、各行の先頭からポンド記号(#)を削除します。 また、fastcgi_paramオプションをSCRIPT FILENAME $document_root$fastcgi_script_nameに更新する必要があります。 これにより、処理するファイルを見つけることができるドキュメントルートの場所がPHPに通知されます。

必要な変更を加えると、serverブロックは次のようになります。

/ etc / nginx / sites-available / default
...
server {
    listen       80 default_server;
    listen       [::]:80 default_server;
    server_name  _;
    root         /opt/rh/rh-nginx112/root/usr/share/nginx/html;

    # Load configuration files for the default server block.
    include      /etc/opt/rh/rh-nginx112/nginx/default.d/*.conf;

    location / {
    }

    error_page 404 /404.html;
    location = /40x.html {
    }

    error_page 500 502 503 504  /50x.html;
    location = /50x.html {
    }

    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
    #
    #location ~ \.php$ {
    #    proxy_pass   http://127.0.0.1;
    #}

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    location ~ \.php$ {
        root           html;
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    #location ~ /\.ht {
    #    deny  all;
    #}
}
...

変更を加えたら、ファイルを保存してエディターを終了できます。

次に、次のコマンドを実行して、構成ファイルの構文エラーをテストします。

  1. source /opt/rh/rh-nginx112/enable
  2. sudo nginx -t

エラーが報告された場合は、続行する前に戻ってファイルを再確認してください。

構成ファイルが有効になったら、Nginxをリロードして、行った変更を実装します。

  1. sudo systemctl reload rh-nginx112-nginx

Nginx、PHP、およびMariaDBがインストールおよび構成されたので、あとはLEMPスタック構成がサイトの訪問者にコンテンツを正しく提供できることを確認するだけです。

ステップ6—構成をテストするためのPHPファイルの作成

これでLEMPスタックが完全にセットアップされ、Nginxが.phpファイルをPHPプロセッサに正しく渡すことができることを検証するためにテストできます。 これは、ドキュメントルートにテストPHPファイルを作成することによって行われます。

ドキュメントルート内にinfo.phpという名前の新しいファイルを開きます。

  1. sudo vi /opt/rh/rh-nginx112/root/usr/share/nginx/html/info.php

新しいファイルに次の行を追加します。 これは、サーバーに関する情報を返す有効なPHPコードです。

/opt/rh/rh-nginx<^>112<^>/root/usr/share/nginx/html/info.php
<?php phpinfo(); ?>

終了したら、ファイルを保存して閉じます。 次に、サーバーのドメイン名またはパブリックIPアドレスに続いて/info.phpにアクセスして、Webブラウザーでこのページにアクセスします。

http://server_domain_or_IP/info.php

サーバーに関する情報を含むPHPによって生成されたWebページが表示されます。

PHP page info

このようなページが表示された場合は、Nginxを使用してPHP処理を正常に設定しています。

Nginxがページを正しくレンダリングすることを確認した後、作成したファイルを削除することをお勧めします。これにより、許可されていないユーザーに、侵入を試みるのに役立つ構成に関するヒントが実際に与えられる可能性があります。 後で必要になった場合は、いつでもこのファイルを再生成できます。

次のように入力してファイルを削除します。

  1. sudo rm /opt/rh/rh-nginx112/root/usr/share/nginx/html/info.php

これで、LEMPスタックのすべてのコンポーネントがサーバーに正しくインストールおよび構成されていることを確認しました。

結論

これで、CentOS7サーバーに完全に構成されたLEMPスタックができました。 これにより、訪問者にWebコンテンツを提供するための非常に柔軟な基盤が提供されます。

SCLは、さまざまなバージョンのソフトウェアをインストールし、それらを切り替えるためにも使用されます。 次のコマンドを実行すると、システムにインストールされているすべてのコレクションのリストが表示されます。

  1. scl --list

興味のある方は、公式サイトでソフトウェアコレクションの詳細をご覧ください。