前書き
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ページが表示されます。これは、情報提供およびテスト目的であります。 これは次のようになります。
このページが表示された場合、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.owner
とlisten.group
を設定する行を見つけて、コメントを解除します。 彼らはこのように見えるはずです:
/etc/php-php.d/www.conf — 2 of 3
listen.owner = nobody
listen.group = nobody
最後に、user
とgroup
を設定する行を見つけて、それらの値を「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
訪れるページは次のようになります。
このページは基本的に、PHPの観点からサーバーに関する情報を提供します。 デバッグや、設定が正しく適用されていることを確認するのに役立ちます。
これが成功した場合、PHPは期待どおりに機能しています。
実際にサーバーに関する情報を許可されていないユーザーに提供する可能性があるため、このテスト後にこのファイルを削除することをお勧めします。 これを行うには、次のように入力できます。
sudo rm /usr/share/nginx/html/info.php
後で情報に再度アクセスする必要がある場合は、いつでもこのページを再作成できます。
結論
LEMPスタックがインストールされたので、次に何をするかについて多くの選択肢があります。 基本的に、サーバーにほとんどの種類のWebサイトとWebソフトウェアをインストールできるプラットフォームをインストールしました。