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

提供:Dev Guides
移動先:案内検索

序章

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

このガイドでは、データベース管理システムとしてMariaDBを使用して、CentOS7サーバーにPHP7.4がインストールされたLEMPスタックを取得します。 MariaDBは、元のMySQLサーバーのドロップイン代替として機能します。つまり、実際には、アプリケーションで構成やコードを変更することなく、MariaDBに切り替えることができます。

前提条件

このガイドを開始する前に、サーバーにroot以外のユーザーアカウントを設定しておく必要があります。 これを行う方法を学ぶには、CentOS 7初期サーバーセットアップの手順1〜4を完了します。

ステップ1—Nginxをインストールする

サイト訪問者にWebページを表示するために、高性能WebサーバーであるNginxを採用します。 最新のNginxバージョンを入手するには、最初にEPELリポジトリをインストールします。このリポジトリには、CentOS7オペレーティングシステム用の追加ソフトウェアが含まれています。

CentOS 7 EPELリポジトリを追加するには、次のコマンドを実行します。

sudo yum install epel-release

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

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

sudo yum install nginx

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

sudo systemctl start nginx

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

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

情報提供とテストの目的で存在するデフォルトのCentOS7NginxWebページが表示されます。 次のようになります。

このページが表示されている場合は、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ブラウザのアドレスバーに入力してサーバーにアクセスできます。

ステップ2—MariaDBをインストールする

Webサーバーが稼働しているので、MySQLドロップインの代替品であるMariaDBをインストールします。 MariaDBは、MySQLリレーショナルデータベース管理システムのコミュニティ開発されたフォークです。

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

sudo yum install mariadb-server mariadb

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

sudo systemctl start mariadb

MariaDBデータベースが実行されているので、いくつかの危険なデフォルトを削除してデータベースへのアクセスをロックダウンするセキュリティスクリプトを実行します。 次のコマンドを実行して、インタラクティブスクリプトを開始します。

sudo mysql_secure_installation

プロンプトで、現在のrootMariaDBパスワードの入力を求められます。 MariaDBをインストールしたばかりなので、MariaDBがない可能性が高いので、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.

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

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

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

sudo systemctl enable mariadb

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

ステップ3—PHPのインストール

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

CentOS 7サーバー内でデフォルトで使用可能なPHPバージョンは古くなっています。そのため、PHP 7+を入手して、CentOS 7サーバーにインストールするには、サードパーティのパッケージリポジトリをインストールする必要があります。 Remi は、CentOSサーバー用の最新のPHPリリースを提供する人気のあるパッケージリポジトリです。

CentOS 7のRemiリポジトリをインストールするには、次のコマンドを実行します。

sudo yum install http://rpms.remirepo.net/enterprise/remi-release-7.rpm

インストールが完了したら、コマンドを実行して、好みのバージョンのPHPを含むリポジトリを有効にする必要があります。 Remiリポジトリで利用可能なPHP7以降のリリースを確認するには、次のコマンドを実行します。

yum --disablerepo="*" --enablerepo="remi-safe" list php[7-9][0-9].x86_64

次のような出力が表示されます。

OutputLoaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * remi-safe: mirrors.ukfast.co.uk
Available Packages
php70.x86_64                                              2.0-1.el7.remi                                       remi-safe
php71.x86_64                                              2.0-1.el7.remi                                       remi-safe
php72.x86_64                                              2.0-1.el7.remi                                       remi-safe
php73.x86_64                                              2.0-1.el7.remi                                       remi-safe
php74.x86_64                                              1.0-3.el7.remi                                       remi-safe
php80.x86_64                                              1.0-3.el7.remi                                       remi-safe

このガイドでは、現在PHPの最も更新されている安定バージョンであるPHP7.4をインストールします。 正しいRemiパッケージを有効にしてPHP7.4をインストールするには、次のコマンドを実行します。

sudo yum-config-manager --enable remi-php74

これで、通常どおりyumを使用してPHPをインストールできます。 次のコマンドは、PHP 7.4をNginx内にセットアップし、MySQLベースのデータベースに接続できるようにするために必要なすべてのパッケージをインストールします。

sudo yum install php php-mysqlnd php-fpm

選択したバージョンとしてPHPが使用可能であることを確認するには、次のコマンドを実行します。

php --version

次のような出力が表示されます。

OutputPHP 7.4.5 (cli) (built: Apr 14 2020 12:54:33) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies

これで、PHPがシステムに正常にインストールされました。 次に、デフォルト構成にいくつかの調整を加える必要があります。 CentOSでのファイルの編集を容易にするために、最初にnanoをインストールします。これは、viよりもユーザーフレンドリーなテキストエディターです。

sudo yum install nano

nanoまたは選択したエディターを使用して、/etc/php-fpm.d/www.conf構成ファイルを開きます。

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

