LAMP は、元の 4 つのコンポーネント、Linux オペレーティングシステム、Apache HTTP Server、MySQL リレーショナルデータベース管理システム、および PHP プログラミング言語の頭字語です。ほとんどの場合、LAMP スタックは Web サイトの構築に使用されます。このトピックでは、Elastic Compute Service(ECS)インスタンスに LAMP スタックを手動でデプロイする方法について説明します。
[Terraform Explorer] に移動して、Terraform コードを表示および実行できます。これにより、ECS インスタンスの LAMP 環境を自動的に構築できます。
前提条件
パブリック IP アドレスは ECS インスタンスに自動的に割り当てられます。または、Elastic IP アドレス(EIP)が ECS インスタンスに関連付けられています。パブリック帯域幅を有効にする方法については、「パブリック帯域幅を有効にする」をご参照ください。
インバウンドルールは、ポート 22 と 80 を開くために ECS インスタンスのセキュリティグループに追加されます。セキュリティグループルールの追加方法については、「セキュリティグループルールの追加」をご参照ください。
ECS インスタンスには、少なくとも 4 GiB のメモリが必要です。
LAMP スタックをデプロイする
Alibaba Cloud Linux 3 または CentOS 8
Apache をインストールします。
# Apache サーバーをインストールします。 sudo dnf install -y httpd # インスタンスの起動時に Apache サーバーを自動的に起動します。 sudo systemctl enable httpd # Apache サーバーを起動します。 sudo systemctl start httpd
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
LAMP スタックを確認します。
構成ファイルで
PHP-FPM
のデフォルトのリスニングアドレスをクエリします。sudo grep 'listen =' /etc/php-fpm.d/www.conf
/etc/httpd/conf.d/php-fpm.conf
構成ファイルを作成し、ファイルにphp-fpm
ルールを構成します。重要PHP-FPM
のリスニングアドレスが127.0.0.1:9000
の場合、SetHandler パラメーターをproxy:fcgi://127.0.0.1:9000
に設定します。sudo tee /etc/httpd/conf.d/php-fpm.conf <<-'EOF' <FilesMatch \.php$> SetHandler "proxy:unix:/run/php-fpm/www.sock;" </FilesMatch> EOF
構成を有効にするには、httpd を再起動します。
sudo systemctl restart httpd
/var/www/html/
ディレクトリにtest.php
ファイルを作成し、次のコンテンツをファイルに追加します。<username>
を MySQL ユーザー名に、<password>
を対応するパスワードに置き換えます。sudo tee /var/www/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
Apache をインストールします。
# Apache サーバーをインストールします。 sudo yum install -y httpd # インスタンスの起動時に Apache サーバーを自動的に起動します。 sudo systemctl enable httpd # Apache サーバーを起動します。 sudo systemctl start httpd
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
LAMP スタックを確認します。
構成ファイルで
PHP-FPM
のデフォルトのリスニングアドレスをクエリします。sudo grep 'listen =' /etc/php-fpm.d/www.conf
ソケットファイルのアドレスが返された場合、PHP-FPM はソケットファイルをリッスンします。
127.0.0.1:9000
が返された場合、PHP-FPM はローカルポート 9000 をリッスンします。
/etc/httpd/conf.d/php-fpm.conf
構成ファイルを作成し、ファイルにphp-fpm
ルールを構成します。重要PHP-FPM
のリスニングアドレスがソケットファイルのアドレスである場合、proxy:fcgi://127.0.0.1:9000
をproxy:unix:<path>;
に変更します。<path> をソケットファイルのアドレスに置き換えます。sudo tee /etc/httpd/conf.d/php-fpm.conf <<-'EOF' <FilesMatch \.php$> SetHandler "proxy:fcgi://127.0.0.1:9000" </FilesMatch> EOF
構成を有効にするには、httpd を再起動します。
sudo systemctl restart httpd
/var/www/html/
ディレクトリにtest.php
ファイルを作成し、次のコンテンツをファイルに追加します。<username>
を MySQL ユーザー名に、<password>
を対応するパスワードに置き換えます。sudo tee /var/www/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 以降
Apache をインストールします。
# Apache サーバーをインストールします。 sudo apt update -y && sudo apt install -y apache2 # インスタンスの起動時に Apache サーバーを自動的に起動します。 sudo systemctl enable apache2 # Apache サーバーを起動します。 sudo systemctl start apache2
ソフトウェアパッケージリストを更新し、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
LAMP スタックを確認します。
構成ファイルで
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 をリッスンします。
/etc/apache2/conf-available/php-fpm.conf
構成ファイルを作成し、ファイルに PHP 転送ルールを構成します。<listen> を PHP-FPM の実際のリスニングアドレスに置き換えます。ソケットファイルのアドレスが PHP-FPM のリスニングアドレスとして使用されている場合、
<listen>
をunix:<path>;
に、<path>
をソケットファイルのアドレスに置き換えます。重要ソケットファイルをリッスンするには、アカウントにソケットファイルに対する読み取りおよび書き込み権限が必要です。
sudo chmod 666 <path>
コマンドを実行して、上記の権限を付与できます。<path> をソケットファイルの実際のアドレスに置き換えます。127.0.0.1:9000
が PHP-FPM のリスニングアドレスとして使用されている場合、<listen>
をfcgi://127.0.0.1:9000
に置き換えます。
sudo tee /etc/apache2/conf-available/php-fpm.conf <<-'EOF' <FilesMatch \.php$> SetHandler "proxy:<listen>" </FilesMatch> EOF
構成ファイルのシンボリックリンクを作成します。
sudo ln -s /etc/apache2/conf-available/php-fpm.conf /etc/apache2/conf-enabled/
proxy_fcgi モジュールと setenvif モジュールを有効にして、Apache が PHP リクエストを PHP-FPM に転送できるようにします。次に、PHP-FPM の構成ファイルを有効にします。
sudo a2enmod proxy_fcgi setenvif sudo a2enconf php8.4-fpm
構成を有効にするには、httpd を再起動します。
sudo systemctl restart apache2
/var/www/html/
ディレクトリにtest.php
ファイルを作成し、次のコンテンツをファイルに追加します。<username>
を MySQL ユーザー名に、<password>
を対応するパスワードに置き換えます。sudo tee /var/www/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 に接続されています。
よくある質問
test.php ページがホストされている ECS インスタンスのパブリック IP アドレスを使用してページにアクセスできないのはなぜですか?
考えられる原因と解決策:
ECS インスタンスのセキュリティグループでポート 80 が開いていないか、ECS インスタンスでシステムファイアウォールが有効になっているか、ポート 80 が別のサービスで使用されています。
上記の原因に基づいて問題のトラブルシューティングを行う方法については、「インスタンスにデプロイされたサービスにアクセスできない場合はどうすればよいですか?」をご参照ください。
MySQL へのリモートアクセスを許可するにはどうすればよいですか?
ルート以外のアカウントを作成し、そのアカウントを使用して MySQL へのリモートアクセスを許可します。詳細については、「Linux インスタンスに MySQL をデプロイする」をご参照ください。