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

Ubuntu 22.04にNginx、PHP、MySQL(LEMPスタック)をインストールする方法

LEMPソフトウェアスタックは、サーバーがPHPで書かれた動的なウェブサイトやアプリをホストできるようにするオープンソースソフトウェアのグループです。これは、Linux、Nginx(Engine-Xと発音)、MySQL、およびPHPの頭文字を取ったものです。

このガイドでは、Ubuntu 22.04サーバーにLEMPスタックをインストールする方法を示します。また、phpMyAdminのようなアプリケーションのインストール方法も学びます。

前提条件

  • Ubuntu 22.04を実行しているサーバー。
  • sudo権限を持つ非rootユーザー。
  • 簡単なファイアウォール(UFW)が有効で実行中。
  • すべてが更新されていること。 $ sudo apt update && sudo apt upgrade

ステップ1 - ファイアウォールの設定

パッケージをインストールする前の最初のステップは、HTTPおよびHTTPS接続を許可するようにファイアウォールを設定することです。

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

$ sudo ufw status

次のような出力が表示されるはずです。

Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)

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

$ sudo ufw allow http
$ sudo ufw allow https

再度状態を確認して確認します。

$ sudo ufw status
Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
80/tcp                     ALLOW       Anywhere
443/tcp                    ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)
80/tcp (v6)                ALLOW       Anywhere (v6)
443/tcp (v6)               ALLOW       Anywhere (v6)

ステップ2 - PHPのインストール

Ubuntu 22.04にはデフォルトでPHP 8.1が付属しています。次のコマンドを実行してインストールできます。

$ sudo apt install php-fpm php-cli php-mysqlnd php-mbstring php-xml php-gd

PHPのMySQL、CLI、GD、Mbstring、およびXML拡張機能をインストールしました。必要に応じて、追加の拡張機能をインストールできます。

最新のPHPバージョンを常に使用するか、複数のPHPバージョンをインストールしたい場合は、OndrejのPHPリポジトリを追加します。

OndrejのPHPリポジトリを追加します。

$ sudo add-apt-repository ppa:ondrej/php

これで、任意のPHPバージョンをインストールできます。

$ sudo apt install php8.0-fpm php8.0-cli

インストールされたPHPのバージョンを確認します。

$ php --version
PHP 8.1.2 (cli) (built: Jun 13 2022 13:52:54) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.1.2, Copyright (c) Zend Technologies
    with Zend OPcache v8.1.2, Copyright (c), by Zend Technologies

ステップ3 - MySQLのインストール

Ubuntu 22.04には最新のMySQLバージョンが付属しています。単一のコマンドでインストールできます。

$ sudo apt install mysql-server

MySQLのバージョンを確認します。

$ mysql --version
mysql  Ver 8.0.29-0ubuntu0.22.04.2 for Linux on x86_64 ((Ubuntu))

このステップは、MySQLバージョン8.0.28以上に必要です。MySQLシェルに入ります。

$ sudo mysql

次のコマンドを実行して、rootユーザーのパスワードを設定します。数字、大文字、小文字、特殊文字を組み合わせて使用してください。

mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'YourPassword12!';

シェルを終了します。

mysql> exit

MySQLのセキュアインストールスクリプトを実行します。

$ sudo mysql_secure_installation

Validate Password Componentのインストールを求められます。これは、MySQLで使用されるパスワードの強度をチェックします。Yを押してインストールします。

次に、パスワード検証ポリシーのレベルを設定するように求められます。最も強力な2を選択します。

次に、rootパスワードを入力します。変更を拒否するにはNを押します。

匿名ユーザーを削除し、リモートrootログインを禁止し、テストデータベースを削除し、特権テーブルを再読み込みするにはYを押します。

ステップ4 - MySQLの設定

MySQLシェルにログインします。プロンプトが表示されたらrootパスワードを入力します。

$ sudo mysql -u root -p

サンプルデータベースを作成します。

mysql> CREATE DATABASE exampledb;

SQLユーザーアカウントを作成します。

mysql> CREATE USER 'exampleuser'@'localhost' IDENTIFIED BY 'YourPassword2!';

データベースに対するすべての権限をユーザーに付与します。

mysql> GRANT ALL PRIVILEGES ON exampledb.* TO 'exampleuser'@'localhost';

ユーザー権限をフラッシュします。

mysql> FLUSH PRIVILEGES;

シェルを終了します。

mysql> exit

新しく作成したユーザーを使用してMySQLシェルに再度ログインします。

$ sudo mysql -u exampleuser -p

テストテーブルを作成します。

mysql> CREATE TABLE exampledb.name_list ( sno INT AUTO_INCREMENT, content VARCHAR(255), PRIMARY KEY(sno) );

テストデータを挿入します。

mysql> INSERT INTO exampledb.name_list (content) VALUES ("Navjot");

