このトピックでは、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
公式の 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
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
ルートユーザーのデフォルトの初期パスワードをクエリします。
インスタンスで Alibaba Cloud Linux 3 が実行されている場合は、次のコマンドを実行します。
echo $(PASSWORD=$(sudo grep 'temporary password' /var/log/mysqld.log); PASSWORD=${PASSWORD##* }; echo $PASSWORD)
インスタンスで CentOS 8 が実行されている場合、ルートユーザーには初期パスワードがありません。
MySQL のルートユーザーの新しいパスワードを指定します。次のコマンドで、
<oldpwd>
を初期パスワードに、<newpwd>
を新しいパスワードに置き換えます。インスタンスで CentOS 8 が実行されている場合は、<oldpwd>
を空の文字列に置き換え、パスワードの入力を求められたら Enter キーを押して次の行にスキップします。重要パスワードは 8 文字以上で、大文字、小文字、数字、特殊文字をそれぞれ 1 つ以上含める必要があります。
sudo mysqladmin -uroot -p'<oldpwd>' password '<newpwd>'
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
LNMP スタックを確認します。
構成ファイルで
PHP-FPM
のデフォルトのリスニングアドレスをクエリします。sudo grep '^listen =' /etc/php-fpm.d/www.conf
ソケットファイルのアドレスが返された場合、PHP-FPM はソケットファイルをリッスンします。
127.0.0.1:9000
が返された場合、PHP-FPM はローカルポート 9000 をリッスンします。
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
構成ファイルの変更を有効にするために NGINX を再起動します。
sudo systemctl restart nginx
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
オンプレミスマシンの Web ブラウザのアドレスバーに、
http://<ECS インスタンスのパブリック IP アドレス>/test.php
と入力します。success
が返された場合、PHP プロキシを使用して MySQL に接続されています。
Alibaba Cloud Linux 2 および CentOS 7
公式の 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
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
ルートユーザーのデフォルトの初期パスワードをクエリします。
echo $(PASSWORD=$(sudo grep 'temporary password' /var/log/mysqld.log); PASSWORD=${PASSWORD##* }; echo $PASSWORD)
MySQL のルートユーザーの新しいパスワードを指定します。次のコマンドで、
<oldpwd>
を初期パスワードに、<newpwd>
を新しいパスワードに置き換えます。重要パスワードは 8 文字以上で、大文字、小文字、数字、特殊文字をそれぞれ 1 つ以上含める必要があります。
sudo mysqladmin -uroot -p'<oldpwd>' password '<newpwd>'
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
LNMP スタックを確認します。
構成ファイルで
PHP-FPM
のデフォルトのリスニングアドレスをクエリします。sudo grep '^listen =' /etc/php-fpm.d/www.conf
ソケットファイルのアドレスが返された場合、PHP-FPM はソケットファイルをリッスンします。
127.0.0.1:9000
が返された場合、PHP-FPM はローカルポート 9000 をリッスンします。
tee
コマンドを実行して/etc/nginx/conf.d/default.conf
ファイルを変更し、PHP 転送ルールを追加します。重要PHP-FPM
のリスニングアドレスがソケットファイルのアドレスの場合は、127.0.0.1:9000
をunix:<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
構成ファイルの変更を有効にするために NGINX を再起動します。
sudo systemctl restart nginx
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
オンプレミスマシンの Web ブラウザのアドレスバーに
http://<ECS インスタンスのパブリック IP アドレス>/test.php
と入力します。success
が返された場合、PHP プロキシを使用して MySQL に接続されています。
Ubuntu 20.04 以降
公式の 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
ソフトウェアパッケージリストを更新し、MySQL サーバーをインストールします。
sudo apt update -y && sudo apt install -y mysql-server
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;"
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
LNMP スタックを確認します。
構成ファイルで
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 をリッスンします。
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
構成ファイルの変更を有効にするために NGINX を再起動します。
sudo systemctl restart nginx
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
オンプレミスマシンの 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
で終わるすべての追加構成ファイルから構成を読み取ります。