16.10 / 16.04にNginx、MariaDB 10、PHP 7(LEMPスタック)をインストールする方法


LEMPスタックは、動的WebアプリケーションとWebページのデプロイに使用されるパッケージのグループ(Linux OS、Nginx Webサーバー、MySQL \ MariaDBデータベース、およびPHPサーバー側の動的プログラミング言語)を表す頭字語です。

このチュートリアルでは、Ubuntu16.10およびUbuntu16.04サーバー/デスクトップエディションで、MariaDB 10、PHP 7、およびHTTP2.0をサポートするLEMPスタックをNginxにインストールする方法について説明します。

  1. Installation of Ubuntu 16.04 Server Edition [instructions also works on Ubuntu 16.10]

ステップ1:NginxWebサーバーをインストールする

1. Nginxは、インターネット上の訪問者にWebページを表示するために使用される最新のリソース効率の高いWebサーバーです。 aptコマンドラインを使用して、Ubuntuの公式リポジトリからNginxウェブサーバーをインストールすることから始めます。

$ sudo apt-get install nginx

2.次に、netstatコマンドとsystemctlコマンドを発行して、Nginxが開始され、ポート80でバインドされているかどうかを確認します。

$ netstat -tlpn
$ sudo systemctl status nginx.service

サーバーが起動していることを確認したら、ブラウザを開いて、HTTPプロトコルを使用してサーバーのIPアドレスまたはDNSレコードに移動し、NginxのデフォルトのWebページにアクセスできます。

http://IP-Address

ステップ2:Nginx HTTP /2.0プロトコルを有効にする

3. Ubuntu16.04のNginxバイナリの最新リリースでデフォルトでビルドされるHTTP/2.0プロトコルは、SSLとの組み合わせでのみ機能し、Web SSLWebページの読み込み速度が大幅に向上することを約束します。

Ubuntu 16.04のNginxでプロトコルを有効にするには、最初にNginxの利用可能なサイトの構成ファイルに移動し、以下のコマンドを発行してデフォルトの構成ファイルをバックアップします。

$ cd /etc/nginx/sites-available/
$ sudo mv default default.backup

4.次に、テキストエディタを使用して、以下の手順で新しいデフォルトページを作成します。

server {
        listen 443 ssl http2 default_server;
        listen [::]:443 ssl http2 default_server;

        root /var/www/html;

        index index.html index.htm index.php;

        server_name 192.168.1.13;

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

        ssl_certificate /etc/nginx/ssl/nginx.crt;
        ssl_certificate_key /etc/nginx/ssl/nginx.key;

        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_prefer_server_ciphers on;
        ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
        ssl_dhparam  /etc/nginx/ssl/dhparam.pem;
        ssl_session_cache shared:SSL:20m;
        ssl_session_timeout 180m;
        resolver 8.8.8.8 8.8.4.4;
        add_header Strict-Transport-Security "max-age=31536000;
        #includeSubDomains" always;


        location ~ \.php$ {
                include snippets/fastcgi-php.conf;
                fastcgi_pass unix:/run/php/php7.0-fpm.sock;
        }

        location ~ /\.ht {
                deny all;
        }

}

server {
       listen         80;
       listen    [::]:80;
       server_name    192.168.1.13;
       return         301 https://$server_name$request_uri;
}

上記の構成スニペットは、すべてのSSLリッスンディレクティブに http2 パラメーターを追加することにより、HTTP /2.0の使用を可能にします。

また、serverディレクティブで囲まれた抜粋の最後の部分は、すべての非SSLトラフィックをSSL/TLSデフォルトホストにリダイレクトするために使用されます。また、 server_name ディレクティブを置き換えて、自分のIPアドレスまたはDNSレコード(できればFQDN)と一致させます。

5.上記の設定でNginxのデフォルト構成ファイルの編集が終了したら、以下のコマンドを実行して、SSL証明書ファイルとキーを生成して一覧表示します。

証明書に独自のカスタム設定を入力し、Webページへのアクセスに使用されるDNSFQDNレコードまたはサーバーのIPアドレスと一致するように共通名の設定に注意してください。

$ sudo mkdir /etc/nginx/ssl
$ sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/nginx/ssl/nginx.key -out /etc/nginx/ssl/nginx.crt
$ ls /etc/nginx/ssl/

6.また、以下のコマンドを発行して、 ssl_dhparam 命令行の上記の構成ファイルで変更された強力なDH暗号を作成します。

$ sudo openssl dhparam -out /etc/nginx/ssl/dhparam.pem 2048

7. Diffie-Hellmanキーが作成されたら、Nginx構成ファイルが正しく書き込まれ、Nginx Webサーバーで適用できるかどうかを確認し、デーモンを再起動して、以下のコマンドを実行します。

