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

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

序章

LEMPソフトウェアスタックは、動的WebページおよびWebアプリケーションを提供するために使用できるソフトウェアのグループです。 これは、NginxWebサーバーを備えたLinuxオペレーティングシステムを表す頭字語です。 バックエンドデータはMySQLデータベースに保存され、動的処理はPHPによって処理されます。

このガイドでは、オペレーティングシステムが提供するパッケージを使用して、DebianサーバーにLEMPスタックをインストールします。

前提条件

このガイドを完了するには、次のものが必要です。

  • sudo権限を持つ非rootユーザーのDebian8サーバー。 これらの権限を持つユーザーは、Debian8ガイドの初期サーバーセットアップでセットアップできます。

ステップ1—NginxWebサーバーをインストールします

サイト訪問者にWebページを表示するために、最新の効率的なWebサーバーであるNginxを採用します。

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

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

sudo apt-get update
sudo apt-get install nginx

Debian 8では、Nginxはインストール時に実行を開始するように構成されています。

ufwファイアウォールを実行している場合は、Nginxへの接続を許可する必要があります。 必要なトラフィックを引き続き許可する最も制限の厳しいプロファイルを有効にする必要があります。 サーバーに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)

次に、Webブラウザでサーバーのドメイン名またはパブリック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システム内で使用するためのroot(管理)パスワードを提供するように求められ、そのパスワードを確認する必要があります。

これでMySQLデータベースソフトウェアがインストールされましたが、その構成はまだ完全ではありません。

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

sudo mysql_secure_installation

MySQL rootアカウントに設定したパスワードを入力するように求められます。 次に、そのパスワードを変更するかどうかを尋ねられます。 現在のパスワードに満足している場合は、プロンプトで「いいえ」にNと入力します。

Using existing password for root.

Setting the root password ensures that nobody can log into the MySQL
root user without the proper authorisation.

You already have a root password set, so you can safely answer 'n'.

Change the root password? [Y/n] n
 ... skipping.

スクリプトが尋ねる残りの質問については、Yを押してから、各プロンプトでENTERキーを押す必要があります。 これにより、一部の匿名ユーザーとテストデータベースが削除され、リモートルートログインが無効になり、これらの新しいルールが読み込まれるため、MySQLは行った変更をすぐに尊重します。

この時点で、データベースシステムがセットアップされ、保護されています。 PHPを設定しましょう。

ステップ3—処理のためにPHPをインストールする

これで、ページを提供するためにNginxがインストールされ、データを保存および管理するためにMySQLがインストールされました。 ただし、動的コンテンツを生成できるものはまだありません。 そこでPHPが登場します。

Nginxには他のWebサーバーのようなネイティブPHP処理が含まれていないため、「fastCGIプロセスマネージャー」の略であるfpmをインストールする必要があります。 処理のためにこのソフトウェアにPHPリクエストを渡すようにNginxに指示します。 PHPがMySQLデータベースバックエンドと通信できるようにする追加のヘルパーパッケージもインストールします。 インストールは、それを機能させるために必要なPHPコアファイルをプルします。

これらのパッケージは、ライセンスの問題によりデフォルトのリポジトリでは利用できないため、リポジトリソースを変更してプルする必要があります。

テキストエディタで/etc/apt/sources.listを開きます。

sudo nano /etc/apt/sources.list

次に、ソースごとに、contribおよびnon-freeリポジトリを各ソースに追加します。 これらの変更を行うと、ファイルは次のようになります。

/etc/apt/sources.list

...
deb http://mirrors.digitalocean.com/debian jessie main contrib non-free
deb-src http://mirrors.digitalocean.com/debian jessie main contrib non-free

deb http://security.debian.org/ jessie/updates main contrib non-free
deb-src http://security.debian.org/ jessie/updates main contrib non-free

# jessie-updates, previously known as 'volatile'
deb http://mirrors.digitalocean.com/debian jessie-updates main contrib non-free
deb-src http://mirrors.digitalocean.com/debian jessie-updates main contrib non-free

ファイルを保存して終了します。 次に、ソースを更新します。

sudo apt-get update

次に、php5-fpmおよびphp5-mysqlモジュールをインストールします。

sudo apt-get install php5-fpm php5-mysql

これでPHPコンポーネントがインストールされましたが、セットアップをより安全にするために、構成を少し変更する必要があります。

ルート権限でメインのphp-fpm構成ファイルを開きます。

sudo nano /etc/php5/fpm/php.ini

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

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

次のように、行のコメントを解除して「0」に設定することにより、これらの条件の両方を変更します。

/etc/php5/fpm/php.ini

cgi.fix_pathinfo=0

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

ここで、次のように入力してPHPプロセッサを再起動する必要があります。

sudo systemctl restart php5-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 your_server_ip;

    location / {
        try_files $uri $uri/ =404;
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php5-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

<?php
  phpinfo();
?>

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

これで、サーバーのドメイン名またはパブリックIPアドレスに続いて/info.phpにアクセスすることにより、Webブラウザーでこのページにアクセスできます。

http://server_domain_or_IP/info.php

サーバーに関する情報を含むPHPによって生成されたWebページが表示されます。

このようなページが表示された場合は、Nginxを使用してPHP処理を正常に設定しています。

Nginxがページを正しくレンダリングすることを確認した後、作成したファイルを削除することをお勧めします。これにより、許可されていないユーザーに、侵入を試みるのに役立つ構成に関するヒントが実際に与えられる可能性があります。

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

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

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

結論

これで、DebianサーバーにLEMPスタックが構成されているはずです。 これにより、訪問者にWebコンテンツを提供するための非常に柔軟な基盤が提供されます。