ウェブサイト検索

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


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

紹介

LEMPソフトウェアスタックは、動的なウェブページやウェブアプリケーションを提供するために使用されるソフトウェアのグループです。これは、Nginxウェブサーバーを持つLinuxオペレーティングシステムを説明する略語です。バックエンドデータはMySQLデータベースに保存され、動的処理はPHPによって行われます。

このガイドでは、Ubuntu 16.04サーバーにLEMPスタックをインストールする方法を示します。Ubuntuオペレーティングシステムが最初の要件を満たします。残りのコンポーネントを稼働させる方法について説明します。

前提条件

このチュートリアルを完了する前に、あなたのサーバーに通常の非ルートのユーザーアカウントが必要です。このアカウントにはsudoの権限が必要です。この種のアカウントを設定する方法については、私たちのUbuntu 16.04初期サーバーセットアップを完了することで学ぶことができます。

ユーザーが利用可能になったら、そのユーザー名でサーバーにサインインしてください。これで、このガイドに記載されている手順を始める準備が整いました。

ステップ1: Nginxウェブサーバーをインストールする

私たちのサイト訪問者にウェブページを表示するために、現代的で効率的なウェブサーバーであるNginxを採用する予定です。

この手順で使用するすべてのソフトウェアは、Ubuntuのデフォルトのパッケージリポジトリから直接取得されます。つまり、aptパッケージ管理スイートを使用してインストールを完了することができます。

このセッションで初めて apt を使用するので、まずはローカルパッケージインデックスを更新する必要があります。それから、サーバーをインストールできます:

  1. sudo apt-get update
  2. sudo apt-get install nginx

Ubuntu 16.04では、Nginxはインストール時に自動的に起動するように設定されています。

初期設定ガイドに記載されているように、ufwファイアウォールが実行されている場合、Nginxへの接続を許可する必要があります。Nginxはインストール時にufwに登録されるため、手順は非常に簡単です。

必要なトラフィックを許可するために、最も制限の厳しいプロファイルを有効にすることをお勧めします。まだサーバー用のSSLを設定していないため、このガイドではポート80のトラフィックのみを許可する必要があります。

これを有効にするには、次のように入力します:

  1. sudo ufw allow 'Nginx HTTP'

変更を確認するには、次のように入力します:

  1. sudo ufw status

表示された出力に許可されたHTTPトラフィックが表示されるはずです:

Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere                  
Nginx HTTP                 ALLOW       Anywhere                  
OpenSSH (v6)               ALLOW       Anywhere (v6)             
Nginx HTTP (v6)            ALLOW       Anywhere (v6)

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

サーバーに向けられたドメイン名がなく、サーバーのパブリックIPアドレスがわからない場合は、次のいずれかをターミナルに入力することで見つけることができます:

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

これによりいくつかのIPアドレスが表示されます。ウェブブラウザでそれぞれを順番に試すことができます。

代わりに、インターネット上の他の場所から見た場合、どのIPアドレスがアクセス可能かを確認できます:

  1. curl -4 icanhazip.com

ウェブブラウザで受け取ったアドレスの1つを入力してください。これにより、Nginxのデフォルトのランディングページに移動するはずです:

http://server_domain_or_IP

上記のページが表示されている場合、Nginxが正常にインストールされています。

ステップ2: サイトデータを管理するためにMySQLをインストールする

ウェブサーバーがあるので、サイトのデータを保存・管理するために、データベース管理システムであるMySQLをインストールする必要があります。

これを簡単にインストールするには、次のように入力します:

  1. sudo apt-get install mysql-server

MySQLシステム内で使用するために、ルート(管理者)パスワードを提供するように求められます。

MySQLデータベースソフトウェアは現在インストールされていますが、その設定は完全ではありません。

インストールを確実にするために、いくつかの安全でないデフォルトを変更するかどうかを尋ねる簡単なセキュリティスクリプトを実行することができます。スクリプトを開始するには、次のように入力します:

  1. mysql_secure_installation

MySQLルートアカウントの設定したパスワードを入力するように求められます。次に、VALIDATE PASSWORD PLUGINを設定するかどうかを尋ねられます。

