LEMPは、Webアプリケーションを提供するために一般的に一緒に使用されるオープンソースソフトウェアのコレクションです。 LEMPという用語は、Nginx( engine-x と発音)を使用したLinuxオペレーティングシステムの構成を表す頭字語です。 、したがって、略称のE)Webサーバー。サイトデータはMySQLまたはMariaDBデータベースに保存され、動的コンテンツはPHPによって処理されます。動的コンテンツは、パフォーマンスとスケーラビリティのために、広範なWebサイトのホストに広く使用されています。
次のチュートリアルでは、 AlmaLinux 8にLEMP(Nginx、MariaDB、PHP 8.0)をインストールする方法を学習します。 。
- 推奨OS: AlmaLinux8。
- ユーザーアカウント: sudo特権を持つユーザーアカウント またはrootアクセス(suコマンド) 。
オペレーティングシステムの更新
AlmaLinuxを更新します 既存のすべてのパッケージが最新であることを確認するためのオペレーティングシステム:
sudo dnf upgrade --refresh -y
チュートリアルでは、sudoコマンドを使用します およびsudoステータスがあると仮定 。アカウントのsudoステータスを確認するには:
sudo whoami
sudoステータスを示す出力例:
[joshua@localhost ~]$ sudo whoami
root
sudoユーザーアカウントをまだ設定しておらず、設定したい場合は、AlmaLinuxでSudoersにユーザーを追加する方法のチュートリアルにアクセスしてください。 。
rootアカウントを使用するには 、rootパスワードを指定して次のコマンドを使用してログインします。
su
Nginxをインストール
LEMPスタックのインストールを開始するには、Nginx Webサーバーをインストールする必要があります、 これは、次のターミナルコマンドで実行できます:
sudo dnf install nginx
出力例:
(Y)、と入力します 次に、(ENTER KEY)を押します。 続行します。
ビルドバージョンを確認してインストールを確認します:
nginx -v
出力例:
nginx version: nginx/1.14.1
デフォルトでは、AlmaLinuxにNginxをインストールすると、有効になりません。起動時に有効にして起動するには、次を使用します。
sudo systemctl enable nginx && sudo systemctl start nginx
(シンボリックリンク)を正常に有効にした例 :
Created symlink /etc/systemd/system/multi-user.target.wants/nginx.service → /usr/lib/systemd/system/nginx.service.
次に、次のターミナルコマンドを使用して、Nginxサービスのステータスを確認します。
systemctl status nginx
すべてが正常であるという出力例:
次のコマンドを使用して、ファイアウォールを通過するHTTPトラフィックを許可することをお勧めします。
sudo firewall-cmd --zone=public --add-service=http --permanent
次のコマンドでファイアウォールをリロードします:
sudo firewall-cmd --reload
これで、 HTTP:// server-ip と入力して、Nginxウェブサーバーが動作していることを確認できます。 またはHTTP:// domain-name インターネットブラウザで、次の情報を取得する必要があります:
MariaDBのインストールと構成
インストール
MariaDBはMySQLのドロップイン代替品であり、OracleがMySQLをクローズドソースで潜在的に有料の製品に変える可能性があることを懸念するMySQLチームの元メンバーによって開発されました。
次のコマンドを入力して、MariaDBをインストールします。
sudo dnf install mariadb-server mariadb
出力例:
(Y)、と入力します 次に、(ENTER KEY)を押します。 続行します。
MariaDBのインストールを確認し、インストールされているビルドを確認するには、次のコマンドを入力します。
mysql --version
出力例:
mysql Ver 15.1 Distrib 10.3.28-MariaDB, for Linux (x86_64) using readline 5.1
デフォルトでは、MariaDBはNginxと同じように有効化されていませんでした。システム起動時にMariaDBを起動して有効にするには、次の(systemctl)を使用します ターミナルコマンド:
sudo systemctl enable mariadb && sudo systemctl start mariadb
(シンボリックリンク)を正常に有効にした例 :
Created symlink /etc/systemd/system/mysql.service → /usr/lib/systemd/system/mariadb.service.
Created symlink /etc/systemd/system/mysqld.service → /usr/lib/systemd/system/mariadb.service.
Created symlink /etc/systemd/system/multi-user.target.wants/mariadb.service → /usr/lib/systemd/system/mariadb.service.
ここで、次のコマンドを使用してすべてが機能していることを確認します。
systemctl status mariadb
すべてが正常であるという出力例:
構成
MariaDBがAlmaLinuxシステムで稼働しているので、インストール後のセキュリティスクリプトを実行する必要があります。これは、デフォルト設定が安全でないことが多いため、確認する必要があるためです。これはスキップしないことを強くお勧めします。
まず、次のようにMariaDBセキュアインストールコマンドを実行します。
sudo mysql_secure_installation
次に、(MariaDBルートパスワード)の入力を求めるプロンプトが表示されます。今のところ、(ENTER)を押します ルートパスワードとしてのキーはまだ以下のように設定されていません:
次に、(Y)と入力します Enterキーを押して、(ルート)を設定します 以下のパスワード:
安全に(ENTER)を押すことができる次の一連の質問 、答えます(Y) (匿名ユーザーを削除し、リモートrootログインを無効にし、テストデータベースを削除する)を求める後続のすべての質問に 。 (Y)に注意してください は大文字です。つまり、(ENTER)を押したときのデフォルトの回答です。 キー。
以下の例:
上記で行うべきことの概要:
- rootのパスワードを設定する アカウント。
- ローカルホストの外部からアクセスできるルートアカウントを削除します。
- 匿名ユーザーアカウントの削除。
- テストデータベースを削除します。デフォルトでは、匿名ユーザーがアクセスできます。
この手順はMariaDBデータベースのセキュリティに不可欠であり、何をしているかを理解していない限り、変更したりスキップしたりしないでください。
次に、次のコマンドを使用してMariaDBデータベースターミナルにログインします。
sudo mysql -u root -p
インストール設定またはインストール後のセキュリティスクリプトで設定したrootパスワードを入力するように求められます。 MySQLサービスインスタンス内に入ると、次のコマンドをテストとして実行して、動作を確認できます。
次のSHOWDATABASEコマンドを入力します :
SHOW DATABASES;
MySQLとMariaDBを初めて使用する場合、すべてのコマンドは「。」で終わる必要があります。 」
例:
MariaDBデータベースターミナルを終了するには、次のように(exit;)と入力します。
exit;
PHPのインストール(PHP-FPM)
PHP8.0リポジトリのインポート
LEMPインストールにインストールする最後の部分はPHPです。 (PHP-FPM)をインストールする必要があります これは(FastCGI Process Manager)の略です 。 PHPインストールを強くお勧めします(Remi) リポジトリ。知らない人のために、RemiはRhelファミリーのPHPリリースのメンテナーです。チュートリアルでは、最新のPHP8.0をインストールします。
最初のタスクは、(EPEL )をインストールすることです )リポジトリ。( Enterprise Linux用の追加パッケージ)の略です。 RhelおよびAlmaLinuxの最近のユーザー向けに、EPELにはEnterpriseLinuxで最も一般的に使用されるソフトウェアパッケージが含まれています。
EPELをインストールするには、次の(dnf)を使用します ターミナルコマンド:
sudo dnf install epel-release
出力例:
(Y)、と入力します 次に、(ENTER KEY)を押します。 続行します。
EPELリポジトリを追加したので、(Remiリポジトリ)を有効にします。 次のように:
sudo dnf install dnf-utils http://rpms.remirepo.net/enterprise/remi-release-8.rpm
(Y)、と入力します 次に、(ENTER KEY)を押します。 続行します。
次に、(dnf)を使用します リポジトリリストを更新するコマンド:
sudo dnf update
(GPGキー)のインポートに関するクエリが端末に表示されます。 以下のRemiリポジトリの場合:
(Y)、と入力します 次に、(ENTER KEY)を押します。 続行します。
(Y)と入力するようにさらに2回求められることに注意してください さらに2回、GPGキーをインポートします。これは問題ありません。
次に、EPELリリースをアップグレードするように求められます:
例:
(Y)、と入力します 次に、(ENTER KEY)を押します。 続行します。
これでEPELリポジトリが最新になり、チュートリアルの次の部分に進む準備が整いました。
PHP 8.0(Remi)リポジトリを有効にする
PHP 7.2は、Remiのリポジトリを使用したRhel /AlmaLinuxへの標準インストールのデフォルトのPHP選択です。簡単なヒントは、(list php)を使用することです。 使用可能なオプションとデフォルトを確認するコマンド。次のコマンドでこれを実行できます:
sudo dnf module list php
以下のような出力が得られます。 (d)に注意してください インストールするデフォルトのPHPのタグ:
上記のように、(d)タグはPHP 7.2の隣にあります。これをリセットして変更し、AlmaLinuxにPHP8.0をインストールする必要があります。 PHPリストをリセットするには、次のコマンドを使用すると簡単です。
sudo dnf module list reset php
次に、次のコマンドでPHP8.0を有効にします。
sudo dnf module enable php:remi-8.0 -y
完了後の出力例:
PHP-7.4を有効にできます dnfmoduleresetコマンドに従う 代わりにdnfモジュールを使用してphp:remi-7.4コマンドを有効にします。アプリケーションに必要なバージョンを選択してください。これは これは、選択したPHPの最新バージョンを使用した例にすぎません。
PHP8.0をインストールする
Remi PHPリポジトリを追加し、PHP 8.0をAlmaLinuxシステムのデフォルトバージョンとして有効にしたので、次のコマンドを使用してPHP8.0をインストールできます。
sudo dnf install php
出力例:
(Y)、と入力します 次に、(ENTER KEY)を押します。 続行します。
PHP 8.0で最も一般的に使用される拡張機能をインストールする場合は、次のコマンドを使用します。
sudo dnf install php-cli php-fpm php-curl php-mysqlnd php-gd php-opcache php-zip php-intl php-common php-bcmath php-imap php-imagick php-xmlrpc php-json php-readline php-memcached php-redis php-mbstring php-apcu php-xml
注:これはオプションではないオプションを削除してください。
出力例:
(Y)、と入力します 次に、(ENTER KEY)を押します。 続行します。
これでPHP8.0がインストールされ、拡張機能は次のコマンドでバージョンを確認します。
php -v
出力例:
PHP 8.0.10 (cli) (built: Aug 24 2021 15:40:40) ( NTS gcc x86_64 )
Copyright (c) The PHP Group
Zend Engine v4.0.10, Copyright (c) Zend Technologies
with Zend OPcache v8.0.10, Copyright (c), by Zend Technologies
最後に、デフォルトで有効にされていない前のNginxやMariaDBなどのPHP-FPMは、システムの起動時にPHP-FPMを有効にし、開始するには、次の(systemctl)を使用します。 コマンド:
sudo systemctl enable php-fpm && sudo systemctl start php-fpm
(シンボリックリンク)を正常に有効にする例 :
Created symlink /etc/systemd/system/multi-user.target.wants/php-fpm.service → /usr/lib/systemd/system/php-fpm.service.
ここで、LEMPインストールの他の要件のステータスを確認する場合と同様に、次の(systemctl)を使用します。 ステータスをチェックしてすべてが機能していることを確認するターミナルコマンド:
systemctl status php-fpm
エラーがない場合は、次の出力が表示されます。
(www-data)を使用するDebian/UbuntuへのLEMPインストールとは異なり ユーザーの場合、これはRHELファミリのインストールには当てはまりません。デフォルトでは、AlmaLinuxでは、PHP-FPMサービスは(Apache)で実行されるように設計されています。 ユーザー。Nginxを使用しているため正しくありません。これを修正する必要があります。
まず、次の(www.conf)を開きます 構成ファイル:
sudo nano /etc/php-fpm.d/www.conf
次に、(Apache)を置き換えます (Nginx)のユーザーとグループ ユーザーとグループ:
保存するには、(CTRL + O)を押します 次に、(CTRL + X)を終了します 。
ここで、PHP-FPMサービスをリロードまたは再起動します:
sudo systemctl restart php-fpm
テストPHPランディングページの作成
Nginx WebサーバーでPHP-FPMをテストするには、webrootディレクトリにファイルを作成する必要があります。
ガイドとして、ファイルに(info.php)という名前を付けます。 次のように:
sudo nano /usr/share/nginx/html/info.php
次の(info.php)を貼り付けます ファイル:
<?php
phpinfo();
?>
ファイルを保存します(CTRL + O)、 次に、(CTRL + X)を終了します 。
次に、インターネットブラウザのアドレスバーに、(server-ip-address / info.php)と入力します。 。ローカルコンピューターにNginxをインストールしている場合は、デフォルトの(127.0.0.1 / info.php)を使用します または(localhost / info.php) 。
サーバーのPHP情報が表示されます:
この情報は、PHPスクリプトがNginxWebサーバーで正しく実行できることを示しています。
セキュリティ上の理由から、ファイルを削除する必要があります。これを行うには、次のコマンドを使用します。
sudo rm -f /var/www/html/info.php
将来の目的のためにファイルを保持したい場合は、サーバー{}のNginxサーバーブロックファイルに以下を追加します セクション:
location ^~ /info.php {
allow <YOUR IP ADDRESS>;
deny all;
}
これにより、指定されたIPアドレスのみがファイルにアクセスできるようになります。潜在的なハッカーや悪意のある攻撃者からできるだけ多くのシステム情報を隠すことをお勧めします。
Nginxサーバーブロックを作成する
NginxサーバーブロックはApacheの仮想ホストに相当し、パブリックビジターに応答するNginxWebサーバーの構成が含まれています。以下は、PHP-FPMを念頭に置いてこれを実現する方法の完全な例です。
サーバーブロックディレクトリの作成
(。conf) ファイルは通常、(サイトで利用可能)にあります および(サイト対応)。 さまざまなディストリビューションから来たユーザーは、これがすでにインストールされていることに気付くでしょう。ただし、AlmaLinuxの場合は、それらを作成する必要があります。
必要な2つの(サイト)を作成します 次のコマンドを使用してディレクトリを作成します:
sudo mkdir /etc/nginx/sites-available && sudo mkdir /etc/nginx/sites-enabled
Nginx構成ファイルを編集する
必要なディレクトリを作成したら、Nginxのメイン構成ファイルを編集します(nginx.conf) 次のように:
sudo nano /etc/nginx/nginx.conf
次に、次の数行を(HTTP)に貼り付けます (nginx.conf)のセクション 構成ファイル:
include /etc/nginx/sites-enabled/*.conf;
server_names_hash_bucket_size 64;
例:
注、(server_names_hash_bucket_size) ドメイン名の解析に割り当てられるメモリを増やします。
(CLTR + O)を使用して構成を保存します 次に(CTRL + X) 終了します。
サーバーブロック構成ファイルの作成
ここで、任意のテキストエディタを使用してサーバーブロックファイルを作成します。ガイドでは(nano)を使用します :
sudo nano /etc/nginx/sites-available/example.com.conf
次に、PHP-FPMを有効にした実例を使用して構成ファイルを設定する必要があります。
コピーして貼り付ける例を以下に示します。 (server_name)を置き換えることに注意してください ドメイン名またはIPを使用:
server {
listen 80;
listen [::]:80;
server_name example.com www.example.com;
root /var/www/html/example.com/;
index index.php index.html index.htm index.nginx-debian.html;
location / {
try_files $uri $uri/ /index.php;
}
location ~ \.php$ {
fastcgi_pass unix:/run/php-fpm/www.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
# A long browser cache lifetime can speed up repeat visits to your page
location ~* \.(jpg|jpeg|gif|png|webp|svg|woff|woff2|ttf|css|js|ico|xml)$ {
access_log off;
log_not_found off;
expires 360d;
}
# disable access to hidden files
location ~ /\.ht {
access_log off;
log_not_found off;
deny all;
}
}
次に、サーバーブロックを(CTRL + O)で保存します。 次に、(CTRL + X)で終了します 。
テストランディングページの作成
サンプルテストサイトを作成することをお勧めします。以下は、標準のテストindex.htmlセットアップです:
パーマネントまたはテストWebディレクトリをまだ作成していない場合:
sudo mkdir -p /var/www/htmlexample.com/
権限を構成する必要があり、 $ USERで現在ログインしているユーザーとして設定できます。 変数:
sudo chown -R $USER:$USER /var/www/html/example.com/
最後の権限設定は、権限chmod 755を使用して一般の人がWebディレクトリを読み取る(サイトにアクセスする)ことを許可することです:
sudo chmod -R 755 /var/www
次に、 index.htmlを作成します ファイル:
sudo nano /var/www/html/example.com/index.html
以下の内容を貼り付けてください。ご覧のとおり、テスト目的でのみ使用しているため、かなり基本的なものです。
<html>
<head>
<title>You have reached Example.com!</title>
</head>
<body>
<h1>Congratulations! The server block is active!</h1>
</body>
</html>
(CLTR + O)を使用して構成を保存します 次に(CTRL + X) 終了します。
Nginxサーバーブロックを有効にする
これで最終段階になり、サーバーブロック構成ファイルを有効にするときが来ました。そのためには、シンボリックリンクを作成する必要があります(symlink) (sites-available)のサーバーブロック構成ファイルの場合 (サイト対応)へのディレクトリ 次のコマンドを使用してディレクトリを作成します:
sudo ln -s /etc/nginx/sites-available/example.com.conf /etc/nginx/sites-enabled/example.com.conf
Nginxサーバーブロックのテスト
終了するには、Nginxサービスを再起動またはリロードする前に、常にドライランを実行する必要があります。これは、ライブ環境で作業する場合に重要です。次のコマンドを入力して、サーバーブロック構成ファイルをテストします。
sudo nginx -t
エラーがない場合は、次の出力が表示されます。
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
次に、インターネットブラウザを開き、ドメインアドレスを入力します(example.com) サーバーが到達可能かどうかをテストします。
おめでとうございます。PHP-FPMであるNginxサーバーブロックが正常に作成されました。 準備ができました。
Let'sEncryptのSSL無料証明書でNginxを保護する
理想的には、SSL証明書を使用したHTTPSでNginxを実行することをお勧めします。 。これを行う最良の方法は、 Let’s Encryptを使用することです。 非営利のインターネットセキュリティ研究グループ(ISRG)が運営する無料の自動化されたオープンな認証局 。
まず、 EPELをインストールします リポジトリとmod_ssl より良く更新されたパッケージとセキュリティのためのパッケージ。
sudo dnf install epel-release mod_ssl -y
次に、certbotパッケージをインストールします 次のように:
sudo dnf install python3-certbot-nginx -y
インストールしたら、次のコマンドを実行して証明書の作成を開始します。
sudo certbot --nginx --agree-tos --redirect --hsts --staple-ocsp --email [email protected] -d www.example.com
これは、強制HTTPS 301リダイレクト、Strict-Transport-Securityヘッダー、およびOCSPステープリングを含む理想的なセットアップです。電子メールとドメイン名を要件に合わせて調整してください。
これで、URLは HTTPS://www.example.comになります HTTP://www.example.comの代わりに 。
古いHTTPURLを使用する場合は注意してください 、自動的に HTTPSにリダイレクトされます 。
オプションで、証明書を自動的に更新するようにcronジョブを設定できます。 Certbotはこれを自動的に行うスクリプトを提供しており、最初にドライランを実行してすべてが機能していることを確認するためのテストを行うことができます。
sudo certbot renew --dry-run
すべてが機能している場合は、次のターミナルコマンドを使用してcrontabウィンドウを開きます。
sudo crontab -e
次に、自動更新する時刻を指定します。これは少なくとも毎日チェックする必要があり、証明書を更新する必要がある場合、スクリプトは証明書を更新しません。設定するのに適した時間を見つけるのに助けが必要な場合は、crontab.guru無料ツールを使用してください。
00 00 */1 * * /usr/sbin/certbot-auto renew
保存(CTRL + O) 次に、(CTRL + X)、を終了します cronジョブが自動的に有効になります。