上記のコマンドを別々に繰り返して、さらにエントリを追加します。テーブルの内容を確認するには、次のコマンドを実行します。

mysql> SELECT * FROM exampledb.name_list;

次のような出力が得られます。

+-----+---------+
| sno | content |
+-----+---------+
|   1 | Navjot  |
|   2 | Adam    |
|   3 | Josh    |
|   4 | Peter   |
+-----+---------+
4 rows in set (0.00 sec)

MySQLシェルを終了します。

mysql> exit

ステップ5 - Nginxのインストール

Ubuntu 22.04には古いバージョンのNginxが付属しています。最新バージョンをインストールするには、公式のNginxリポジトリをダウンロードする必要があります。

Nginxの署名キーをインポートします。

$ curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \
| sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null

Nginxの安定版リポジトリを追加します。

$ echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg arch=amd64] \
http://nginx.org/packages/ubuntu `lsb_release -cs` nginx" \
| sudo tee /etc/apt/sources.list.d/nginx.list

システムリポジトリを更新します。

$ sudo apt update

Nginxをインストールします。

$ sudo apt install nginx

インストールを確認します。

$ nginx -v
nginx version: nginx/1.22.0

ステップ6 - PHP-FPMの設定

php.iniを編集のために開きます。

$ sudo nano /etc/php/8.1/fpm/php.ini

ファイルアップロードサイズを設定するには、upload_max_filesizeおよびpost_max_size変数の値を変更します。

upload_max_filesize = 50M
...
post_max_size = 50M

サーバーのリソースと要件に応じてPHPのメモリ制限を設定します。

memory_limit = 256M

ファイルを保存するには、Ctrl + Xを押し、プロンプトが表示されたらYを入力します。

ファイル/etc/php/8.0/fpm/pool.d/www.confを開きます。

$ sudo nano /etc/php/8.0/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.
user = nginx
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 php8.1-fpm

ステップ7 - phpMyAdminのインストール

英語版のphpMyAdminのアーカイブファイルをダウンロードします。

$ wget https://files.phpmyadmin.net/phpMyAdmin/5.2.0/phpMyAdmin-5.2.0-english.tar.gz

サイトの公開ディレクトリを作成します。

$ sudo mkdir /var/www/html/example.com -p

アーカイブを公開ディレクトリに抽出します。

$ sudo tar -xzvf phpMyAdmin-5.2.0-english.tar.gz -C /var/www/example.com

公開ディレクトリに移動します。

$ cd /var/www/html/example.com

抽出したディレクトリの名前を不明瞭なものに変更してセキュリティを向上させます。

$ sudo mv phpMyAdmin-5.2.0-english sm175

ステップ8 - phpMyAdminの設定

サンプル設定ファイルをコピーします。

$ sudo cp sm175/config.sample.inc.php sm175/config.inc.php

設定ファイルを編集のために開きます。

$ sudo nano sm175/config.inc.php

$cfg['blowfish_secret'] = '';を見つけて、クッキーに基づく認証のための32文字のランダムな文字列を入力します。

phpSolvedのオンラインブローフィッシュジェネレーターを使用するか、コマンドラインで行うことができます。

値をコピーして、次のように貼り付けます。

$cfg['blowfish_secret'] = 'Tc/HfLPBOAPxJ-rhQP}HJoZEK69c3j:m';

ファイルを保存するには、Ctrl + Xを押し、プロンプトが表示されたらYを入力します。

サイトとphpMyAdminの所有権をNginxサーバーに変更します。

$ sudo chown -R nginx:nginx /var/www/html/example.com

phpMyAdminのセットアップディレクトリを削除します。

$ sudo rm -rf /var/www/html/example.com/sm175/setup

ステップ9 - Opcacheの設定

OpcacheはPHPのキャッシングシステムです。事前コンパイルされたスクリプトのバイトコードをメモリに保存することによって機能し、ユーザーがページを訪れるたびに、より速く読み込まれます。Opcacheはデフォルトでインストールされています。確認するには、PHPのバージョンをチェックします。

$ php --version
PHP 8.1.2 (cli) (built: Jun 13 2022 13:52:54) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.1.2, Copyright (c) Zend Technologies
    with Zend OPcache v8.1.2, Copyright (c), by Zend Technologies

これにより、Opcacheがインストールされて利用可能であることがわかります。ここに表示されない場合は、次のコマンドを実行して手動でインストールできます。

$ sudo apt install php-opcache

Opcacheの設定を変更するには、ファイル/etc/php/8.1/fpm/conf.d/10-opcache.iniを編集のために開きます。

$ sudo nano /etc/php/8.1/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を入力します。

ステップ10 - SSL用のCertbotをインストール

Let’s Encryptが提供する無料のSSL証明書を生成するためにCertbotをインストールする必要があります。

