CentOS 7でソフトウェアコレクションを使用してLEMPスタックをインストールおよび構成する方法

_著者はhttps://www.brightfunds.org/organizations/apache-software-foundation[Apache Software Foundation]を選択して、https://do.co/w4do-cta [Donationsの書き込み]の一環として100ドルの寄付を受け取りました]プログラム。

前書き

LEMPソフトウェアスタックは、サーバーが動的なWebサイトおよびWebアプリをホストできるようにするために通常一緒にインストールされるオープンソースソフトウェアのグループです。 この用語は実際には L inuxオペレーティングシステムを表す頭字語で、 E Nginx Webサーバー(LAMPスタックのApacheコンポーネントを置き換えます)を表します。 サイトデータは M ySQLデータベース(MariaDBを使用)に保存され、動的コンテンツは P HPによって処理されます。

LEMPスタックコンポーネントは、CentOS 7 EPELリポジトリを使用してインストールされる場合があります。 ただし、このリポジトリには古いパッケージが含まれています。 たとえば、このリリースがhttp://php.net/supported-versions.php [長い間]をサポートしていない場合でも、EPELから5.4.16以降のバージョンのPHPをインストールすることはできません。 ソフトウェアの新しいバージョンを入手するには、SCLとも呼ばれるソフトウェアコレクションを使用することをお勧めします。 SCLは、RedHatが提供する開発者リソースのコレクションであり、以前にインストールしたパッケージに影響を与えることなく、同じシステム上で複数のバージョンのソフトウェアを使用できます。

このガイドでは、CentOS 7サーバーにLEMPスタックをインストールします。 CentOSオペレーティングシステムがLinuxコンポーネントを処理します。 Software Collectionsリポジトリを使用して残りのコンポーネントをインストールし、単純なWebページを提供するように構成します。

前提条件

このチュートリアルを始める前に、https://www.digitalocean.com/community/tutorials/initial-server-setup-with-centos-7 [CentOS 7初期サーバーセットアップガイド]に従ってCentOS 7サーバーをセットアップする必要があります。 ]、sudo非rootユーザーを含む。

手順1-ソフトウェアコレクションリポジトリを有効にする

CentOSのSCLにアクセスするには、CentOS Linux Software Collectionsリリースファイルをインストールします。

sudo yum install centos-release-scl

次のコマンドを使用して、使用可能なSCLパッケージのリストを表示します。

yum --disablerepo='*' --enablerepo='centos-sclo-rh' --enablerepo='centos-sclo-sclo' list available

システム全体の競合を避けるために、SCLパッケージは `+ / opt / rh +`ディレクトリにインストールされます。 これにより、たとえば、Python 2.7を削除したり干渉したりすることなく、CentOS 7マシンにPython 3.5をインストールできます。

SCLパッケージのすべての設定ファイルは、 `+ / etc / opt / rh / `ディレクトリ内の対応するディレクトリに保存されます。 SCLパッケージは、含まれるアプリケーションを使用するために必要な環境変数を定義するシェルスクリプトを提供します。たとえば、「 PATH 」、「 LD_LIBRARY_PATH 」、「 MANPATH 」などです。 これらのスクリプトは、ファイルシステムに「 / opt / rh // enable +」として保存されます。

これで、このガイドで概説したパッケージのインストールを開始する準備が整いました。

ステップ2-Nginx Webサーバーのインストール

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

次の `+ yum `コマンドを使用してNginxをインストールします。 強調表示されている値を、インストールするNginxのバージョンに置き換えてください。最新バージョンでは、パッケージ名に最大の数字が含まれます(この記事の執筆時点では、「 112+」)。

sudo yum install rh-nginx

インストールが完了したら、Nginxサービスを開始します。

sudo systemctl start rh-nginx-nginx

`+ systemctl status`コマンドを入力して、Nginxが実行されていることを確認します。

sudo systemctl status rh-nginx-nginx
Output● rh-nginx112-nginx.service - The nginx HTTP and reverse proxy server
  Loaded: loaded (/usr/lib/systemd/system/rh-nginx112-nginx.service; disabled; vendor preset: disabled)
  Active: active (running) since Fri 2018-03-19 15:15:43 UTC; 1min 17s ago
Main PID: 10556 (nginx)
  CGroup: /system.slice/rh-nginx112-nginx.service
          ├─10556 nginx: master process /opt/rh/rh-nginx112/root/usr/sbin/nginx
          ├─10557 nginx: worker process
          └─10558 nginx: worker process

Mar 19 15:15:43 lemp-centos-222 systemd[1]: Starting The nginx HTTP and reverse proxy server...
Mar 19 15:15:43 lemp-centos-222 nginx-scl-helper[10541]: nginx: the configuration file /etc/opt/rh/rh-nginx... ok
Mar 19 15:15:43 lemp-centos-222 nginx-scl-helper[10541]: nginx: configuration file /etc/opt/rh/rh-nginx112/...ful
Mar 19 15:15:43 lemp-centos-222 systemd[1]: Started The nginx HTTP and reverse proxy server.
Hint: Some lines were ellipsized, use -l to show in full.

この時点で、サーバーは不正ユーザーによる不正アクセスに対して脆弱になる可能性があります。 これを修正するには、firewalldを使用してファイアウォールを設定します。 最初にfirewalldをインストールする必要がある場合がありますが、これは次のコマンドで実行できます。

sudo yum install firewalld

次に、firewalldサービスを開始します。

sudo systemctl start firewalld

次に、ファイアウォールルールを追加して、サーバーへのSSHアクセス、およびNginxへのHTTPおよびHTTPS接続を許可します。

sudo firewall-cmd --permanent --add-service=ssh
sudo firewall-cmd --zone=public --permanent --add-service=http
sudo firewall-cmd --zone=public --permanent --add-service=https

firewalldをリロードして、新しいファイアウォールルールを実装します。

sudo firewall-cmd --reload

firewalldの詳細については、https://www.digitalocean.com/community/tutorials/how-to-set-up-a-firewall-using-firewalld-on-centos-7 [FirewallDを使用してファイアウォールを設定する方法] CentOS 7]。

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

サーバーを指すドメイン名がなく、サーバーのパブリックIPアドレスがわからない場合は、端末に次のように入力して見つけることができます。

curl -4 icanhazip.com

結果のIPアドレスをWebブラウザーのアドレスバーに入力すると、Nginxのデフォルトのランディングページが表示されます。

http://

image:https://assets.digitalocean.com/articles/lemp_stack_centos7/lemp-centos-nginx.png [Nginxのデフォルトページ]

このページが表示されたら、Nginxが正常にインストールされています。 続行する前に、次のコマンドを使用して、起動時にNginxを有効にします。

sudo systemctl enable rh-nginx-nginx

Nginxサーバーがインストールされ、MariaDBデータベースソフトウェアのインストールに進むことができます。

手順3-サイトデータを管理するためのMariaDBのインストール

Webサーバーができたので、サイトのデータを保存および管理するために、MySQLのドロップイン代替品であるMariaDBをインストールします。

次のコマンドでMariaDBをインストールします。 繰り返しますが、強調表示された値を、インストールするバージョン番号に置き換えます。最も大きい番号は、利用可能な最新バージョン(この記事の執筆時点では + 102 +)です。

sudo yum install rh-mariadb

インストールが完了したら、次のコマンドでMariaDBサービスを開始します。

sudo systemctl start rh-mariadb-mariadb

これで、MariaDBがインストールされ実行されます。 ただし、設定はまだ完了していません。

インストールをセキュリティで保護するために、MariaDBにはセキュリティスクリプトがインストールされています。セキュリティスクリプトは、セキュリティで保護されていないデフォルト設定の変更を求めるプロンプトを表示します。 次のように入力してスクリプトを実行します。

source /opt/rh/rh-mariadb102/enable
mysql_secure_installation

プロンプトが表示され、現在のルートパスワードが求められます。 MySQLをインストールしたばかりなので、おそらくMySQLはインストールされないので、 `+ ENTER `を押して空白のままにします。 次に、rootパスワードを設定するかどうかを尋ねるプロンプトが表示されます。 先に進み、「 Y +」と入力して、指示に従います。

. . .
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 authorization.

Set root password? [Y/n]
New password:
Re-enter new password:
Password updated successfully!
Reloading privilege tables..
... Success!
. . .

残りの質問については、各プロンプトで `+ ENTER`キーを押してデフォルト値を受け入れます。 これにより、一部の匿名ユーザーとテストデータベースが削除され、リモートルートログインが無効になり、MariaDBが行った変更がすぐに実装されるようにこれらの新しいルールがロードされます。

ここで最後に行うことは、MariaDBが起動時に起動できるようにすることです。 これを行うには、次のコマンドを使用します。

sudo systemctl enable rh-mariadb-mariadb

この時点で、データベースシステムがセットアップされ、サーバーでのPHPのセットアップに進むことができます。

ステップ4-処理のためのPHPのインストールと構成

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

Nginxには他のWebサーバーのようなネイティブPHP処理が含まれていないため、「fastCGIプロセスマネージャー」を表す `+ php-fpm +`をインストールする必要があります。 後で、処理のためにこのソフトウェアにPHPリクエストを渡すようにNginxを構成します。

このモジュールをインストールし、PHPがデータベースバックエンドと通信できるようにするヘルパーパッケージも取得します。 インストールにより、必要なPHPコアファイルが取り込まれます。 次のように入力してこれを行います。

sudo yum install rh-php-php-fpm rh-php-php-mysqlnd

これでPHPコンポーネントがインストールされましたが、セットアップのセキュリティを強化するために少し構成を変更する必要があります。

  • root *権限でメインの `+ php.ini +`設定ファイルを開きます:

sudo vi /etc/opt/rh/rh-php/php.ini

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

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

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

71 / php.ini ’> / etc / opt / rh / rh-php / php.ini

cgi.fix_pathinfo=

終了したらファイルを保存して閉じます( `+ ESC `を押し、 `:wq `を入力してから、 ` Enter +`を押します)。

次に、php-fpm設定ファイル `+ www.conf +`を開きます。

sudo vi /etc/opt/rh/rh-php/php-fpm.d/www.conf

デフォルトでは、このファイルはApacheサーバーで動作するように構成されています。 サーバーにはNginxがインストールされているため、 + user`と + group`を設定する行を見つけて、それらの値を「apache」から「nginx」に変更します。

71 / php-fpm.d / www.conf ’> / etc / opt / rh / rh-php / php-fpm.d / www.conf

user =
group =

次に、ファイルを保存して閉じます。

次に、次のように入力してPHPプロセッサを起動します。

sudo systemctl start rh-php-php-fpm

次に、php-fpmを有効にしてブート時に開始します。

sudo systemctl enable rh-php-php-fpm

これで、PHPがサーバーに正常にインストールされました。 ただし、サーバーがサイトのコンテンツを正しく提供できるように、インストールした他のソフトウェアと連携するように設定する必要があります。

ステップ5-PHPプロセッサーを使用するためのNginxの構成

この時点で、LEMPスタックの必須コンポーネントがすべてインストールされています。 まだ必要な設定変更は、動的コンテンツにPHPプロセッサを使用するようにNginxに指示することだけです。

この構成の変更はサーバーブロックレベルで行われます(サーバーブロックはApacheの仮想ホストに似ています)。 次のように入力して、デフォルトのNginxサーバーブロック構成ファイルを開きます。

sudo vi /etc/opt/rh/rh-nginx/nginx/nginx.conf

`+ location〜\ .php $ `ブロック( ` server `ブロック内にあるPHPリクエストを処理するファイルのセグメント)とその内容のコメントを外します。各行の先頭からポンド記号(#)を削除します。 また、 ` fastcgi_param `オプションを ` SCRIPT FILENAME $ document_root $ fastcgi_script_name +`に更新する必要があります。 これは、処理するファイルを見つけることができるドキュメントルートの場所をPHPに通知します。

必要な変更を行った後、 `+ server +`ブロックは次のようになります。

/ etc / nginx / sites-available / default

...
server {
   listen       80 default_server;
   listen       [::]:80 default_server;
   server_name  _;
   root         /opt/rh/rh-nginx112/root/usr/share/nginx/html;

   # Load configuration files for the default server block.
   include      /etc/opt/rh/rh-nginx112/nginx/default.d/*.conf;

   location / {
   }

   error_page 404 /404.html;
   location = /40x.html {
   }

   error_page 500 502 503 504  /50x.html;
   location = /50x.html {
   }

   # proxy the PHP scripts to Apache listening on 127.0.0.1:80
   #
   #location ~ \.php$ {
   #    proxy_pass   http://127.0.0.1;
   #}

   # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
   #








   # deny access to .htaccess files, if Apache's document root
   # concurs with nginx's one
   #
   #location ~ /\.ht {
   #    deny  all;
   #}
}
...

変更を行ったら、ファイルを保存してエディターを終了できます。

次に、次のコマンドを実行して、構成ファイルの構文エラーをテストします。

source /opt/rh/rh-nginx/enable
sudo nginx -t

エラーが報告された場合は、戻ってファイルを再確認してから続行してください。

設定ファイルが有効になったら、Nginxをリロードして、行った変更を実装します。

sudo systemctl reload rh-nginx-nginx

Nginx、PHP、およびMariaDBがインストールおよび構成されたので、あとは、LEMPスタック構成がサイトの訪問者にコンテンツを正しく配信できることを確認するだけです。

手順6-設定をテストするためのPHPファイルの作成

これでLEMPスタックが完全にセットアップされ、テストして、NginxがPHPプロセッサに `+ .php +`ファイルを正しく渡すことができることを検証できます。 これは、ドキュメントルートにテストPHPファイルを作成することによって行われます。

ドキュメントルート内で「+ info.php +」という新しいファイルを開きます。

sudo vi /opt/rh/rh-nginx/root/usr/share/nginx/html/info.php

新しいファイルに次の行を追加します。 これは、サーバーに関する情報を返す有効なPHPコードです。

112 / root / usr / share / nginx / html / info.php ’> / opt / rh / rh-nginx / root / usr / share / nginx / html / info.php

<?php phpinfo(); ?>

終了したら、ファイルを保存して閉じます。 次に、サーバーのドメイン名またはパブリックIPアドレスに続いて `+ / info.php +`にアクセスして、Webブラウザーでこのページにアクセスします。

http:///info.php

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

image:https://assets.digitalocean.com/articles/lemp_stack_centos7/lemp-centos-php.png [PHPページ情報]

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

Nginxがページを正しく表示することを確認したら、作成したファイルを削除することをお勧めします。実際には、許可されていないユーザーに設定に関するヒントを与え、侵入を試みるのに役立ちます。 後で必要な場合は、いつでもこのファイルを再生成できます。

次のように入力してファイルを削除します。

sudo rm /opt/rh/rh-nginx/root/usr/share/nginx/html/info.php

これで、LEMPスタックのすべてのコンポーネントがサーバーに正しくインストールおよび構成されていることを確認できました。

結論

これで、CentOS 7サーバーに完全に構​​成されたLEMPスタックができました。 これにより、訪問者にWebコンテンツを提供するための非常に柔軟な基盤が得られます。

SCLは、ソフトウェアのさまざまなバージョンをインストールし、それらを切り替えるためにも使用されます。 次を実行すると、システムにインストールされているすべてのコレクションのリストを表示できます。

scl --list

興味がある場合は、https://www.softwarecollections.org/ [公式サイト]でソフトウェアコレクションに関する詳細情報を見つけることができます。

Related