警告: この機能を有効にすることは、ある種の判断を伴います。有効にすると、指定された基準に一致しないパスワードは、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は他のウェブサーバーのようにネイティブなPHP処理を含んでいないため、<code>php-fpm</code>(これは「fastCGIプロセスマネージャー」の略です)をインストールする必要があります。私たちはNginxにPHPリクエストをこのソフトウェアに処理させるよう指示します。

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

  1. sudo apt-get install php-fpm php-mysql

PHPプロセッサを設定する

私たちは現在、PHPコンポーネントをインストールしましたが、設定をより安全にするためにわずかな構成変更を行う必要があります。

ルート権限でメインのphp-fpm設定ファイルを開きます:

  1. sudo nano /etc/php/7.0/fpm/php.ini

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

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

これら二つの条件を変更します。この行のコメントを外し、「0」に設定します。

cgi.fix_pathinfo=0

作業が完了したら、ファイルを保存して閉じてください。

今、私たちはPHPプロセッサーを再起動するために次のように入力するだけです:

  1. sudo systemctl restart php7.0-fpm

これにより、私たちが行った変更が実施されます。

ステップ4: NginxをPHPプロセッサーを使用するように設定する

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

私たちはこれをサーバーブロックレベルで行います(サーバーブロックはApacheのバーチャルホストに似ています)。デフォルトのNginxサーバーブロック構成ファイルを開くには、次のように入力します:

  1. sudo nano /etc/nginx/sites-available/default

現在、コメントが削除された状態で、Nginxのデフォルトサーバーブロックファイルは次のようになっています。

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.php という名前のファイルが提供されるように、index 指令の最初の値として index.php を追加する必要があります。
  • server_name ディレクティブを、サーバーのドメイン名またはパブリック IP アドレスを指すように変更できます。
  • 実際のPHP処理については、PHPリクエストを処理するファイルのセグメントのコメントを解除するだけで済みます。これは各行の前にある番号記号(#)を削除することで行います。これに該当するのは、location ~\.php$のロケーションブロック、含まれているfastcgi-php.confスニペット、およびphp-fpmに関連するソケットです。
  • 私たちは同じ方法を使用して、.htaccessファイルを扱うロケーションブロックのコメントを解除します。Nginxはこれらのファイルを処理しません。これらのファイルがドキュメントルートに入ってしまった場合、訪問者に提供されるべきではありません。

下記のテキストには、あなたが変更する必要がある箇所が赤で示されています。

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;
    }
}

上記の変更を行ったら、ファイルを保存して閉じることができます。

構成ファイルの構文エラーをテストするには、次のように入力します:

  1. sudo nginx -t

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

準備ができたら、必要な変更を行うためにNginxを再読み込みしてください:

  1. sudo systemctl reload nginx

ステップ5: 設定をテストするためのPHPファイルを作成する

あなたのLEMPスタックは現在完全に設定されているはずです。Nginxが.phpファイルをPHPプロセッサに正しく渡せるかどうかをテストできます。

これを、ドキュメントルートにテスト用のPHPファイルを作成することで行うことができます。テキストエディタでドキュメントルート内にinfo.phpという名前の新しいファイルを開きます:

  1. sudo nano /var/www/html/info.php

新しいファイルに次の行をタイプまたは貼り付けてください。これは、私たちのサーバーに関する情報を返す有効なPHPコードです。

<?php
phpinfo();

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

今、あなたはサーバーのドメイン名またはパブリックIPアドレスに /info.php を付けて、このページをウェブブラウザで訪れることができます:

http://server_domain_or_IP/info.php

あなたのサーバーに関する情報が含まれたPHPによって生成されたウェブページが表示されるはずです。

このようなページが表示されている場合、NginxでPHP処理が正常に設定されていることになります。

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

今のところ、次のように入力してファイルを削除します:

  1. sudo rm /var/www/html/info.php

結論

あなたは今、Ubuntu 16.04サーバー上にLEMPスタックを構成しているはずです。これにより、訪問者にウェブコンテンツを提供するための非常に柔軟な基盤が得られます。

関連記事: