LEMPソフトウェアスタックは、サーバーがWebサイトやアプリをホストできるようにするために一緒にインストールされるオープンソースソフトウェアのグループです。 Lの頭字語です。 inux、 E Nginxサーバー、 M ySQL(MariaDBを使用)、および P HP。
このガイドでは、LeMPスタックをFedora32ベースのサーバーにインストールします。また、phpMyAdmin、Redis、Opcache、Let'sEncryptSSLもインストールします。
Fedora32を実行しているサーバー。
ルート以外のsudoユーザー。
すべてが更新されていることを確認してください。
$ sudo dnf upgrade
システムに必要なパッケージはほとんどありません。
$ sudo dnf install wget curl nano -y
これらのパッケージの一部は、システムにすでにインストールされている可能性があります。
SELinuxを無効にします。
$ sudo setenforce 0
最初のステップは、ファイアウォールを構成することです。 Fedoraサーバーには、Firewalldファイアウォールがプリインストールされています。
ファイアウォールが実行されているかどうかを確認します。
$ sudo firewall-cmd --state
次の出力が得られるはずです。
running
ファイアウォールのデフォルトゾーンをパブリックに設定します。
$ sudo firewall-cmd --set-default-zone=public
現在許可されているサービス/ポートを確認してください。
$ sudo firewall-cmd --zone=public --permanent --list-services
次の出力が表示されます。
dhcpv6-client mdns ssh
HTTPおよびHTTPSポートを許可します。
$ sudo firewall-cmd --zone=public --permanent --add-service=http $ sudo firewall-cmd --zone=public --permanent --add-service=https
ファイアウォールのステータスをもう一度確認してください。
$ sudo firewall-cmd --zone=public --permanent --list-services
同様の出力が表示されるはずです。
dhcpv6-client http https mdns ssh
ファイアウォールをリロードします。
$ sudo systemctl reload firewalld
PHPをインストールする
Fedora32はデフォルトでPHP7.4に同梱されていますが、更新されたPHPリポジトリを使用するために、REMIリポジトリを追加します。
PHPパッケージをインストールするための公式FedoraリポジトリであるREMIリポジトリをインストールします。
$ sudo dnf -y install https://rpms.remirepo.net/fedora/remi-release-32.rpm
remi
を有効にします リポジトリを作成し、remi-modular
を無効にします リポジトリ。これにより、PHP7.4パッケージのインストールに必要なリポジトリが有効になります。
$ sudo dnf config-manager --set-enabled remi $ sudo dnf config-manager --set-disabled remi-modular
PHP7.4をいくつかの追加パッケージと一緒にインストールします。
$ sudo dnf install -y php-cli php-fpm php-mysqlnd
PHPが正しく機能しているかどうかを確認します。
$ php --version
同様の出力が表示されるはずです。
PHP 7.4.6 (cli) (built: May 12 2020 08:09:15) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
MariaDBをインストール
MariaDBはMySQLのドロップイン代替品です。つまり、MariaDBを実行および操作するコマンドはMySQLのコマンドと同じです。
Fedora 32には、デフォルトで、現在利用可能な最新の安定バージョンであるMariaDB 10.4が付属しているため、これを使用します。
MariaDBをインストールするには、次のコマンドを発行します。
$ sudo dnf install mariadb-server -y
MariaDBが正しくインストールされているかどうかを確認してください。
$ mysql --version
次の出力が表示されます。
mysql Ver 15.1 Distrib 10.4.12-MariaDB, for Linux (x86_64) using EditLine wrapper
MariaDBサービスを有効にして開始します。
$ sudo systemctl enable mariadb $ sudo systemctl start mariadb
次のコマンドを実行して、rootパスワードの指定、匿名ユーザーの削除、rootログインのリモートでの禁止、テストテーブルの削除などのデフォルト設定を実行します。
$ sudo mysql_secure_installation
MariaDB 10.4では、rootパスワードを使用するか unix_socketを使用するかを尋ねられます。 プラグイン。 unix_socket プラグインを使用すると、Linuxユーザーの資格情報を使用してMariaDBにログインできます。 phpMyAdminなどのサードパーティ製アプリを使用するには、従来のユーザー名/パスワードが必要ですが、より安全であると見なされます。このチュートリアルでは、unix_socketプラグインの使用に固執します。データベース用に作成した特定のユーザーを介して、phpMyAdminを引き続き使用できます。
Enterキーを押すと、デフォルトのオプション(大文字のオプション、この場合はY)が選択されます。
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
haven't set the root password yet, you should just press enter here.
Enter current password for root (enter for none): [PRESS ENTER]
OK, successfully used password, moving on...
Setting the root password or using the unix_socket ensures that nobody
can log into the MariaDB root user without the proper authorisation.
You already have your root account protected, so you can safely answer 'n'.
Switch to unix_socket authentication [Y/n] [PRESS ENTER]
Enabled successfully!
Reloading privilege tables..
... Success!
You already have your root account protected, so you can safely answer 'n'.
Change the root password? [Y/n] [ANSWER n]
... skipping.
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] [PRESS ENTER]
... 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] [PRESS ENTER]
... 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] [PRESS ENTER]
\- 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] [PRESS ENTER]
... 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!
それでおしまい。次回MySQLにログインするときは、次のコマンドを使用します
$ sudo mysql
プロンプトが表示されたら、rootパスワードを入力します。
Fedora 32にはRedisパッケージのv5.0.8が含まれていますが、PHP用に以前にインストールしたRemiリポジトリには、このチュートリアルの執筆時点で最新バージョンのRedis(v6.0.1)が含まれています。
次のコマンドを使用して、Redisと対応するPHPRedis拡張機能をインストールします。
$ sudo dnf install redis php-redis
Redisサービスを有効にします。
$ sudo systemctl enable --now redis
Redisサーバーでいくつかの基本的な構成を実行してみましょう。
ファイル/etc/redis.conf
を開きます Nanoエディターを使用します。
$ sudo nano /etc/redis.conf
リモートクライアントをRedisインスタンスに接続する場合は、bind 127.0.0.1
という行を見つけます。 次のように変更します。
bind 0.0.0.0
Redisがリッスンするデフォルトのポートを6379から任意の値に変更することもできます。
port 3458
Redisをキャッシュサーバーとして設定するには、次の値を指定どおりに設定します。
maxmemory 256mb
maxmemory-policy allkeys-lru
これにより、最大メモリが256MBに達したときに、LRUアルゴリズムを使用してすべてのキーを削除するようにRedisに指示します。要件と使用しているサーバーに応じてメモリ値を設定できます。
パスワードを設定して、Redisを必要とするすべてのクライアントが最初に認証する必要があるようにすることができます。これを行うには、次のディレクティブを使用してパスワードを設定します。
requirepass <AuthPassword>
変更するディレクティブは、構成ファイルにあります。終了したら、Ctrl + Xを押して、 Yと入力します。 ファイルを保存するように求められたら。
Redisサーバーを再起動して変更を適用します。
$ sudo systemctl restart redis
また、Redisが機能するように、ファイアウォールにルールを追加する必要があります。
$ sudo firewall-cmd --zone=public --permanent --add-port=6379/tcp $ sudo firewall-cmd --reload
上記の構成ファイルで選択したポートに一致するように、上記のコマンドの値を変更する必要があります。
Nginxをインストール
Fedora 32には、デフォルトでNginxの最新のStableバージョンが付属しています。 (1.18.0)。
Nginxをインストールします。
$ sudo dnf install nginx -y
正しく機能しているかどうかを確認します。
$ nginx -v
インストールすることを選択したNginxのバージョンに応じて、次の出力が表示されます。
nginx version: nginx/1.18.0
Nginxを起動して有効にします。
$ sudo systemctl start nginx $ sudo systemctl enable nginx
ブラウザでサーバーのIPアドレスを開き、次のページを表示します。 Nginxが正しく機能していることを意味します。
Nginxを構成する
サーバーブロックが存在するディレクトリを設定します。
$ sudo mkdir /etc/nginx/sites-available $ sudo mkdir /etc/nginx/sites-enabled
サイトが存在するディレクトリを作成します。
$ sudo mkdir /var/www/example.com/html -p
-pを使用する ディレクティブは、以前は存在しなかった親ディレクトリを作成します。
次のコマンドを実行して、サイトの構成ファイルを追加します。
$ sudo nano /etc/nginx/sites-available/example.com.conf
次のコードをエディターに貼り付けます。
server {
listen *:80;
server_name example.com;
root /var/www/example.com/html;
index index.php index.html;
location / {
try_files $uri $uri/ =404;
}
access_log /var/log/nginx/example.com.access.log;
error_log /var/log/nginx/example.com.error.log;
location ~ \.php$ {
try_files $uri =404;
fastcgi_pass unix:/run/php-fpm/www.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_index index.php;
include fastcgi_params;
}
}
Ctrl + Xを押します エディターを閉じてYを押します ファイルを保存するように求められたら。
このファイルは、example.com
をホストすることを前提としています ディレクトリ/var/www/html
。ドメインを使用せず、IPアドレス/ローカルホストからのみアクセスできるようにサーバーを構成する場合は、対応するサーバーブロック設定をnginx.conf
から削除する必要があります。 そうしないと、作成するサーバーブロックが混乱します。
この構成ファイルをsites-enabled
にリンクして、アクティブ化します。 ディレクトリ。
$ sudo ln -s /etc/nginx/sites-available/example.com.conf /etc/nginx/sites-enabled/
/etc/nginx/nginx.conf
を開きます 編集用のファイル。
$ sudo nano /etc/nginx/nginx.conf
include /etc/nginx/conf.d/*.conf
の行の後に次の行を貼り付けます
include /etc/nginx/sites-enabled/*.conf;
server_names_hash_bucket_size 64;
types_hash_max_size
の値を変更します 2048から4096まで。
types_hash_max_size 4096;
Ctrl + Xを押します エディターを閉じてYを押します ファイルを保存するように求められたら。 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
Nginxサービスをリロードします。
$ sudo systemctl reload nginx
PHP-FPMを構成する
ファイル/etc/php-fpm.d/www.conf
を開きます 。
$ sudo nano /etc/php-fpm.d/www.conf
Unixユーザー/PHPプロセスのグループをnginxに設定する必要があります 。 user=apache
を見つけます およびgroup=apache
ファイル内の行をnginxに変更します。
...
; Unix user/group of processes
; Note: The user is mandatory. If the group is not set, the default user's group
; will be used.
; RPM: apache user chosen to provide access to the same directories as httpd
user = nginx
; RPM: Keep a group allowed to write in log dir.
group = nginx
...
Ctrl + Xを押してファイルを保存します Yと入力します プロンプトが表示されたら。
PHP-fpmプロセスを再起動します。
$ sudo systemctl restart php-fpm
PHPセットアップをテストするには、ファイルtest.php
を作成します html
で フォルダ。
$ sudo nano /var/www/example.com/html/test.php
次のコンテンツを追加し、 Ctrl + Xを押してファイルを保存します Yと入力します プロンプトが表示されたら。
<?php phpinfo();
http://<yourserverip>/test.php
を起動します Webブラウザで、次のように表示されます。
phpMyAdminをインストール
Remiリポジトリには最新のphpMyAdminが搭載されているため、次のコマンドを使用して簡単にインストールできます。
$ sudo dnf install phpmyadmin
/usr/share/phpMyAdmin
にインストールされます ディレクトリ。
phpMyAdminを構成する
NginxウェブサーバーがphpMyAdminファイルを正しく検索して提供するには、実際の場所からNginxのルートドキュメントディレクトリへのシンボリックリンクを作成する必要があります。
これを行うには、次のコマンドを実行します。
$ sudo ln -s /usr/share/phpmyadmin /var/www/example.com/html/phpmyadmin
phpMyAdminのインストールは機能しています。アクセスするには、 http://example.com/phpmyadminを開くだけです。 。
phpセッションエラーが発生した場合は、次のコマンドを実行して、PHPセッションディレクトリに適切な権限を付与します。 test.php
からセッションパスを確認してください 以前に作成したファイル。私たちにとっては、/var/lib/php/session
にあります。 。
$ sudo chown -R nginx:nginx /var/lib/php/session
デフォルトでは、このデフォルトの場所は、ハッカーがphpMyAdminインストールを見つけることができる最も一般的な場所であるため、変更する必要があります。これを行うには、次のコマンドを実行します。
$ sudo mv phpmyadmin sm123
基本的に、phpMyAdminの場所をsm123
に移動しました フォルダ。アクセスするには、 http://example.com/sm123を開く必要があります。 ブラウザで。
ここではMySQLでunix_authenticationを使用しているため、phpMyAdminを介してログインするrootユーザーはありません。 phpMyAdminを使用できるようにするには、最初にMySQLユーザーを作成し、データベースに権限を付与する必要があります。
Opcacheを構成する
RemiのリポジトリからphpMyAdminをインストールすると、Opcacheもインストールされます。 phpMyAdminをインストールしておらず、インストールしたくない場合は、次のコマンドを使用してOpcacheをインストールできます。
$ sudo dnf install php-opcache
インストールされていることを確認します。
$ php -v PHP 7.4.5 (cli) (built: Apr 14 2020 12:54:33) ( NTS ) Copyright (c) The PHP Group Zend Engine v3.4.0, Copyright (c) Zend Technologies with Zend OPcache v7.4.5, Copyright (c), by Zend Technologies
Opcache設定を変更するには、ファイル/etc/php.d/10-opcache.ini
を開きます。 。
$ sudo nano /etc/php.d/10-opcache.ini
次の設定は、Opcacheの使用を開始するためのものであり、通常、良好なパフォーマンスとして推奨されます。 ;
を削除してコメントを解除することで、構成を有効にできます その前に。
opcache.enable_cli=1
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000
opcache.revalidate_freq=60
Ctrl + Xを押してファイルを保存します Yと入力します プロンプトが表示されたら。
サーバーを再起動して設定を適用します。
$ sudo systemctl reload nginx
Let'sEncryptを介してSSLをインストール
SSLは、あらゆるWebサイトの重要な部分になっています。ここでは、Let'sEncryptサービスを使用してSSLをインストールします。
そのためには、まず、Certbotツールをインストールします。
$ sudo dnf install certbot-nginx
証明書を生成します。
$ sudo certbot --nginx -d example.com -d www.example.com -d phpmyadmin.example.com
メインサイトとphpMyAdminドメインの両方の証明書を作成しています。
システムでcertbotを初めて実行する場合は、電子メールアドレスを入力し、利用規約に同意するよう求められます。また、あなたがノーと言うことができるEFF財団とデータを共有することに同意するかどうか尋ねられます。その後、certbotはLet's Encryptサーバーと通信し、チャレンジを実行してドメインを確認します。
それが成功すると、HTTPSリダイレクトを処理する方法を尋ねられます。
Please choose whether HTTPS access is required or optional.
-------------------------------------------------------------------------------
1: Easy - Allow both HTTP and HTTPS access to these sites
2: Secure - Make all requests redirect to secure HTTPS access
-------------------------------------------------------------------------------
Select the appropriate number [1-2] then [enter] (press 'c' to cancel):
選択してEnterキーを押します。証明書が作成され、Nginx構成がSSL設定で更新されます。
証明書の準備が整いました。https://example.comにアクセスすると、今すぐサイトを開くことができます。
SSL自動更新の構成
これは、このチュートリアルを終了する前の最後のステップです。 SSLを更新するには、cronを使用します。
Crontabエディタを使用してCronにエントリを追加する必要があります。 crontabエディターを開くには、次のコマンドを実行します。
$ EDITOR=nano sudo crontab -e
EDITOR=nano
コマンドの前にあると、FedoraはデフォルトでVIMエディターを優先するため、crontabがNanoエディターを開くようにします。
次の行を下部に貼り付けます。
. . .
25 2 * * * /usr/bin/certbot renew --quiet
25 2 * * *
この行の一部は、「毎日午前2時25分に次のコマンドを実行する」ことを意味します。いつでも選択できます。
Ctrl + Xを押してファイルを保存します Yと入力します プロンプトが表示されたら。
renew
Certbotのコマンドは、システムにインストールされているすべての証明書をチェックし、30日以内に期限切れになるように設定されている証明書を更新します。 --quiet
情報を出力したり、ユーザー入力を待機したりしないようにCertbotに指示します。
このコマンドは毎日実行されます。
このチュートリアルは以上です。 LEMPセットアップが完了し、Webサイトとアプリケーションの作成とホスティングを開始できます。