前書き
LEMPソフトウェアスタックは、動的なWebページおよびWebアプリケーションを提供するために使用できるソフトウェアのグループです。 これは、Nginx Webサーバーを備えたLinuxオペレーティングシステムを表す頭字語です。 バックエンドデータはMySQLデータベースに保存され、動的処理はPHPによって処理されます。
このガイドでは、Ubuntu 16.04サーバーにLEMPスタックをインストールする方法を示します。 Ubuntuオペレーティングシステムは、最初の要件を処理します。 残りのコンポーネントを起動して実行する方法を説明します。
前提条件
このチュートリアルを完了する前に、サーバー上にsudo
特権を持つ通常の非rootユーザーアカウントが必要です。 Ubuntu 16.04 initial server setupを完了すると、このタイプのアカウントを設定する方法を学ぶことができます。
ユーザーが利用可能になったら、そのユーザー名でサーバーにサインインします。 これで、このガイドで説明されている手順を開始する準備が整いました。
ステップ1:Nginx Webサーバーをインストールする
サイト訪問者にWebページを表示するために、最新の効率的なWebサーバーであるNginxを採用します。
この手順で使用するソフトウェアはすべて、Ubuntuのデフォルトパッケージリポジトリから直接提供されます。 これは、apt
パッケージ管理スイートを使用してインストールを完了することができることを意味します。
このセッションでapt
を使用するのはこれが初めてなので、ローカルパッケージインデックスを更新することから始める必要があります。 その後、サーバーをインストールできます。
sudo apt-get update
sudo apt-get install nginx
Ubuntu 16.04では、Nginxはインストール時に実行を開始するように設定されています。
初期設定ガイドで概説されているように、ufw
ファイアウォールを実行している場合は、Nginxへの接続を許可する必要があります。 Nginxはインストール時にufw
に登録されるため、手順はかなり簡単です。
必要なトラフィックを引き続き許可する最も制限の厳しいプロファイルを有効にすることをお勧めします。 サーバーに対してSSLをまだ設定していないため、このガイドでは、ポート80のトラフィックのみを許可する必要があります。
これを有効にするには、次のように入力します。
sudo ufw allow 'Nginx HTTP'
次のように入力して、変更を確認できます。
sudo ufw status
表示された出力で許可されたHTTPトラフィックが表示されるはずです。
OutputStatus: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
Nginx HTTP ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Nginx HTTP (v6) ALLOW Anywhere (v6)
新しいファイアウォールルールを追加したら、ウェブブラウザでサーバーのドメイン名またはパブリックIPアドレスにアクセスして、サーバーが稼働しているかどうかをテストできます。
サーバーを指すドメイン名がなく、サーバーのパブリックIPアドレスがわからない場合は、端末に次のいずれかを入力して見つけることができます。
ip addr show eth0 | grep inet | awk '{ print $2; }' | sed 's/\/.*$//'
これにより、いくつかのIPアドレスが出力されます。 Webブラウザーで順番に試すことができます。
別の方法として、インターネット上の他の場所から表示されるアクセス可能なIPアドレスを確認できます。
curl -4 icanhazip.com
Webブラウザーで受信したアドレスの1つを入力します。 Nginxのデフォルトのランディングページに移動するはずです。
http://server_domain_or_IP
上記のページが表示されたら、Nginxが正常にインストールされています。
手順2:MySQLをインストールしてサイトデータを管理する
Webサーバーができたので、サイトのデータを保存および管理するために、データベース管理システムであるMySQLをインストールする必要があります。
次のように入力して、これを簡単にインストールできます。
sudo apt-get install mysql-server
MySQLシステム内で使用するためのルート(管理)パスワードを提供するように求められます。
MySQLデータベースソフトウェアがインストールされましたが、その構成はまだ完全には完了していません。
インストールを保護するために、安全でないデフォルトを変更するかどうかを尋ねる簡単なセキュリティスクリプトを実行できます。 次のように入力してスクリプトを開始します。
mysql_secure_installation
MySQLルートアカウントに設定したパスワードの入力を求められます。 次に、VALIDATE PASSWORD PLUGIN
を構成するかどうかを尋ねられます。
[.warning]#Warning:この機能を有効にすることは、判断の呼びかけのようなものです。 有効にすると、指定された基準に一致しないパスワードがMySQLによって拒否され、エラーが発生します。 これは、phpMyAdminのUbuntuパッケージなど、MySQLユーザー資格情報を自動的に構成するソフトウェアと組み合わせて弱いパスワードを使用すると問題が発生します。 検証を無効のままにしておくのは安全ですが、データベースの資格情報には常に強力で一意のパスワードを使用する必要があります。
#
はいの場合はyと答え、有効にせずに続行する場合は他の何かを答えます。
VALIDATE PASSWORD PLUGIN can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD plugin?
Press y|Y for Yes, any other key for No:
検証を有効にした場合、パスワード検証のレベルを選択するよう求められます。 最強レベルの2を入力すると、数字、大文字、小文字、特殊文字を含まない、または一般的な辞書に基づくパスワードを設定しようとすると、エラーが発生することに注意してください。言葉。
There are three levels of password validation policy:
LOW Length >= 8
MEDIUM Length >= 8, numeric, mixed case, and special characters
STRONG Length >= 8, numeric, mixed case, special characters and dictionary file
Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 1
パスワード検証を有効にした場合、既存のルートパスワードのパスワード強度が表示され、そのパスワードを変更するかどうかを尋ねられます。 現在のパスワードに問題がない場合は、プロンプトで「いいえ」にnを入力します。
Using existing password for root.
Estimated strength of the password: 100
Change the password for root ? ((Press y|Y for Yes, any other key for No) : n
残りの質問については、Yを押し、各プロンプトでEnterキーを押す必要があります。 これにより、一部の匿名ユーザーとテストデータベースが削除され、リモートルートログインが無効になり、これらの新しいルールがロードされ、MySQLが行った変更がすぐに反映されます。
この時点で、データベースシステムがセットアップされ、先に進むことができます。
ステップ3:処理のためにPHPをインストールする
ページを提供するためにNginxがインストールされ、データを保存および管理するためにMySQLがインストールされました。 ただし、動的コンテンツを生成できるものはまだありません。 これにはPHPを使用できます。
Nginxには他のWebサーバーのようにネイティブPHP処理が含まれていないため、「fastCGIプロセスマネージャー」を表すphp-fpm
をインストールする必要があります。 Nginxに、処理のためにこのソフトウェアにPHPリクエストを渡すように指示します。
このモジュールをインストールして、PHPがデータベースバックエンドと通信できるようにする追加のヘルパーパッケージを取得することもできます。 インストールにより、必要なPHPコアファイルが取り込まれます。 次のように入力してこれを行います。
sudo apt-get install php-fpm php-mysql
PHPプロセッサを構成する
これでPHPコンポーネントがインストールされましたが、セットアップをより安全にするために少し構成を変更する必要があります。
root権限でメインのphp-fpm
構成ファイルを開きます。
sudo nano /etc/php/7.0/fpm/php.ini
このファイルで探しているのは、cgi.fix_pathinfo
を設定するパラメーターです。 これはセミコロン(;)でコメント化され、デフォルトで「1」に設定されます。
これは、要求されたPHPファイルが見つからない場合に見つけることができる最も近いファイルを実行しようとするようにPHPに指示するため、非常に安全でない設定です。 これにより基本的に、ユーザーは実行を許可されないスクリプトを実行できるようにPHPリクエストを作成できます。
行のコメントを外し、次のように「0」に設定することで、これらの両方の条件を変更します。
/etc/php/7.0/fpm/php.ini
cgi.fix_pathinfo=0
完了したら、ファイルを保存して閉じます。
ここで、次のように入力してPHPプロセッサを再起動するだけです。
sudo systemctl restart php7.0-fpm
これにより、行った変更が実装されます。
ステップ4:PHPプロセッサーを使用するためのNginxの構成
これで、必要なコンポーネントがすべてインストールされました。 まだ必要な設定変更は、動的コンテンツにPHPプロセッサを使用するようにNginxに指示することだけです。
これはサーバーブロックレベルで行います(サーバーブロックはApache仮想ホストに似ています)。 次のように入力して、デフォルトのNginxサーバーブロック構成ファイルを開きます。
sudo nano /etc/nginx/sites-available/default
現在、コメントを削除すると、Nginxのデフォルトのサーバーブロックファイルは次のようになります。
/etc/nginx/sites-available/default
server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/html;
index index.html index.htm index.nginx-debian.html;
server_name _;
location / {
try_files $uri $uri/ =404;
}
}
サイトのこのファイルに変更を加える必要があります。
-
まず、
index
ディレクティブの最初の値としてindex.php
を追加して、ディレクトリが要求されたときにindex.php
という名前のファイルが提供されるようにする必要があります。 -
server_name
ディレクティブを変更して、サーバーのドメイン名またはパブリックIPアドレスを指すようにすることができます。 -
実際のPHP処理では、各行の先頭からポンド記号(#)を削除して、PHPリクエストを処理するファイルのセグメントのコメントを外すだけです。 これは、
location ~\.php$
ロケーションブロック、含まれているfastcgi-php.conf
スニペット、およびphp-fpm
に関連付けられたソケットになります。 -
また、同じ方法を使用して、
.htaccess
ファイルを処理するロケーションブロックのコメントを解除します。 Nginxはこれらのファイルを処理しません。 これらのファイルのいずれかがたまたまドキュメントルートに到達した場合、それらは訪問者に提供されるべきではありません。
必要な変更は、以下のテキストでは赤色で示されています。
/etc/nginx/sites-available/default
server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/html;
index index.php index.html index.htm index.nginx-debian.html;
server_name server_domain_or_IP;
location / {
try_files $uri $uri/ =404;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
}
location ~ /\.ht {
deny all;
}
}
上記の変更を行ったら、ファイルを保存して閉じることができます。
次のように入力して、構成ファイルの構文エラーをテストします。
sudo nginx -t
エラーが報告された場合は、戻ってファイルを再確認してから続行してください。
準備ができたら、Nginxをリロードして必要な変更を加えます。
sudo systemctl reload nginx
ステップ5:設定をテストするPHPファイルを作成する
これでLEMPスタックが完全にセットアップされました。 Nginxが.php
ファイルをPHPプロセッサに正しく渡すことができることを検証するためにテストできます。
これを行うには、ドキュメントルートにテスト用のPHPファイルを作成します。 テキストエディタのドキュメントルート内にinfo.php
という名前の新しいファイルを開きます。
sudo nano /var/www/html/info.php
新しいファイルに次の行を入力または貼り付けます。 これは、サーバーに関する情報を返す有効なPHPコードです。
/var/www/html/info.php
終了したら、ファイルを保存して閉じます。
これで、サーバーのドメイン名またはパブリックIPアドレスに続けて/info.php
にアクセスすることで、Webブラウザでこのページにアクセスできます。
http://server_domain_or_IP/info.php
サーバーに関する情報を含むPHPによって生成されたWebページが表示されます。
このようなページが表示された場合、NginxでPHP処理を正常に設定しました。
Nginxがページを正しく表示することを確認したら、作成したファイルを削除することをお勧めします。実際には、許可されていないユーザーに設定に関するヒントを与え、侵入を試みるのに役立ちます。 後で必要な場合は、いつでもこのファイルを再生成できます。
今のところ、次のように入力してファイルを削除します。
sudo rm /var/www/html/info.php
結論
これで、Ubuntu 16.04サーバーでLEMPスタックが構成されました。 これにより、訪問者にWebコンテンツを提供するための非常に柔軟な基盤が得られます。