次に、userおよびgroupディレクティブを探します。 nanoを使用している場合は、CTRL + Wを押して、開いているファイル内でこれらの用語を検索できます。

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

…
; Unix user/group of processes
; Note: The user is mandatory. If the group is not set, the default user's group
;       will be used.
; RPM: apache user chosen to provide access to the same directories as httpd
user = apache
; RPM: Keep a group allowed to write in log dir.
group = apache
…

user変数とgroup変数の両方がapacheに設定されていることに気付くでしょう。 これらをnginxに変更する必要があります。

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

…
; RPM: apache user chosen to provide access to the same directories as httpd
user = nginx
; RPM: Keep a group allowed to write in log dir.
group = nginx
…

次に、listenディレクティブを見つけます。 デフォルトでは、php-fpmはTCPを介して特定のホストとポートでリッスンします。 サーバーの全体的なパフォーマンスが向上するため、この設定を変更して、ローカルソケットファイルをリッスンするようにします。 listenディレクティブを含む行を次のように変更します。

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

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

最後に、listenディレクティブ内で定義したソケットファイルの所有者とグループの設定を変更する必要があります。 listen.ownerlisten.group、およびlisten.modeディレクティブを見つけます。 これらの行はデフォルトでコメント化されています。 行の先頭にある前の;記号を削除して、コメントを解除します。 次に、所有者とグループをnginxに変更します。

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

listen.owner = nginx
listen.group = nginx
listen.mode = 0660

編集が完了したら、ファイルを保存して閉じます。 nanoを使用している場合は、CTRL + XYENTERの順に押してください。

php-fpmサービスを有効にして開始するには、次のコマンドを実行します。

sudo systemctl start php-fpm

これで、PHP環境の準備が整いました。 次に、php-fpmで処理されるPHPスクリプトのすべてのリクエストを送信するようにNginxを構成します。

ステップ4—PHPページを処理するためのNginxの構成

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

Nginxには専用のディレクトリがあり、サーバーブロックを使用して、ホストされている各Webサイトを個別の構成ファイルとして定義できます。 これは、Apacheの仮想ホストに似ています。

ただし、デフォルトのインストールでは、このディレクトリは空です。 このサーバーでデフォルトのPHPWebサイトとして機能する新しいファイルを作成します。これにより、/etc/nginx/nginx.confファイルで定義されているデフォルトのサーバーブロックが上書きされます。

まず、/etc/nginx/conf.dディレクトリにある新しいファイルを開きます。

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

次のPHPサーバー定義ブロックを構成ファイルにコピーし、サーバーのドメイン名またはIPアドレスを指すようにserver_nameディレクティブを置き換えることを忘れないでください。

/etc/nginx/conf.d/default.conf

server {
    listen       80;
    server_name  server_domain_or_IP;

    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

これで、Webサーバーが完全にセットアップされました。 次のステップでは、PHPとNginxの統合をテストします。

ステップ5—WebサーバーでのPHP処理のテスト

Webサーバーがセットアップされたので、テストPHPスクリプトを作成して、php-fpmを使用してNginxが.phpスクリプトを正しく処理していることを確認できます。

スクリプトを作成する前に、Nginxのドキュメントルートのデフォルトの所有権設定を変更して、通常のsudoユーザーがその場所にファイルを作成できるようにします。

次のコマンドは、デフォルトのNginxドキュメントルートの所有権を sammy というユーザーとグループに変更するため、このコマンドで強調表示されているユーザー名とグループを、システムのユーザー名とグループを反映するように置き換えてください。

sudo chown -R sammy.sammy /usr/share/nginx/html/

次に、テストPHPページを作成して、Webサーバーが期待どおりに機能することを確認します。

/usr/share/nginx/htmlディレクトリにinfo.phpという名前の新しいPHPファイルを作成します。

nano /usr/share/nginx/html/info.php

次のPHPコードは、サーバーで実行されている現在のPHP環境に関する情報を表示します。

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

<?php

phpinfo();

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

これで、WebサーバーがPHPスクリプトによって生成されたコンテンツを正しく表示できるかどうかをテストできます。 ブラウザに移動し、サーバーのホスト名またはIPアドレスにアクセスし、続いて/info.phpにアクセスします。

http://server_host_or_IP/info.php

次のようなページが表示されます。

そのページでPHPサーバーに関する関連情報を確認した後、PHP環境とCentOSサーバーに関する機密情報が含まれているため、作成したファイルを削除することをお勧めします。 rmを使用して、そのファイルを削除できます。

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

後で必要になった場合は、いつでもこのファイルを再生成できます。

結論

このガイドでは、NginxをWebサーバーとして使用し、最新のPHPリリースバージョンを使用して、訪問者にPHPWebサイトとアプリケーションを提供するための柔軟な基盤を構築しました。 php-fpmを介してPHPリクエストを処理するようにNginxを設定しました。また、ウェブサイトのデータを保存するためにMariaDBデータベースを設定しました。