Ubuntuのリポジトリを使用してCertbotをインストールするか、Snapdツールを使用して最新バージョンを取得できます。Snapdバージョンを使用します。

Ubuntu 22.04にはデフォルトでSnapdがインストールされています。次のコマンドを実行して、Snapdのバージョンが最新であることを確認します。

$ sudo snap install core
$ sudo snap refresh core

Certbotをインストールします。

$ sudo snap install --classic certbot

次のコマンドを使用して、Certbotコマンドが/usr/binディレクトリで実行できるようにシンボリックリンクを作成します。

$ sudo ln -s /snap/bin/certbot /usr/bin/certbot

ステップ11 - デモサイトをテスト

サイトを作成

テストページを作成して編集のために開きます。

$ sudo nano /var/www/html/example.com/index.php

次のコードを貼り付けます。

メンバーリスト
    "; foreach($db->query("SELECT content FROM $table") as $row) { echo "
  1. " . $row['content'] . "
  2. "; } echo "
"; } catch (PDOException $e) { print "エラー!: " . $e->getMessage() . "
"; die(); }

ファイルを保存するには、Ctrl + Xを押し、プロンプトが表示されたらYを入力します。

SSL証明書を作成

次のコマンドを実行してSSL証明書を生成します。

$ sudo certbot certonly --standalone --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [email protected] -d example.com

上記のコマンドは、サーバーの/etc/letsencrypt/live/example.comディレクトリに証明書をダウンロードします。

Diffie-Hellmanグループ証明書を生成します。

$ sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 4096

ファイル/etc/letsencrypt/renewal/example.com.confを編集のために開きます。

$ sudo nano /etc/letsencrypt/renewal/example.com.conf

次のコードを下部に貼り付けます。

pre_hook = systemctl stop nginx
post_hook = systemctl start nginx

ファイルを保存するには、Ctrl + Xを押し、プロンプトが表示されたらYを入力します。

Certbotのスタンドアロンオプションを使用してSSL証明書を生成しました。証明書を作成するために独自のウェブサーバーを実行するため、更新中はNginxを停止する必要があります。pre_hookおよびpost_hookコマンドは、更新の前後に実行され、Nginxサーバーを自動的に停止および再起動するため、手動での介入は必要ありません。

SSL更新が正常に機能しているかどうかを確認するには、プロセスのドライランを実行します。

$ sudo certbot renew --dry-run

エラーが表示されなければ、すべてが設定されています。証明書は自動的に更新されます。

Nginxの設定

ファイル/etc/nginx/conf.d/example.confを作成して編集のために開きます。

$ sudo nano /etc/nginx/conf.d/example.conf

次のコードを貼り付けます。

server {
    listen       443 ssl http2;
    listen       [::]:443 ssl http2;
    server_name  example.com;

    access_log  /var/log/nginx/example.com.access.log;
    error_log   /var/log/nginx/example.com.error.log;

    ssl_certificate      /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key  /etc/letsencrypt/live/example.com/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem;

    ssl_session_timeout  5m;
    ssl_session_cache shared:MozSSL:10m;
    ssl_session_tickets off;

    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
    ssl_ecdh_curve X25519:prime256v1:secp384r1:secp521r1;
    ssl_stapling on;
    ssl_stapling_verify on;
    ssl_dhparam /etc/ssl/certs/dhparam.pem;

    root /var/www/html/example.com;

    index index.php index.html;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    # PHPスクリプトをFastCGIサーバーに渡す
    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass unix:/run/php/php8.1-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }

    location ~ /\.(?!well-known).* {
        deny all;
    }
}

# HTTPSを強制する
server {
    listen       80;
    listen       [::]:80;
    server_name  example.com;
    return 301   https://$host$request_uri;
}

ファイルを保存するには、Ctrl + Xを押し、プロンプトが表示されたらYを入力します。

ファイル/etc/nginx/nginx.confを編集のために開きます。

$ sudo nano /etc/nginx/nginx.conf

次の行をinclude /etc/nginx/conf.d/*.conf;の前に追加します。

server_names_hash_bucket_size  64;

ファイルを保存するには、Ctrl + Xを押し、プロンプトが表示されたらYを入力します。

Nginxの設定を確認します。

$ sudo nginx -t

エラーが表示されなければ、準備完了です。Nginxサーバーを起動します。

$ sudo systemctl start nginx

ブラウザでhttps://example.comにアクセスして、次のページが表示されることを確認します。

LEMPテストサイトの出力

ブラウザでhttps://example.com/sm175にアクセスして、phpMyAdminのインストールにアクセスできます。ログインするには、rootユーザーまたは以前に作成したユーザーを入力できます。

結論

これで、Ubuntu 22.04サーバーにLEMPスタックを設定し、デモサイトを作成する方法を学んだチュートリアルが終了しました。質問がある場合は、下のコメントに投稿してください。

Share: X/Twitter LinkedIn

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

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