$ sudo nginx -t
$ sudo systemctl restart nginx.service

8.NginxがHTTP/2.0プロトコルを使用しているかどうかをテストするには、以下のコマンドを発行します。 h2 でアドバタイズされたプロトコルの存在は、NginxがHTTP /2.0プロトコルを使用するように正常に構成されたことを確認します。最新のすべてのブラウザは、デフォルトでこのプロトコルをサポートする必要があります。

$ openssl s_client -connect localhost:443 -nextprotoneg ''

ステップ3:PHP7インタープリターをインストールする

NginxをPHP動的処理言語インタープリターとともに使用して、Ubuntu公式リポジトリからphp-fpmバイナリパッケージをインストールすることで取得したFastCGIプロセスマネージャーを使用して動的Webコンテンツを生成できます。

9.PHP7.0およびPHPがNginxWebサーバーと通信できるようにする追加パッケージを取得するには、サーバーコンソールで次のコマンドを発行します。

$ sudo apt install php7.0 php7.0-fpm 

10. PHP7.0インタープリターがマシンに正常にインストールされたら、以下のコマンドを発行してphp7.0-fpmデーモンを起動して確認します。

$ sudo systemctl start php7.0-fpm
$ sudo systemctl status php7.0-fpm

11. Nginxの現在の構成ファイルは、動的コンテンツをサーバー化するためにPHPFastCGIプロセスマネージャーを使用するように既に構成されています。

NginxがPHPインタープリターを使用できるようにするサーバーブロックを以下の抜粋に示します。したがって、デフォルトのNginx構成ファイルをさらに変更する必要はありません。

location ~ \.php$ {
                include snippets/fastcgi-php.conf;
                fastcgi_pass unix:/run/php/php7.0-fpm.sock;
        }

以下は、元のNginxデフォルト構成ファイルの場合のコメント解除および変更が必要な手順のスクリーンショットです。

12. PHPFastCGIプロセスマネージャーとのNginxWebサーバーの関係をテストするには、以下のコマンドを発行してPHP info.php テスト構成ファイルを作成し、以下のアドレスを使用してこの構成ファイルにアクセスして設定を確認します。 http:// IP_or domain/info.php

$ sudo su -c 'echo "<?php phpinfo(); ?>" |tee /var/www/html/info.php'

また、以下のスクリーンショットに示すように、PHP変数ブロックの [‘SERVER_PROTOCOL’] 行を見つけて、HTTP /2.0プロトコルがサーバーによってアドバタイズされているかどうかを確認します。

13.追加のPHP7.0モジュールをインストールするには、 apt search php7.0 コマンドを使用してPHPモジュールを見つけ、インストールします。

また、WordPressやその他のCMSをインストールする場合に役立つ、次のPHPモジュールをインストールしてみてください。

$ sudo apt install php7.0-mcrypt php7.0-mbstring

14. PHP追加モジュールを登録するには、以下のコマンドを発行してPHP-FPMデーモンを再起動します。

$ sudo systemctl restart php7.0-fpm.service

ステップ4:MariaDBデータベースをインストールする

15.最後に、LEMPスタックを完了するには、Webサイトデータを保存および管理するためのMariaDBデータベースコンポーネントが必要です。

以下のコマンドを実行してMariaDBデータベース管理システムをインストールし、PHP-FPMサービスを再起動して、MySQLモジュールを使用してデータベースにアクセスします。

$ sudo apt install mariadb-server mariadb-client php7.0-mysql
$ sudo systemctl restart php7.0-fpm.service

16. MariaDBのインストールを保護するには、Ubuntuリポジトリからバイナリパッケージによって提供されるセキュリティスクリプトを実行します。このスクリプトでは、rootパスワードの設定、匿名ユーザーの削除、リモートログインの無効化、テストデータベースの削除を求められます。

以下のコマンドを発行してスクリプトを実行し、すべての質問に yes で回答します。以下のスクリーンショットをガイドとして使用してください。

$ sudo mysql_secure_installation

17.通常のユーザーがシステムのsudo権限なしでデータベースにアクセスできるようにMariaDBを構成するには、root権限でMySQLコマンドラインインターフェイスに移動し、MySQLインタープリターで以下のコマンドを実行します。

$ sudo mysql 
MariaDB> use mysql;
MariaDB> update user set plugin=’‘ where User=’root’;
MariaDB> flush privileges;
MariaDB> exit

最後に、MariaDBデータベースにログインし、以下のコマンドを実行して、root権限なしで任意のコマンドを実行します。

$ mysql -u root -p -e 'show databases'

以上です。これで、Ubuntu16.10およびUbuntu16.04サーバーでLEMPスタックが構成され、データベースと対話できる複雑な動的Webアプリケーションをデプロイできるようになりました。