ウェブサイト検索

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


CentOS 7を使用していませんか?別のバージョンまたはディストリビューションを選択してください。

紹介

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

このガイドでは、CentOS 7サーバーにPHP 7.4がインストールされたLEMPスタックを構築し、データベース管理システムとしてMariaDBを使用します。MariaDBは元のMySQLサーバーの代替として機能し、実際にはアプリケーションの設定やコードの変更なしにMariaDBに切り替えることができることを意味します。

前提条件

このガイドを始める前に、サーバーに別の非ルートユーザーアカウントが設定されている必要があります。CentOS 7の初期サーバーセットアップのステップ1から4を完了することで、これを行う方法を学ぶことができます。

ステップ1 — Nginxのインストール

ウェブページをサイト訪問者に表示するために、我々は高性能なウェブサーバーであるNginxを使用します。最新のNginxバージョンを入手するために、まずCentOS 7オペレーティングシステム用の追加ソフトウェアを含むEPELリポジトリをインストールします。

CentOS 7 EPEL リポジトリを追加するには、次のコマンドを実行してください:

  1. sudo yum install epel-release

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

EPELリポジトリがサーバーにインストールされたので、以下のyumコマンドを使用してNginxをインストールしてください:

  1. sudo yum install nginx

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

  1. sudo systemctl start nginx

すぐにスポットチェックを行って、すべてが予定通りに進んだかどうかを確認できます。ウェブブラウザでサーバーのパブリックIPアドレスにアクセスしてください(この情報をまだ持っていない場合は、次の見出しの下にある注釈を参照して、パブリックIPアドレスを見つけてください):

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

デフォルトのCentOS 7 Nginxウェブページが表示されるはずです。これは情報提供とテストの目的で存在します。おそらく、次のように見えるでしょう:

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

Nginxをブート時に起動できるようにするには、次のコマンドを実行してください:

  1. sudo systemctl enable nginx

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

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

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

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

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

別の方法として、外部の第三者に自分のサーバーをどのように見ているかを教えてもらうこともできます。これは、特定のサーバーに自分のIPアドレスを尋ねることで行えます:

  1. curl http://icanhazip.com

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

ステップ2 — MariaDBのインストール

ウェブサーバーが稼働しているので、MySQLの代替としてMariaDBをインストールする時が来ました。MariaDBは、MySQLリレーショナルデータベース管理システムのコミュニティ開発によるフォークです。

再び、yumを使用してソフトウェアを取得し、インストールすることができます。 今回は、コンポーネント同士が通信できるように支援するいくつかの他のヘルパーパッケージもインストールします:

  1. sudo yum install mariadb-server mariadb

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

  1. sudo systemctl start mariadb

私たちのMariaDBデータベースが動いているので、危険なデフォルトを削除し、データベースへのアクセスを制限するセキュリティスクリプトを実行したいと思います。インタラクティブスクリプトを実行するには、以下のコマンドを実行してください:

  1. sudo mysql_secure_installation

プロンプトは、現在の root 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を起動時に自動で開始するように設定することです。これを行うために、次のコマンドを使用してください:

  1. sudo systemctl enable mariadb

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

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

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

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

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

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

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

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

このような出力が表示されます:

Loaded 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であるPHP 7.4をインストールします。PHP 7.4をインストールするために正しいRemiパッケージを有効にするには、次のコマンドを実行してください:

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

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

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

選択したバージョンとしてPHPが利用可能であることを確認するには、次のコマンドを実行してください:

  1. php --version

このような出力が表示されます:

PHP 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をインストールします。

  1. sudo yum install nano

nano またはお好みのエディタを使って /etc/php-fpm.d/www.conf 設定ファイルを開きます:

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

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

…
; 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 に変更する必要があります。

…
; 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ディレクティブを含む行を以下のように変更してください:

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

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

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

編集が完了したら、ファイルを保存して閉じてください。nanoを使用している場合は、CTRL + Xを押し、その後YとENTERを押してください。

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

  1. sudo systemctl start php-fpm

あなたのPHP環境は準備が整いました。次に、Nginxを設定して、PHPスクリプトのすべてのリクエストがphp-fpmによって処理されるようにします。

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

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

Nginxには、各ホストされたウェブサイトをサーバーブロックを使用して別々の設定ファイルとして定義できる専用のディレクトリがあります。これはApacheのバーチャルホストに似ています。

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

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

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

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

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を再起動します:

  1. sudo systemctl restart nginx

あなたのウェブサーバーは現在完全に設定されました。次のステップでは、NginxへのPHP統合をテストします。

ステップ5 — ウェブサーバーでのPHP処理のテスト

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

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

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

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

これから、ウェブサーバーが期待通りに動作することを確認するために、テスト用のPHPページを作成します。

新しいPHPファイルを info.php と名付けて /usr/share/nginx/html ディレクトリに作成します:

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

次のPHPコードは、サーバー上で実行中の現在のPHP環境に関する情報を表示します:

<?php

phpinfo();

終わったら、ファイルを保存して閉じてください。

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

http://server_host_or_IP/info.php

このようなページが表示されます:

そのページを通じてあなたのPHPサーバーに関する関連情報を確認した後、そのファイルはあなたのPHP環境とCentOSサーバーに関する機密情報が含まれているため、削除するのが最適です。そのファイルを削除するにはrmを使用できます:

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

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

結論

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

関連記事: