UbuntuにおけるOpcache、Redis、およびLet's Encryptを使用したPHPとMariaDB(LEMPスタック)を使用したNginxのインストール方法
UbuntuにおけるOpcache、Redis、およびLet's Encryptを使用したPHPとMariaDB(LEMPスタック)を使用したNginxのインストール方法
このチュートリアルはこれらのOSバージョンのために存在します
- Ubuntu 24.04 (ノーブル・ナンバット)
- Ubuntu 22.04 (ジャミー・ジェリーフィッシュ)
- Ubuntu 20.04 (フォーカルフォッサ)
- Ubuntu 20.04 (フォーカルフォッサ)
- Ubuntu 18.04 (ビオニックビーバー)
- Ubuntu 16.04 (ゼニアル・ゼクス)
このページで
- 前提条件
- ファイアウォールを設定する
- PHPをインストールする
- MariaDBをインストールする
- Redisをインストールする
- Redisサーバーを設定する
- Nginxをインストールする
- Nginxを設定する
- PHP-FPMを設定する
- phpMyAdminをインストールする
- phpMyAdminを設定する
- Opcacheを設定する
- Let's Encryptを通じてSSLをインストールする
- SSL自動更新を確認する
- 結論
「LEMP」という略語は、サーバーが動的ウェブサイトやウェブアプリケーションをホストできるように、通常一緒にインストールされるソフトウェアのグループを指します。この用語は実際には、4つの主要なコンポーネントを表す略語です:
- Linux:オペレーティングシステム。Linuxは人気のあるオープンソースのオペレーティングシステムで、サーバーの基盤として機能します。
- Engine-X(「nginx」と発音されます):ウェブサーバー。Nginxは、高性能なウェブサーバーで、安定性、豊富な機能セット、シンプルな設定、低リソース消費で知られています。
- MySQLまたはMariaDB:データベースシステムです。MySQLは、ウェブサイトやアプリケーションのデータを保存し管理するための広く使用されているリレーショナルデータベース管理システムです。MySQLは、MySQLの強化された完全なオープンソースのコミュニティ開発のフォークであるMariaDBに置き換えられることがありますので、ご注意ください。
- PHP: プログラミング言語。PHPはウェブ開発のために設計されたサーバーサイドスクリプト言語ですが、汎用プログラミング言語としても使用されます。
LEMPスタックは、データベースとサーバーサイド処理を必要とするウェブサイト、例えばWordPressサイトやeコマースプラットフォーム、その他の動的ウェブアプリケーションのホスティングに人気の選択肢です。これはLAMPスタックと比較可能で、LAMPの「A」にあたるApacheの代わりにNginxが使用されます。
このガイドでは、Ubuntu 20.04ベースのサーバーにLEMPスタックをインストールします。また、phpMyAdmin、Redis、Opcache、Let's Encrypt SSLもインストールします。
前提条件
Ubuntu 20.04を実行しているサーバー。
非ルートのsudoユーザー。
すべてが最新であることを確認してください。
sudo apt update
sudo apt upgrade
あなたのシステムに必要ないくつかのパッケージ。
sudo apt install wget curl nano -y
これらのパッケージの一部は、すでにあなたのシステムにインストールされている可能性があります。
ファイアウォールを設定する
最初のステップはファイアウォールを設定することです。Ubuntuにはデフォルトでufw(簡易ファイアウォール)が付属しています。
ファイアウォールが実行中かどうか確認してください。
sudo ufw status
次の出力を得るべきです。
Status: inactive
ファイアウォールがSSHポートを有効にした際に現在の接続を切断しないように、SSHポートを許可してください。
sudo ufw allow OpenSSH
HTTPおよびHTTPSポートも許可してください。
sudo ufw allow 80
sudo ufw allow 443
ファイアウォールを有効にする
sudo ufw enable
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startup
ファイアウォールの状態を再度確認してください。
sudo ufw status
あなたは似たような出力を見るべきです。
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
80 ALLOW Anywhere
443 ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
80 (v6) ALLOW Anywhere (v6)
443 (v6) ALLOW Anywhere (v6)
PHPをインストールする
Ubuntu 20.04はデフォルトでPHP 7.4を搭載していますが、更新されたPHPリポジトリを持つために、OndřejのPHPリポジトリを追加します。
OndřejのPHPリポジトリをインストールします。
sudo add-apt-repository ppa:ondrej/php
PHP 7.4を追加のパッケージと共にインストールします。
sudo apt install php-cli php-fpm php-mysql -y
PHPが正しく動作しているか確認してください。
php --version
あなたは似たような出力を見るべきです。
PHP 7.4.5 (cli) (built: Apr 28 2020 14:49:23) ( 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
MariaDBをインストールする
MariaDBはMySQLのドロップイン置換であり、MariaDBを実行および操作するためのコマンドはMySQLと同じであることを意味します。
Ubuntu 20.04はデフォルトでMariaDB 10.3を搭載していますが、これは少し古くなっています。最新の安定版MariaDBを入手するために、公式リポジトリをインストールします。
Mariadbの公式リポジトリを追加します。
sudo apt-key adv --fetch-keys 'https://mariadb.org/mariadb_release_signing_key.asc'
sudo add-apt-repository 'deb [arch=amd64] http://mirror.lstn.net/mariadb/repo/10.4/ubuntu focal main'
MariaDBをインストールするには、以下のコマンドを実行してください。
sudo apt install mariadb-server -y
MariaDBが正しくインストールされているか確認してください。
mysql --version
次の出力が表示されるはずです。
mysql Ver 15.1 Distrib 10.4.13-MariaDB, for debian-linux-gnu (x86_64) using readline 5.2
MariaDBサービスを有効にしてください。
sudo systemctl enable mariadb
デフォルトの設定を実行するために、ルートパスワードの設定、匿名ユーザーの削除、リモートからのルートログインの禁止、テストテーブルの削除などの次のコマンドを実行します。
sudo mysql_secure_installation
MariaDB 10.4では、ルートパスワードを使用するか、unix_socketプラグインを使用するかどうかを尋ねられます。unix_socketプラグインを使用すると、Linuxユーザーの資格情報でMariaDBにログインできます。これはより安全とされますが、phpMyAdminのようなサードパーティアプリを使用するためには、従来のユーザー名/パスワードが必要になります。このチュートリアルでは、unix_socketプラグインを使用することにします。データベース用に作成した特定のユーザーを介して、phpMyAdminを引き続き使用することができます。
エンターキーを押すと、デフォルトのオプション(この場合は大文字の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
プロンプトが表示されたら、ルートパスワードを入力してください。
Redisをインストールする
以下のコマンドを使用してRedisと対応するPHP Redis拡張機能をインストールします。
sudo apt install redis php-redis
Redisサーバーを設定する
Redisサーバーの基本設定を行いましょう。
Nanoエディタでファイル/etc/redis/redis.confを開いてください。
sudo nano /etc/redis/redis.conf
ファイルの中で、supervised ディレクティブを見つけます。このディレクティブは、Redisをサービスとして管理するinitシステムを宣言することを可能にします。デフォルトではnoに設定されています。私たちはsystemd initシステムを使用するUbuntuを使用しているので、その値をnoからsystemdに次のように変更します。
supervised systemd
リモートクライアントがあなたの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
リモートクライアントが接続できるようにするためには、ファイアウォールにルールを追加する必要があります。それ以外の場合は、このステップをスキップしてもかまいません。
sudo ufw allow 6379/tcp
上記のコマンドの値を、上記の設定ファイルで選択したポートに合わせて変更する必要があります。
Nginxをインストールする
Ubuntu 20.04はデフォルトでNginxの最新メインラインバージョン(1.17.10)を搭載しています。しかし、私たちはNginxの公式安定リポジトリに切り替えます。
まずいくつかの前提条件をインストールしてください。
sudo apt install curl gnupg2 ca-certificates lsb-release
これらのいくつかはすでにあなたのシステムにインストールされています。
Nginxのリポジトリを追加します。
echo "deb [arch=amd64] http://nginx.org/packages/ubuntu `lsb_release -cs` nginx" | sudo tee /etc/apt/sources.list.d/nginx.list
curl -fsSL https://nginx.org/keys/nginx_signing.key | sudo apt-key add -
Nginxをインストールします。
sudo apt update
sudo apt 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/php7.4-fpm.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 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/7.4/fpm/pool.d/www.conf
PHPプロセスのUnixユーザー/グループをnginxに設定する必要があります。ファイル内でuser=www-dataとgroup=www-dataの行を見つけて、それらを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
...
また、ファイル内の listen.owner=www-data と listen.group=www-data の行を見つけて、それらを nginx に変更してください。
listen.owner = nginx
listen.group = nginx
Ctrl + X を押してファイルを保存し、促されたらYと入力します。
PHP-fpmプロセスを再起動します。
sudo systemctl restart php7.4-fpm
PHPの設定をテストするために、htmlフォルダにtest.phpというファイルを作成してください。
sudo nano /var/www/example.com/html/test.php
次の内容を追加し、Ctrl + X を押して、表示されたら Y を入力してファイルを保存してください。
<?php phpinfo();
ウェブブラウザで http://<yourserverip>/test.php を開くと、以下の内容が表示されるはずです。
phpMyAdminをインストールする
私たちはチュートリアルのためにphpMyAdminを手動でインストールします。
まず、phpMyAdmin が動作するために、いくつかの追加の PHP パッケージをインストールする必要があります。
sudo apt install php-mbstring php-zip php-gd php-json php-curl php-bz2 php-xml
phpMyAdminをダウンロードしてインストールするために、/usr/shareディレクトリに切り替えます。
cd /usr/share
phpMyAdminのファイルをダウンロードします。(最新バージョンはそのサイトで確認してください) 英語版のみをインストールします。
sudo wget https://files.phpmyadmin.net/phpMyAdmin/5.0.2/phpMyAdmin-5.0.2-english.tar.gz
tar xvzf phpMyAdmin-5.0.2-english.tar.gz
sudo mv phpMyAdmin-5.0.2-english /usr/share/phpmyadmin
sudo rm phpMyAdmin*.tar.gz
phpMyAdminフォルダに適切な権限を与えてください。
sudo chown -R nginx:nginx phpmyadmin
sudo chmod -R 744 phpmyadmin
phpMyAdminを設定する
パッケージに添付されたサンプルファイルから構成ファイルを作成します。
sudo cp /usr/share/phpmyadmin/config.sample.inc.php /usr/share/phpmyadmin/config.inc.php
クッキーとセキュリティの目的で、設定ファイルに秘密の値を追加する必要があります。以下のコマンドを使用してコードを生成し、追加してください。
randomBlowfishSecret=$(openssl rand -base64 32)
sed -i "s|cfg\['blowfish_secret'\] = ''|cfg['blowfish_secret'] = '$randomBlowfishSecret'|" /usr/share/phpmyadmin/config.inc.php
NginxウェブサーバーがphpMyAdminファイルを正しく見つけて提供するために、実際の場所からNginxのルートドキュメントディレクトリへのシンボリックリンクを作成する必要があります。
これを行うには、次のコマンドを実行してください。
sudo ln -s /usr/share/phpmyadmin /var/www/example.com/html/phpmyadmin
あなたの phpMyAdmin インストールは稼働しています。アクセスするには、ただ http://example.com/phpmyadmin を開いてください。
デフォルトでは、このデフォルトの場所は変更する必要があります。なぜなら、それはハッカーがあなたのphpMyAdminインストールを見つけることができる最も一般的な場所だからです。これを行うには、以下のコマンドを実行してください。
sudo mv /var/www/example.com/html/phpmyadmin /var/www/example.com/html/sm123
基本的に、私たちはphpMyAdminの位置をsm123フォルダーに移動しました。アクセスするには、ブラウザでhttp://example.com/sm123を開く必要があります。
ここでは MySQL に unix_authentication を使用しているため、phpMyAdmin でログインするための root ユーザーはありません。最初に MySQL ユーザーを作成し、そのユーザーにデータベースへの権限を与える必要があります。phpMyAdmin を使用するためには、それが必要です。
それを行うには、MySQLシェルにログインしてください。
sudo mysql
次に、以下のコマンドを貼り付けて新しいユーザーを作成し、そのユーザーにすべてのデータベース権限を付与します。
CREATE USER 'user'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON *.* TO 'user'@'localhost';
FLUSH PRIVILEGES;
EXIT
このユーザーを使用してhttp://example.com/phpmyadminにログインできるようになりました。
Opcacheを設定する
このチュートリアルに従っている場合、OpcacheはすでにPHPにインストールされているはずです。もしそうでなければ、次のコマンドを使用してOpcacheを簡単にインストールできます。
sudo apt install php7.4-opcache
インストールされていることを確認してください。
php -v
PHP 7.4.5 (cli) (built: Apr 28 2020 14:49:23) ( 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/7.4/fpm/conf.d/10-opcache.iniを開きます。
sudo nano /etc/php/7.4/fpm/conf.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 restart php7.4-fpm
Let's Encryptを通じてSSLをインストールする
SSLはすべてのウェブサイトにとって不可欠な部分となりました。ここでは、Let's Encryptサービスを使用してSSLをインストールします。
まず、Certbotツールをインストールします。
sudo apt install certbot python3-certbot-nginx
証明書を作成してください。
sudo certbot --nginx -d example.com
このシステムで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):
選択をしてエンターを押してください。これで証明書が作成され、Nginx の設定ファイルが SSL 設定で更新されます。
あなたの証明書は準備完了ですので、https://example.com に行ってサイトを開くことができます。
SSL自動更新を確認する
これはこのチュートリアルを終える前の最終ステップです。
更新プロセスのドライランを行って、更新プロセスを確認してください。
sudo certbot renew --dry-run
エラーがなければ、設定が完了していることを意味します。Certbotは自動的に証明書を更新します。証明書の有効期限についての警告メールが送信されます。
結論
これでチュートリアルは終わりです。あなたのLEMPセットアップは完了しましたので、ウェブサイトやアプリケーションを作成してホスティングを開始できます。

