LEMPは、次のソフトウェアスタックを表す頭字語です。 Linux カーネル、 Nginx Webサーバー、 MariaDB データベース(または MySQL )、および PHP サーバー側プログラミング言語。このソフトウェアは、動的なWebサイトまたはインタラクティブなWebアプリケーションを提供するために、今日インターネット上のサーバーで広く使用されています。
Nginxは、活発に開発されている最新のリソース効率の高いWebサーバーであり、ApacheHTTPサーバーに次いでインターネット上で2番目に使用されているWebサーバーです。リクエストの処理に非同期のイベント駆動型アプローチを使用しているため、特に高速です。
このチュートリアルでは、最新バージョンのDebian 10にLEMPスタック(NginxとMariaDBおよびPHP 7)をインストールして構成する方法を示します。
要件
- Debian 10オペレーティングシステムの最新バージョン。次のリンクhttps://www.debian.org/CD/http-ftp/から入手でき、VPS、仮想マシン、または直接に最初からインストールされます。自己専用のマシン。
- サーバーのコンソールまたはリモートSSH接続への直接アクセス。
- マシンの静的IPアドレスで構成されたネットワークインターフェース
- ネームサーバー側で構成されたAおよびCNAME(www)DNSレコードを持つ登録済みのパブリックドメイン名。このガイドでは、example.comドメインを例として使用します。
ステップ1:初期構成
最初のステップは、rootまたはシステムのroot権限を持つユーザーでログインし、次のコマンドを発行してDebian 10コンポーネント(カーネルのアップグレード、パッケージの更新、セキュリティパッチ)を更新することです。
sudo apt update sudo apt upgrade sudo apt dist-upgrade
次に、以下のコマンドを実行して、マシンのホスト名のわかりやすい名前を追加してください。その後、それに応じて新しいホスト名を適用するために、システムを再起動する必要があります。
sudo hostnamectl set-hostname hostname.yourdomain.com
sudo init 6
次に、net-tools wget、curl、bash-completionユーティリティをインストールして、後でそれらを使用してDebianサーバーを簡単に管理できるようにします。
sudo apt install net-tools sudo wget curl bash-completion
ステップ2:NginxWebサーバーをインストールする
Nginxは、インターネット上の訪問者にWebページを表示するために使用される最新のリソース効率の高いWebサーバーです。サーバーのコンソールで以下のコマンドを実行して、Debian10リポジトリからNginxウェブサーバーをインストールします。
sudo apt-get install nginx
上の画像に示されているように、aptパッケージマネージャーはパッケージの追加の依存関係を確認し、インストールプロセスを続行することに同意するかどうかを尋ねます。はいと答えます( y )Nginxをインストールするため。
次に、 netstatを実行します システムのネットワークソケットを表示し、nginxデーモンがポート80/TCPでリッスンしているかどうかを確認するためのコマンド。または、 systemctlを発行することもできます。 次の画像に示すように、nginxデーモンのステータスを確認するためのコマンド。
sudo netstat -tlp sudo netstat –tlpn sudo systemctl status nginx.service
nginxサーバーがシステムで稼働し始めたら、 ifconfigを発行します ネットワークインターフェイス情報を表示し、マシンのIPアドレスを一覧表示するためのコマンド。次に、ブラウザを開き、ブラウザにIPアドレスを追加して、HTTPプロトコル経由でNginxのデフォルトのWebページにアクセスします。 「WelcometoNginx!」というメッセージブラウザウィンドウに表示されます。
http://www.example.com
または
http://192.168.0.100
ステップ3:Nginx HTTP/2.0プロトコルをアクティブ化する
デフォルトでは、Debian10リポジトリによって提供される最新バージョンのNginxバイナリはHTTP/2.0プロトコルで構築されています。 HTTP/2.0はTSL/SSLプロトコルと統合されており、セキュリティで保護されたトランザクションを介してWebページの読み込み速度を向上させることができます。
ChromeやFirefoxなどの最新のブラウザはすべて、デフォルトでこのプロトコルをサポートする必要があります。ただし、MicrosoftInternetExplorerおよびMicrosoftEdgeブラウザはまだhttp2プロトコルを解析できないことに注意してください。
Debian10のNginxでHTTP/2.0プロトコルを有効にするには、デフォルトのNginx構成ファイルにいくつかの変更を加えるか、新しい構成ファイルを作成して443サーバーのTLSコードブロックを追加する必要があります。これを実現するには、最初に次のコマンドを実行して、デフォルトのNginxサイトで使用可能な構成のバックアップを作成します。サイトで利用可能なディレクトリの内容を一覧表示して、バックアップが成功したことを確認します。
sudo cp /etc/nginx/sites-available/default{,.backup}
ls /etc/nginx/sites-available/
次に、テキストエディタを使用してNginx TLS構成ファイルを作成し、次のコンテンツを追加します。
sudo nano /etc/nginx/sites-available/default-ssl
default-ssl ファイルの抜粋:
server { listen 443 ssl http2 default_server; listen [::]:443 ssl http2 default_server; #server_name www.domain.tld; server_name _; root /var/www/html; access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log; #SSL Certificates ssl_certificate "/etc/nginx/ssl/cert.pem"; ssl_certificate_key "/etc/nginx/ssl/privekey.pem"; ssl_dhparam /etc/nginx/ssl/dhparam.pem; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5; ssl_session_cache shared:SSL:1m; ssl_session_timeout 10m; ssl_ciphers HIGH:!aNULL:!MD5; ssl_prefer_server_ciphers on; add_header Strict-Transport-Security "max-age=31536000; #includeSubDomains" always; location / { index index.php index.html index.htm; try_files $uri $uri/ /index.php?$args $uri/ =404; } set $cache_uri $request_uri; location ~ /.well-known { allow all; } location ~ \.php$ { include snippets/fastcgi-php.conf; # # # With php-fpm (or other unix sockets): fastcgi_pass unix:/var/run/php/php7.0-fpm.sock; # # With php-cgi (or other tcp sockets): # fastcgi_pass 127.0.0.1:9000; } # deny access to .htaccess files, if Apache's document root # concurs with nginx's one # #location ~ /\.ht { # deny all; #} }
HTTP / 2.0プロトコルの使用を可能にするステートメントは、 http2という単語で表されます。 下の行から。
listen 443 ssl http2 default_server;
訪問者のブラウザがHTTP2プロトコルをサポートしていない場合は、 http2を削除してください プロトコルを無効にし、nginxサービスを再起動して変更を適用するために、サーバー構成から通知します。
ドメインを登録している場合、またはIPアドレスに基づく仮想ホスティングを使用している場合は、 server_nameの後にドメイン名またはIPアドレスを追加する必要があります。 以下の例に示すようなディレクティブ。
server_name www.example.com example.com;
上記の設定でNginxのデフォルト設定ファイルの編集が終了したら
NginxでSSLを構成する
上記のnginxのTSL構成ファイルでは、TLS証明書とキーのパスを指定しています。システムにキーがまだインストールされていないため、次のコマンドを入力して、自己署名SSL証明書ファイルとキーを生成します。 SSL証明書の生成中に、一連の質問が表示されます。国、州、または州の2桁のコード、市の名前、組織の名前、組織のユニットの名前、サーバーの一般名、および有効なメールアドレスを入力します。共通名は、DNSサーバーからのコンピューターのFQDNレコード、またはWebサイトへのアクセスに使用されるサーバーのIPアドレスと一致するように設定する必要があります。次のスクリーンショットに示すように、証明書とキーはsslという名前のnginxディレクトリの下の新しいディレクトリに保存されます。
sudo mkdir /etc/nginx/ssl
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/nginx/ssl/privekey.pem -out /etc/nginx/ssl/cert.pem
ls /etc/nginx/ssl/
また、新しい強力なDiffie-Hellman暗号を生成します。これは、上記の構成ファイルの ssl_dhparamにあります。 次のコマンドを発行して、ステートメント行:
sudo openssl dhparam -out /etc/nginx/ssl/dhparam.pem 2048
最後に、Diffie-Hellmanキーを生成した後、 default-ssl のシンボリックリンクを作成して、TLS構成ファイルをアクティブ化します。 サイトからの構成ファイル-利用可能 サイト対応へのディレクトリ 次のコマンドを発行してディレクトリを作成します。
ln -s /etc/nginx/sites-available/default-ssl /etc/nginx/sites-enabled/
次に、構文エラーについてNginx構成ファイルをテストし、すべて問題がない場合は、以下のコマンドを実行してすべての変更を適用するためにNginxデーモンを再起動します。
sudo nginx -t
sudo systemctl restart nginx.service
SSL構成が成功したかどうかを確認します
Nginx WebサーバーがSSLポートにバインドされているかどうかを確認するには、netstatコマンドを発行し、ポート443がリスニングモードで表示されているかどうかを確認します。
netstat -tlpn | grep nginx
以下のスクリーンショットは、上記の手順を示しています。
次に、ブラウザからHTTPプロトコルを介してドメイン名またはサーバーのIPアドレスに移動し、nginxのデフォルトページを表示します。自己署名証明書を使用しているため、ブラウザにエラーが表示されるはずです。 nginxのデフォルトのメインページに渡すためにエラーを確認してください。
Nginxがデフォルトのindex.htmlを提供していない場合 webrootディレクトリのページで、次のコマンドを発行してインデックスページを作成します。
echo "test page" | tee /var/www/html/index.html
NginxによってアドバタイズされたHTTP/2.0プロトコルの存在を確認するには、以下のコマンドを発行します。 h2を探します サーバーによってアドバタイズされたプロトコルの単語。
openssl s_client -connect localhost:443 -nextprotoneg ''
F12ファンクションキーを押してページをリクエストすることで、接続の状態を視覚化し、ChromeブラウザからNginxによってhttp2プロトコルがアドバタイズされているかどうかを確認することもできます。リクエストで使用されているプロトコルを表示するには、[ネットワーク]タブに移動し、[タイプ]メニューを右クリックして、[プロトコルファイル]をオンにします。 HTTP2プロトコルはh2として表示される必要があります 以下のスクリーンショットに示すように、現在のプロトコル列に表示されます。
ステップ4:PHP7をインストールする
Nginx Webサーバーは、Nginxが処理要求を渡すPHP FastCGIプロセスマネージャーを介して、PHPプログラミング言語インタープリターの助けを借りて動的なWebコンテンツを提供できます。 FastCGIプロセスマネージャーは、 php-fpmをインストールすることで入手できます。 Debian9公式リポジトリが提供するコンパイル済みパッケージ。
PHPがNginxWebサーバーと通信できるようにする追加のパッケージとともに、php-fpmプロセスマネージャーとPHP7.0インタープリターをシステムにインストールするには、サーバーコンソールで次のコマンドを発行します。
sudo apt install php7.3 php7.3-fpm php7.3-curl php7.3-gd
PHP-FPMを開始
PHP 7.3インタープリターがシステムに正常にインストールされたら、次のコマンドを発行してphp7.3-fpmデーモンを起動および確認します。
sudo systemctl start php7.3-fpm
sudo systemctl status php7.3-fpm
上記のNginxのTLS構成ファイルには、動的コンテンツを提供するためにPHPFastCGIプロセスマネージャーのブロック構成がすでに追加されています。 NginxがPHPインタープリターを使用できるようにするコードのブロックを以下の抜粋に示します。したがって、NginxTSL構成ファイルを変更するための手順はこれ以上必要ありません。下のスクリーンショットの行頭からのハッシュタグ#記号はコメントです。構成ファイルのコメント行は、Nginxウェブサーバーではデフォルトで無視されます。
location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/run/php/php7.3-fpm.sock; }
PHP構成のテスト
NginxがphpファイルをPHPプロセッサに正しく渡すことができるかどうかをテストおよび検証するには、PHP info.phpを作成します。 以下のコマンドを発行して構成ファイルをテストします
sudo su -c 'echo "<?php phpinfo(); ?>" > /var/www/html/info.php'
次に、サーバーのドメイン名またはパブリックIPアドレスに続いて /info.php に移動して、Webブラウザのphp情報ページにアクセスします。 下の画像に示すように。
https://www.example.com/info.php
または
http://192.168.0.100/info.php
$ _ SERVER [‘SERVER_PROTOCOL’] の行を検索して、HTTP/2.0プロトコルがサーバーによってアドバタイズされているかどうかを確認することもできます。 PHP変数について。
他のPHP7.3モジュールをインストールするには、apt検索を実行します php7.3 特定のPHPモジュールを見つけてインストールするコマンド。 WordPressなどのコンテンツ管理システムのインストールを計画している場合は、次の追加モジュールをインストールしてください。
sudo apt install php7.3-mcrypt php7.3-mbstring
ただし、新しくインストールされたPHPモジュールは、システムでデフォルトで有効になっていません。それらをアクティブ化するには、PHP-FPMサービスを再起動します。
sudo systemctl restart php7.3-fpm.service
ステップ5:MariaDBデータベースをインストールする
最後に、LAMPスタックパズルの最後のピースがデータベースにありません。 MariaDBデータベースのLEMPコンポーネントは、テーブルと列にレコードを格納するために使用されます。 Webアプリケーションのデータを動的に管理します。 MariaDBをインストールするには、サーバーのコンソールで次のコマンドを実行します。次に、PHP FPMデーモンを再起動して、データベースへのアクセスに必要なPHP-MySQLモジュールを有効にします。
sudo apt install mariadb-server mariadb-client php7.0-mysql
sudo systemctl restart php7.0-fpm.service
デフォルトでは、システムのrootアカウントまたはroot権限を持つユーザーは、パスワードを入力しなくてもデータベースにアクセスできます。システムユーザーがデータベースにアクセスしようとするたびにMySQLがパスワードの入力を求めるようにこの動作を変更するには、root権限を持つコマンドラインインターフェイスを使用してMySQLデータベースにログインし、MySQLコンソールで次のコマンドを実行します。
>sudo mysql
MariaDB> use mysql; MariaDB> update user set plugin='' where User='root'; MariaDB> flush privileges; MariaDB> exit
MariaDBでrootパスワードを設定
次のステップでは、セキュリティスクリプトmysql_secure_installationを実行してMariaDBを保護していることを確認してください。 これは、Debianリポジトリからのインストールパッケージによって提供されます。スクリプトの実行中に、MariaDBデータベースを保護するために設計された一連の質問が表示されます。例:MySQLルートパスワードの変更、匿名ユーザーの削除、リモートルートログインの無効化、テストデータベースの削除。以下のコマンドを発行してスクリプトを実行します。 MySQLデーモンを完全に保護するために尋ねられるすべての質問に「はい」と答えます。ガイドとして以外は、以下のスクリプト出力を使用してください。
sudo mysql_secure_installation
NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY! In order to log into MariaDB to secure it, we'll need the current password for the root user. If you've just installed MariaDB, and you haven't set the root password yet, the password will be blank, so you should just press enter here. 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. You already have a root password set, so you can safely answer 'n'. Change the root password? [Y/n] y New password: Re-enter new password: Password updated successfully! Reloading privilege tables.. ... Success! By default, a MariaDB installation has an anonymous user, allowing anyone to log into MariaDB without having to have a user account created for them. This is intended only for testing, and to make the installation go a bit smoother. You should remove them before moving into a production environment. Remove anonymous users? [Y/n] y ... Success! Normally, root should only be allowed to connect from 'localhost'. This ensures that someone cannot guess at the root password from the network. Disallow root login remotely? [Y/n] y ... Success! By default, MariaDB comes with a database named 'test' that anyone can access. This is also intended only for testing, and should be removed before moving into a production environment. Remove test database and access to it? [Y/n] y - Dropping test database... ... Success! - Removing privileges on test database... ... Success! Reloading the privilege tables will ensure that all changes made so far will take effect immediately. Reload privilege tables now? [Y/n] y ... Success! Cleaning up... All done! If you've completed all of the above steps, your MariaDB installation should now be secure. Thanks for using MariaDB!
最後に、MariaDBの機能をテストするには、コンソールからデータベースにログインして、次のコマンドを実行します。デフォルトのデータベースのリストがMariaDBコンソールに表示されます。 MariaDBコンソールを終了のままにします ステートメント。
mysql -u root –p
MariaDB [(none)]> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | +--------------------+ 3 rows in set (0.00 sec) MariaDB [(none)]> exit
それで全部です! Nginx Webサーバー、MariaDBデータベース、およびPHPプログラミング言語がDebian10マシンにインストールされます。これで、訪問者向けの動的なWebサイトまたはWebアプリケーションの構築を開始できます。