すべてのプロダクト
Search
ドキュメントセンター

Elastic Compute Service:LNMP スタックのデプロイ

最終更新日:Apr 08, 2025

このトピックでは、Elastic Compute Service (ECS) インスタンスに LNMP スタック ( Linux、NGINX、MySQL、および PHP) をデプロイする方法について説明します。

前提条件

  • パブリック IP アドレスは ECS インスタンスに自動的に割り当てられます。または、Elastic IP アドレス ( EIP) が ECS インスタンスに関連付けられています。パブリック帯域幅を有効にする方法については、「パブリック帯域幅を有効にする」をご参照ください。

  • ポート 22 と 80 を開くために、ECS インスタンスのセキュリティグループに着信ルールが追加されます。セキュリティグループルールの追加方法については、「セキュリティグループルールの追加」をご参照ください。

  • ECS インスタンスには、少なくとも 4 GiB のメモリが必要です。

説明

Terraform Explorer にアクセスしてサンプルコードを実行すると、LNMP スタックを迅速にデプロイできます。

LNMP スタックのデプロイ

Alibaba Cloud Linux 3 および CentOS 8

  1. 公式の NGINX リポジトリから NGINX をインストールします。

    説明

    デフォルトでは、NGINX の最新の安定バージョンがインストールされます。別の NGINX バージョンが必要な場合は、sudo dnf search nginx --showduplicates コマンドを実行して、サポートされている NGINX バージョンを検索し、インストールするバージョンの番号をインストールコマンドに追加します。たとえば、バージョン 1.24.0 をインストールする場合は、sudo dnf -y install nginx-1.24.0 コマンドを実行します。

    # 公式の NGINX リポジトリを追加します。
    sudo tee /etc/yum.repos.d/nginx.repo <<-'EOF'
    [nginx-stable]
    name=nginx stable repo
    baseurl=http://nginx.org/packages/centos/8/$basearch/
    gpgcheck=1
    enabled=1
    gpgkey=https://nginx.org/keys/nginx_signing.key
    module_hotfixes=true
    EOF
    # NGINX をインストールします。
    sudo dnf -y install nginx
    # NGINX を起動し、システム起動時に NGINX が自動的に起動するように構成します。
    sudo systemctl start nginx
    sudo systemctl enable nginx
  2. MySQL をインストールします。

    説明

    インスタンスで Alibaba Cloud Linux 3 が実行されている場合は、以前のバージョンの OpenSSL ライブラリと互換性のある compat-openssl10 をインストールする必要があります。

    sudo yum install -y compat-openssl10
    # 公式の MySQL リポジトリを追加します。
    sudo rpm -Uvh https://repo.mysql.com/mysql84-community-release-el8-1.noarch.rpm
    # MySQL をインストールします。
    sudo dnf install -y mysql-server
    # MySQL を起動し、システム起動時に MySQL が自動的に起動するように構成します。
    sudo systemctl start mysqld
    sudo systemctl enable mysqld
    1. ルートユーザーのデフォルトの初期パスワードをクエリします。

      • インスタンスで Alibaba Cloud Linux 3 が実行されている場合は、次のコマンドを実行します。

        echo $(PASSWORD=$(sudo grep 'temporary password' /var/log/mysqld.log); PASSWORD=${PASSWORD##* }; echo $PASSWORD)
      • インスタンスで CentOS 8 が実行されている場合、ルートユーザーには初期パスワードがありません。

    2. MySQL のルートユーザーの新しいパスワードを指定します。次のコマンドで、<oldpwd> を初期パスワードに、<newpwd> を新しいパスワードに置き換えます。インスタンスで CentOS 8 が実行されている場合は、<oldpwd> を空の文字列に置き換え、パスワードの入力を求められたら Enter キーを押して次の行にスキップします。

      重要

      パスワードは 8 文字以上で、大文字、小文字、数字、特殊文字をそれぞれ 1 つ以上含める必要があります。

      sudo mysqladmin -uroot -p'<oldpwd>' password '<newpwd>'
  3. PHP をインストールします。

    説明

    この例では、PHP 8.4 を使用しています。別の PHP バージョンが必要な場合は、インストールする PHP バージョンに基づいてモジュール名を変更します。たとえば、PHP 8.1 をインストールする場合は、モジュール名を php:remi-8.1 に変更します。

    # remi リポジトリを指定し、php:remi-8.4 モジュールを有効にします。
    sudo rpm -Uvh http://mirrors.cloud.aliyuncs.com/remi/enterprise/remi-release-8.rpm  --nodeps
    sudo sed -i "s/\$releasever/8/g" /etc/yum.repos.d/remi-modular.repo /etc/yum.repos.d/remi-safe.repo /etc/yum.repos.d/remi.repo
    sudo dnf install -y yum-utils && sudo dnf module enable -y php:remi-8.4
    # PHP、PHP FastCGI Process Manager ( PHP-FPM) 、および MySQL 拡張機能をインストールします。
    sudo dnf install -y php php-fpm php-mysqlnd
    # PHP-FPM を起動し、システム起動時に PHP-FPM が自動的に起動するように構成します。
    sudo systemctl start php-fpm
    sudo systemctl enable php-fpm
  4. LNMP スタックを確認します。

    1. 構成ファイルで PHP-FPM のデフォルトのリスニングアドレスをクエリします。

      sudo grep '^listen =' /etc/php-fpm.d/www.conf
      • ソケットファイルのアドレスが返された場合、PHP-FPM はソケットファイルをリッスンします。

      • 127.0.0.1:9000 が返された場合、PHP-FPM はローカルポート 9000 をリッスンします。

    2. tee コマンドを実行して /etc/nginx/conf.d/default.conf ファイルを変更し、PHP 転送ルールを追加します。

      重要

      PHP-FPM のリスニングアドレスが 127.0.0.1:9000 の場合は、fastcgi_pass パラメーターを 127.0.0.1:9000 に設定します。

      sudo tee /etc/nginx/conf.d/default.conf <<-'EOF'
      server {
          listen       80;
          server_name  localhost;
          root /usr/share/nginx/html;
          location / {
          index index.php index.html index.htm;
          }
          location ~ .php$ {
              root /usr/share/nginx/html;
              fastcgi_pass unix:/run/php-fpm/www.sock;
              fastcgi_index index.php;
              fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
              include fastcgi_params;
          }
          error_page   500 502 503 504  /50x.html;
          location = /50x.html {
              root   /usr/share/nginx/html;
          }
      }
      EOF
    3. 構成ファイルの変更を有効にするために NGINX を再起動します。

       sudo systemctl restart nginx
    4. tee コマンドを実行して、/usr/share/nginx/html ディレクトリに test.php という名前の PHP ファイルを作成し、MySQL 接続のテストに使用するコードをファイルに追加します。<username> を MySQL のユーザー名に、<password> を MySQL のパスワードに置き換えます。

      sudo tee /usr/share/nginx/html/test.php <<-'EOF'
      <?php
      $servername = "localhost";
      $username = "<username>";
      $password = "<password>";
      $conn = new mysqli($servername, $username, $password);
      if ($conn->connect_error) {
      die("fail: " . $conn->connect_error);
      }
      echo "success\n";
      ?>
      EOF
    5. オンプレミスマシンの Web ブラウザのアドレスバーに、http://<ECS インスタンスのパブリック IP アドレス>/test.php と入力します。success が返された場合、PHP プロキシを使用して MySQL に接続されています。

Alibaba Cloud Linux 2 および CentOS 7

  1. 公式の NGINX リポジトリから NGINX をインストールします。

    説明

    デフォルトでは、NGINX の最新の安定バージョンがインストールされます。別の NGINX バージョンが必要な場合は、sudo yum search nginx --showduplicates コマンドを実行して、サポートされている NGINX バージョンを検索し、インストールするバージョンの番号をインストールコマンドに追加します。たとえば、バージョン 1.24.0 をインストールする場合は、sudo yum -y install nginx-1.24.0 コマンドを実行します。

    # 公式の NGINX リポジトリを追加します。
    sudo tee /etc/yum.repos.d/nginx.repo <<-'EOF'
    [nginx-stable]
    name=nginx stable repo
    baseurl=http://nginx.org/packages/centos/7/$basearch/
    gpgcheck=1
    enabled=1
    gpgkey=https://nginx.org/keys/nginx_signing.key
    module_hotfixes=true
    EOF
    # NGINX をインストールします。
    sudo yum -y install nginx
    # NGINX を起動し、システム起動時に NGINX が自動的に起動するように構成します。
    sudo systemctl start nginx
    sudo systemctl enable nginx
  2. MySQL をインストールします。

    # 公式の MySQL リポジトリを追加します。
    sudo rpm -Uvh https://repo.mysql.com/mysql84-community-release-el7-1.noarch.rpm
    # MySQL をインストールします。
    sudo yum install -y mysql-server
    # MySQL を起動し、システム起動時に MySQL が自動的に起動するように構成します。
    sudo systemctl start mysqld
    sudo systemctl enable mysqld
    1. ルートユーザーのデフォルトの初期パスワードをクエリします。

      echo $(PASSWORD=$(sudo grep 'temporary password' /var/log/mysqld.log); PASSWORD=${PASSWORD##* }; echo $PASSWORD)
    2. MySQL のルートユーザーの新しいパスワードを指定します。次のコマンドで、<oldpwd> を初期パスワードに、<newpwd> を新しいパスワードに置き換えます。

      重要

      パスワードは 8 文字以上で、大文字、小文字、数字、特殊文字をそれぞれ 1 つ以上含める必要があります。

      sudo mysqladmin -uroot -p'<oldpwd>' password '<newpwd>'
  3. PHP をインストールします。

    # remi リポジトリを指定し、remi-php83 モジュールを有効にします。
    sudo rpm -Uvh http://mirrors.cloud.aliyuncs.com/remi/enterprise/remi-release-7.rpm  --nodeps
    sudo sed -i "s/\$releasever/7/g" /etc/yum.repos.d/remi-modular.repo /etc/yum.repos.d/remi-safe.repo /etc/yum.repos.d/remi.repo
    sudo yum install -y yum-utils && sudo yum-config-manager --enable   remi-php83
    # PHP、PHP-FPM、および MySQL 拡張機能をインストールします。
    sudo yum install -y php php-fpm php-mysqlnd
    # PHP-FPM を起動し、システム起動時に PHP-FPM が自動的に起動するように構成します。
    sudo systemctl start php-fpm
    sudo systemctl enable php-fpm
  4. LNMP スタックを確認します。

    1. 構成ファイルで PHP-FPM のデフォルトのリスニングアドレスをクエリします。

      sudo grep '^listen =' /etc/php-fpm.d/www.conf
      • ソケットファイルのアドレスが返された場合、PHP-FPM はソケットファイルをリッスンします。

      • 127.0.0.1:9000 が返された場合、PHP-FPM はローカルポート 9000 をリッスンします。

    2. tee コマンドを実行して /etc/nginx/conf.d/default.conf ファイルを変更し、PHP 転送ルールを追加します。

      重要

      PHP-FPM のリスニングアドレスがソケットファイルのアドレスの場合は、127.0.0.1:9000unix:<path> に変更します。<path> をソケットファイルのアドレスに置き換えます。

      sudo tee /etc/nginx/conf.d/default.conf <<-'EOF'
      server {
          listen       80;
          server_name  localhost;
          root /usr/share/nginx/html;
          location / {
                  index index.php index.html index.htm;
          }
          location ~ .php$ {
                  root /usr/share/nginx/html;
                  fastcgi_pass 127.0.0.1:9000;
                  fastcgi_index index.php;
                  fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                  include fastcgi_params;
          }
          error_page   500 502 503 504  /50x.html;
          location = /50x.html {
              root   /usr/share/nginx/html;
          }
      }
      EOF
    3. 構成ファイルの変更を有効にするために NGINX を再起動します。

       sudo systemctl restart nginx
    4. tee コマンドを実行して、/usr/share/nginx/html ディレクトリに test.php という名前の PHP ファイルを作成し、MySQL 接続のテストに使用するコードをファイルに追加します。<username> を MySQL のユーザー名に、<password> を MySQL のパスワードに置き換えます。

      sudo tee /usr/share/nginx/html/test.php <<-'EOF'
      <?php
      $servername = "localhost";
      $username = "<username>";
      $password = "<password>";
      $conn = new mysqli($servername, $username, $password);
      if ($conn->connect_error) {
      die("fail: " . $conn->connect_error);
      }
      echo "success\n";
      ?>
      EOF
    5. オンプレミスマシンの Web ブラウザのアドレスバーに http://<ECS インスタンスのパブリック IP アドレス>/test.php と入力します。success が返された場合、PHP プロキシを使用して MySQL に接続されています。

Ubuntu 20.04 以降

  1. 公式の NGINX リポジトリから NGINX をインストールします。

    # システムおよびパッケージ管理ツールにインストールされているソフトウェアを更新します。
    sudo apt update -y
    # NGINX に必要な依存関係をインストールします。
    sudo apt install -y curl gnupg2 ca-certificates lsb-release ubuntu-keyring
    # 公式の NGINX 署名キーをインポートします。
    curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor | sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null
    # Advanced Packaging Tool ( APT) リポジトリを指定します。
    echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] http://nginx.org/packages/ubuntu `lsb_release -cs` nginx" | sudo tee /etc/apt/sources.list.d/nginx.list
    # NGINX をインストールします。
    sudo apt install -y nginx
  2. ソフトウェアパッケージリストを更新し、MySQL サーバーをインストールします。

    sudo apt update -y && sudo apt install -y mysql-server
  3. MySQL サーバーの root ユーザーが使用するパスワードと身元認証プラグインを変更します。次のコマンドの <newpwd> を実際のパスワードに置き換えます。

    重要

    ルートユーザーが使用するデフォルトの身元認証プラグインは auth_socket です。コマンドの実行後、パスワードの入力を求められます。Enter キーを押して次の行にスキップします。

    sudo mysql -uroot -p -e "ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY '<newpwd>';" -e "FLUSH PRIVILEGES;"
  4. PHP をインストールします。

    説明

    sudo apt search php コマンドを実行して、インストールできるすべての PHP バージョンをクエリします。別の PHP バージョンをインストールする場合は、次のコマンドのバージョン番号を実際のバージョン番号に置き換えます。たとえば、PHP 8.1 をインストールする場合は、sudo apt install -y php8.1 php8.1-fpm php8.1-mysql コマンドを実行します。

    # software-properties-common パッケージをインストールし、ppa:ondrej/php Personal Package Archive ( PPA) リポジトリを追加します。
    sudo apt update && sudo apt install -y software-properties-common && sudo add-apt-repository -y ppa:ondrej/php
    # PHP 8.4 および関連コンポーネント ( PHP-FPM および MySQL 拡張機能を含む) をインストールします。
    sudo apt install -y php8.4 php8.4-fpm php8.4-mysql
  5. LNMP スタックを確認します。

    1. 構成ファイルで PHP-FPM のデフォルトのリスニングアドレスをクエリします。<version> を実際の PHP バージョンに置き換えます。たとえば、PHP 8.4 を使用している場合は、<version> を 8.4 に置き換えます。

      sudo grep '^listen =' /etc/php/<version>/fpm/pool.d/www.conf
      • ソケットファイルのアドレスが返された場合、PHP-FPM はソケットファイルをリッスンします。

      • 127.0.0.1:9000 が返された場合、PHP-FPM はローカルポート 9000 をリッスンします。

    2. tee コマンドを実行して /etc/nginx/conf.d/default.conf ファイルを変更し、PHP 転送ルールを追加します。<listen> を実際のリスニングアドレスに置き換えます。ソケットファイルのアドレスをリスニングアドレスとして使用する場合は、unix: プレフィックスをアドレスに追加します。

      重要

      ソケットファイルをリッスンするには、アカウントにソケットファイルに対する読み取りおよび書き込み権限が必要です。sudo chmod 666 <path> コマンドを実行して、上記の権限を付与します。<path> をソケットファイルの実際のアドレスに置き換えます。

      # デフォルトのサイト構成を削除します。
      sudo rm -f /etc/nginx/sites-enabled/*
      # 構成ファイルを変更します。
      sudo tee /etc/nginx/conf.d/default.conf <<-'EOF'
      server {
          listen       80;
          server_name  localhost;
          root /usr/share/nginx/html;
          location / {
                  index index.php index.html index.htm;
          }
          location ~ .php$ {
                  root /usr/share/nginx/html;
                  fastcgi_pass <listen>;
                  fastcgi_index index.php;
                  fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                  include fastcgi_params;
          }
          error_page   500 502 503 504  /50x.html;
          location = /50x.html {
              root   /usr/share/nginx/html;
          }
      }
      EOF
    3. 構成ファイルの変更を有効にするために NGINX を再起動します。

       sudo systemctl restart nginx
    4. tee コマンドを実行して、/usr/share/nginx/html ディレクトリに test.phpという名前の PHP ファイルを作成し、MySQL 接続のテストに使用するコードをファイルに追加します。<username> を MySQL のユーザー名に、<password> を MySQL のパスワードに置き換えます。

      sudo tee /usr/share/nginx/html/test.php <<-'EOF'
      <?php
      $servername = "localhost";
      $username = "<username>";
      $password = "<password>";
      $conn = new mysqli($servername, $username, $password);
      if ($conn->connect_error) {
      die("fail: " . $conn->connect_error);
      }
      echo "success\n";
      ?>
      EOF
    5. オンプレミスマシンの Web ブラウザのアドレスバーに http://<ECS インスタンスのパブリック IP アドレス>/test.php と入力します。success が返された場合、PHP プロキシを使用して MySQL に接続されています。

FAQ

test.php ページがホストされている ECS インスタンスのパブリック IP アドレスを使用してページにアクセスできないのはなぜですか。

考えられる原因と解決策:

ECS インスタンスのセキュリティグループでポート 80 が開いていないか、ECS インスタンスでシステムファイアウォールが有効になっているか、ポート 80 が別のサービスによって使用されています。

上記の原因に基づいて問題のトラブルシューティングを行う方法については、「インスタンスにデプロイされたサービスにアクセスできない場合の対処方法」をご参照ください。

MySQL へのリモートアクセスを許可するにはどうすればよいですか。

ルート以外のアカウントを作成し、そのアカウントを使用して MySQL へのリモートアクセスを許可します。詳細については、「Linux インスタンスへの MySQL のデプロイ」をご参照ください。

NGINX の構成ファイルとログファイルはどこにありますか。

  • デフォルトでは、NGINX のログファイルは /var/log/nginx/ ディレクトリに保存されます。

  • デフォルトでは、NGINX のメイン構成ファイルは /etc/nginx/nginx.conf です。

  • デフォルトでは、NGINX は /etc/nginx/conf.d ディレクトリにある、名前が .conf で終わるすべての追加構成ファイルから構成を読み取ります。