サーバー設定 · 5 min read · Oct 13, 2025

UbuntuにNginx、PHP、MariaDB(LEMPスタック)をOpcache、Redis、Let's Encryptでインストールする方法

「LEMP」という略語は、サーバーが動的なウェブサイトやウェブアプリケーションをホストできるように、通常一緒にインストールされるソフトウェアのグループを指します。この用語は、4つの主要なコンポーネントを表す略語です。

  1. Linux: オペレーティングシステム。Linuxは、サーバーの基盤となる人気のあるオープンソースのオペレーティングシステムです。
  2. Engine-X(「nginx」と発音される): ウェブサーバー。Nginxは、その安定性、豊富な機能セット、シンプルな設定、低リソース消費で知られる高性能のウェブサーバーです。
  3. MySQLまたはMariaDB: データベースシステム。MySQLは、ウェブサイトやアプリケーションのデータを保存および管理するために広く使用されているリレーショナルデータベース管理システムです。MySQLは、MySQLの強化された完全オープンソースのコミュニティ開発フォークであるMariaDBに置き換えられることがあります。
  4. PHP: プログラミング言語。PHPはウェブ開発のために設計されたサーバーサイドスクリプト言語ですが、一般目的のプログラミング言語としても使用されます。

LEMPスタックは、データベースとサーバーサイド処理を必要とするウェブサイトをホストするための人気の選択肢です。たとえば、WordPressウェブサイト、eコマースプラットフォーム、その他の動的ウェブアプリケーションなどです。これは、Apache(LAMPの「A」で表される)がNginxの代わりに使用されるLAMPスタックと比較できます。

このガイドでは、Ubuntu 20.04ベースのサーバーにLEMPスタックをインストールします。また、phpMyAdmin、Redis、Opcache、およびLet’s Encrypt SSLもインストールします。

前提条件

  • Ubuntu 20.04を実行しているサーバー。
  • 非rootのsudoユーザー。
  • すべてが更新されていることを確認してください。 shell $ sudo apt update $ sudo apt upgrade
  • システムに必要なパッケージがいくつかあります。 shell $ sudo apt install wget curl nano -y これらのパッケージのいくつかは、すでにシステムにインストールされている場合があります。

ファイアウォールの設定

最初のステップはファイアウォールの設定です。Ubuntuにはデフォルトでufw(Uncomplicated Firewall)が付属しています。

ファイアウォールが実行中かどうかを確認します。

$ sudo ufw status

次の出力が得られるはずです。

Status: inactive

SSHポートを許可して、ファイアウォールを有効にするときに現在の接続が切断されないようにします。

$ sudo ufw allow OpenSSH

HTTPおよびHTTPSポートも許可します。

$ sudo ufw allow 80
$ sudo ufw allow 443

ファイアウォールを有効にします。

$ sudo ufw enable
コマンドは既存のssh接続を中断する可能性があります。操作を続行しますか(y|n)? y
ファイアウォールはアクティブで、システム起動時に有効になります

再度ファイアウォールの状態を確認します。

$ 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リポジトリを持つために、OndrejのPHPリポジトリを追加します。

Ondrejの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

次のコマンドを実行して、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!

MariaDBにログインしてセキュリティを確保するには、rootユーザーの現在のパスワードが必要です。MariaDBをインストールしたばかりで、まだrootパスワードを設定していない場合は、ここでEnterを押すだけです。

Enter current password for root (enter for none): [PRESS ENTER]
OK, successfully used password, moving on...

rootパスワードを設定するか、unix_socketを使用することで、適切な認証なしに誰もMariaDBのrootユーザーにログインできないようにします。

すでにrootアカウントが保護されているので、安全に'n'と答えることができます。

Switch to unix_socket authentication [Y/n] [PRESS ENTER]
Enabled successfully!
Reloading privilege tables..
 ... Success!

すでにrootアカウントが保護されているので、安全に'n'と答えることができます。

Change the root password? [Y/n] [ANSWER n]
... skipping.

デフォルトでは、MariaDBインストールには匿名ユーザーがあり、誰でもユーザーアカウントを作成せずにMariaDBにログインできます。これはテスト用にのみ意図されており、インストールを少しスムーズにするためです。生産環境に移行する前に削除する必要があります。

Remove anonymous users? [Y/n] [PRESS ENTER]
 ... Success!

通常、rootは「localhost」からのみ接続できるようにする必要があります。これにより、誰かがネットワークからrootパスワードを推測できなくなります。

Disallow root login remotely? [Y/n] [PRESS ENTER]
 ... Success!

デフォルトでは、MariaDBには「test」という名前のデータベースが付属しており、誰でもアクセスできます。これもテスト用にのみ意図されており、生産環境に移行する前に削除する必要があります。

Remove test database and access to it? [Y/n] [PRESS ENTER]
 \- Dropping test database...
 ... Success!
 \- Removing privileges on test database...
 ... Success!

特権テーブルを再読み込みすると、これまでに行ったすべての変更が即座に適用されます。

Reload privilege tables now? [Y/n] [PRESS ENTER]
 ... Success!

クリーンアップ中...

すべて完了!上記のすべてのステップを完了した場合、MariaDBのインストールは安全になっているはずです。

MariaDBをご利用いただきありがとうございます!

それでおしまいです。次回MySQLにログインしたい場合は、次のコマンドを使用します。

$ sudo mysql

プロンプトが表示されたら、rootパスワードを入力します。

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に設定されています。Ubuntuを使用しているため、systemd initシステムを使用しているので、その値を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

これにより、Redisは最大256MBのメモリに達したときにLRUアルゴリズムを使用して任意のキーを削除します。メモリ値は、要件や使用しているサーバーに応じて設定できます。

Redisを使用するクライアントが最初に認証を必要とするようにするために、次のディレクティブを使用してパスワードを設定できます。

requirepass  

設定ファイルで変更する他のディレクティブを見つけることができます。完了したら、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のデフォルトページ

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アドレス/localhost経由でアクセス可能にする場合は、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を押してファイルを保存します。

ブラウザでhttp:///test.phpを開くと、次のように表示されるはずです。

PHP情報

phpMyAdminのインストール

このチュートリアルのために、phpMyAdminを手動でインストールします。

まず、phpMyAdminが動作するために必要な追加のPHPパッケージをインストールする必要があります。

$ sudo apt install php-mbstring php-zip php-gd php-json php-curl php-bz2 php-xml

/usr/shareディレクトリに移動して、phpMyAdminをダウンロードしてインストールします。

$ 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ユーザーを作成し、データベースへの権限を与える必要があります。

そのためには、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):

選択肢を選んでEnterを押します。証明書が作成され、Nginxの設定ファイルがSSL設定で更新されます。

証明書が準備できました。https://example.comにアクセスして、サイトを開くことができます。

SSL自動更新の確認

これは、このチュートリアルを終了する前の最後のステップです。

更新プロセスを確認するために、更新プロセスのドライランを実行します。

$ sudo certbot renew --dry-run

エラーが表示されなければ、設定は完了です。Certbotは自動的に証明書を更新します。証明書の有効期限について警告するメールが送信されます。

結論

これでこのチュートリアルは終了です。LEMPセットアップは完了し、ウェブサイトやアプリケーションを作成してホストを開始できます。

Share: X/Twitter LinkedIn

新しい投稿を受信箱で受け取る

スパムはありません。いつでも購読を解除できます。