VPC の LAMP スタック上の PHP Web アプリケーション
このチュートリアルでは、費用が発生する場合があります。 コスト見積もりツールを使用して、予測使用量に基づいてコスト見積もりを生成します。
このチュートリアルでは、 A キャッシュ Web サーバー、 M ySQL データベース、および IBM Cloud 仮想プライベート・クラウド(VPC)インフラストラクチャー上の P HP スクリプトを使用して、 Ubuntu L inux 仮想サーバーを作成する方法について説明します。 このソフトウェアの組み合わせは、一般的に LAMPスタックと呼ばれており、ウェブサイトやウェブアプリケーションの提供に広く使用されています。 IBM Cloud VPC を使用して、LAMP スタックを素早くデプロイし、必要に応じてロギングおよびモニタリングを追加します。 LAMPサーバーを実際に体験するため、無料かつオープンソース WordPressもインストールして設定します。
目標
- VPC で仮想サーバー・インスタンス (VSI) をプロビジョンします。
- 最新の Apache、MySQL および PHP ソフトウェアをインストールします。
- WordPress をインストールして構成することによって、Web サイトまたはブログをホストします。
- ロギングとモニタリングを構成して、障害を検出し、パフォーマンスの低下をモニターします (オプション)。
- VSI をサイズ変更します (オプション)。
{: caption="
- エンド・ユーザーは、Web ブラウザーを使用して、VPC 上で実行されている LAMP サーバーにアクセスします。
- 暗号化されたブロック・ストレージ・ボリュームからのデータを使用するように VSI が構成されます (オプション)。
開始前に
このチュートリアルでは、以下が必要です。
- IBM Cloud の有料のアカウント。
- IBM Cloud CLI
- IBM Cloud VPC プラグイン (
vpc-infrastructure
)
- IBM Cloud VPC プラグイン (
terraform
: リソースをプロビジョンするコードとしてインフラストラクチャーを使用します。jq
: JSON ファイルを照会します。git
: ソース・コード・リポジトリーを複製します。
これらのツールをダウンロードして、お客様のオペレーティング環境にインストールする方法については 、「ソリューションチュートリアルガイド」 をご覧ください。 これらのツールのインストールを避けるには Cloud Shell を使用できます。
サービスの作成
このセクションでは、 IBM Cloud Shell IBM Cloud を使用して、VPC、サブネット、セキュリティグループ、仮想サーバーインスタンス(VSI)をプロビジョニングします。 VSI は、需要のピークに対処するためによく使用されますが、その時期が過ぎたら中断または電源遮断の操作を行って、クラウド環境をインフラストラクチャーのニーズに完璧に適合させることができます。
Terraform テンプレートを使用してこれらのリソースを生成する場合、https://github.com/IBM-Cloud/vpc-tutorials/tree/master/vpc-lamp で入手可能なテンプレートを使用し、README.md にある指示に従って作業することができます。 このテンプレートは Schematics でも使用できます。
- IBM Cloud アカウントにログインしているときに、 IBM Cloud Shellを起動します。
- シェルでは IBM Cloudのいずれかのリージョンに自動的にログインされますが、必要に応じて別のリージョンに切り替えることも可能です。次のコマンドを実行してください
ibmcloud target -r <region-name> -g <resource-group>
SSH 鍵の作成
-
VPC では、VSI への管理者アクセスに、パスワードではなく SSH 鍵を使用します。 次のコマンドを実行して SSH 鍵を作成し、プロンプトが出されたらデフォルトを受け入れます。 SSH 鍵について詳しくは、資料 SSH 鍵を参照してください。
ssh-keygen -t rsa -b 4096
上記のコマンドにより、
~/.ssh
ディレクトリー内にid_rsa
およびid_rsa.pub
という 2 つのファイルが生成されます。 ご使用の Cloud Shell セッションは存続時間が短いため、IBM Cloud Shell 内に作成されるファイルは、今後再利用するために安全な場所に保存しておく必要があります。 Cloud Shell の画面の右上のセクションに、ファイルのダウンロードとアップロードを行うオプションがあります。再利用する既存の SSH 鍵がある場合は、代わりにそれを Cloud Shell セッションにアップロードします。
-
SSH 鍵をアカウントに追加します。
SSHKEY_ID=$(ibmcloud is key-create sshkey-lamp-tutorial @$HOME/.ssh/id_rsa.pub --json | jq -r '.id')
VPC、サブネット、セキュリティー・グループの作成
-
VPC を作成します。 詳しくは、コンソールまたは CLI で VPC を作成する方法に関する資料を参照してください。
VPC_ID=$(ibmcloud is vpc-create vpc-lamp-tutorial --json | jq -r '.id')
-
VPC のサブネットを作成します。
SUBNET_ID=$(ibmcloud is subnet-create subnet-lamp-1 $VPC_ID --zone $(ibmcloud target --output json | jq -r '.region.name')-1 --ipv4-address-count 256 --json | jq -r '.id')
-
VPC のセキュリティー・グループを作成します。
SG_ID=$(ibmcloud is security-group-create sg-lamp-1 $VPC_ID --json | jq -r '.id')
-
インバウンドを SSH ポート 22 のみに制限するルールを追加します。
ibmcloud is security-group-rule-add $SG_ID inbound tcp --port-min 22 --port-max 22 --json
SSHポートへのアクセスをアドレスの一部集合に制限するには、上記のコマンド--remote <IPアドレスまたはCIDR>を使用して、このサーバーにアクセスできるユーザーを制限します。すなわち、
ibmcloud is security-group-rule-add $SG_ID inbound tcp --remote YOUR_IP_ADDRESS --port-min 22 --port-max 22 --json
-
インバウンドを HTTP ポート 80 のみに制限するルールを追加します。
ibmcloud is security-group-rule-add $SG_ID inbound tcp --port-min 80 --port-max 80 --json
また HTTPへのアクセスをアドレスの一部集合に制限することもできます。このサーバーにアクセスできるユーザーを制限するには、上記のコマンド--remote <IPアドレスまたはCIDR>を使用します。すなわち、
ibmcloud is security-group-rule-add $SG_ID inbound tcp --remote YOUR_IP_ADDRESS --port-min 80 --port-max 80 --json
-
アウトバウンドをすべてに許可するルールを追加します。これはソフトウェアのインストールに必要です。これは後で無効化または削除できます。
ibmcloud is security-group-rule-add $SG_ID outbound all --json
仮想サーバー・インスタンスの作成
- IBM Cloud は、Ubuntu イメージを定期的に更新して最新のソフトウェアを提供しています。次のコマンドを実行して、最新の Ubuntu 20.x のイメージ ID を取得してください。
IMAGE_ID=$(ibmcloud is images --json | jq -r '.[] | select (.name=="ibm-ubuntu-22-04-1-minimal-amd64-3") | .id')
- 仮想サーバー・インスタンスの作成
NIC_ID=$(ibmcloud is instance-create vsi-lamp-1 $VPC_ID $(ibmcloud target --output json | jq -r '.region.name')-1 cx2-2x4 $SUBNET_ID --image-id $IMAGE_ID --key-ids $SSHKEY_ID --security-group-ids $SG_ID --json | jq -r '.primary_network_interface.id')
- 浮動 IP を予約します
FLOATING_IP=$(ibmcloud is floating-ip-reserve fip-lamp-1 --nic-id $NIC_ID --json | jq -r '.address')
- SSH でサーバーに接続します。新しく作成されたサーバーが SSH 経由でアクセス可能になるまでに少し時間がかかる場合があります。
ブラウザーを使用して仮想サーバーにアクセスするには、その浮動 IP を知っておく必要があります。 これは既にシェル変数にキャプチャーされているので、コマンドssh root@$FLOATING_IP
echo $FLOATING_IP
を実行して浮動 IP アドレスを取得できます。あるいは、ibmcloud is floating-ips --json
を実行して、その結果の中から浮動 IP の作成に使用した名前であるfip-lamp-1
を検索することでも取得できます。 ウェブコンソール からサーバーのフローティングIPアドレスも確認できます。
Apache、MySQL、および PHP のインストール
このセクションでは、いくつかのコマンドを実行して、Ubuntu パッケージ・ソースの更新と、最新バージョンの Apache、MySQL、および PHP のインストールを行います。
サーバーを初めてスピンアップするときに、既にシステム更新が実行されていて、以下のコマンドの実行がブロックされる可能性があります。ps aux | grep -i apt
を実行してシステム更新の状況を確認し、自動化されたシステム更新タスクが完了するのを待つか、タスクを強制終了することができます。
- 更新中の対話モードを無効化します
export DEBIAN_FRONTEND=noninteractive
- パッケージを更新します
apt update
- Apache をインストールします
apt install apache2 -y
- MySQL をインストールします
apt install mysql-server -y
- PHP をインストールします
apt install php libapache2-mod-php php-mysql php-common php-cli -y
インストールおよび構成の確認
このセクションでは、Apache、MySQL、および PHP が最新であり、Ubuntu イメージで実行されていることを確認します。 また、MySQL の推奨セキュリティー設定を実装します。
- ブラウザーで浮動 IP アドレスを開いて Ubuntu を確認します。 Ubuntu のウェルカム・ページが表示されます。
検証 Ubuntu - 以下のコマンドを使用して、インストールされている Apache、MySQL、および PHP のバージョンをレビューします。
apache2 -v
mysql -V
php -v
mysql
プロンプトを開きます。mysql
- yourPasswordをパスワードで置き換えて、以下のコマンドを実行します。
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'yourPassword';
mysql
プロンプトを終了します。exit
- 以下のスクリプトを実行して、MySQL データベースを保護します。 設定に最も適したオプションを選択するか、ENTER キーを押すだけで、セットアップを素早く進めることができます。
mysql_secure_installation
- さらに、次のコマンドでPHP情報ページを素早く作成できます。
echo "<?php phpinfo(); ?>" > /var/www/html/info.php
- 作成した PHP 情報ページを表示します。ブラウザーを開き、
http://{FloatingIPAddress}/info.php
に移動します。 ご使用の VSI の浮動 IP アドレスに置き換えます。 以下のイメージのようになります。

WordPress のインストールと構成
アプリケーションをインストールして LAMP スタックを体験します。 以下のステップでは、通常、Web サイトやブログの作成に使用される、オープン・ソースの WordPress プラットフォームをインストールします。 本番環境へのインストールに関する詳細および設定については WordPressを参照してください。
- 以下のコマンドを実行して、WordPress をインストールします。
apt install wordpress -y
- MySQL および PHP を使用するように WordPress を構成します。 以下のコマンドを実行して、テキスト・エディターを開き、ファイル
/etc/wordpress/config-localhost.php
を作成します。sensible-editor /etc/wordpress/config-localhost.php
- 以下の行をファイルにコピーし、yourPassword をご使用の MySQL データベース・パスワードに置き換えます。他の値は変更せずに使用します。 ファイルを保存して終了します。
<?php define('DB_NAME', 'wordpress'); define('DB_USER', 'wordpress'); define('DB_PASSWORD', 'yourPassword'); define('DB_HOST', 'localhost'); define('WP_CONTENT_DIR', '/usr/share/wordpress/wp-content'); ?>
mysql
プロンプトを開き、パスワードを入力します。mysql -u root -p
- 以下のコマンドを実行する際には yourPasswordにデータベースのパスワードを指定し、その他の値は変更しないでください。
CREATE DATABASE wordpress;
CREATE USER 'wordpress'@'localhost' IDENTIFIED BY 'yourPassword';
GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP,ALTER ON wordpress.* TO 'wordpress'@'localhost';
FLUSH PRIVILEGES;
mysql
プロンプトを終了します。exit
- WordPress インストールを Web サーバーの文書ルートに移動します。
ln -s /usr/share/wordpress /var/www/html/wordpress
mv /etc/wordpress/config-localhost.php /etc/wordpress/config-default.php
- WordPress セットアップを完了し、プラットフォームで公開します。 ブラウザを開き、
http://{FloatingIPAddress}/wordpress/wp-admin
にアクセスしてください。 ご使用のインスタンスの浮動 IP アドレスに置き換えます。 以下のイメージのようになります。WordPress サイト実行中
ドメインの構成
LAMP サーバーで既存のドメイン名を使用するには、VSI の浮動 IP アドレスを指すように A レコードを更新します。
サーバーのモニタリングおよびログ管理
サーバーの可用性と最適なユーザー・エクスペリエンスを確保するために、すべての実動サーバーでモニタリングが有効になっている必要があります。 分析のセントラル・ロケーションでの VSI のモニターとログのキャプチャーに使用できるいくつかのオプションがあります。
サーバー・モニタリング
IBM Cloud Monitoring サービスのインスタンスをセットアップした後、VSI インスタンスの CPU、ボリューム、メモリー、およびネットワークの使用量をモニターできます。 モニタリング・サービスを構成する場合は、Linux ホストのモニター資料で説明されているステップに従ってください。
サーバー・ロギング
IBM Cloudでシステムおよびアプリケーションのログを管理するために IBM Cloud Logsを作成することができます。
IBM Cloud Logs は、管理者、DevOps チーム、開発者に、ログ・データのフィルタリング、検索、およびテール、アラートの定義、そしてアプリケーションとシステムのログをモニターするカスタム・ビューの設計を行うための、拡張された機能を提供します
Linux用ログエージェントの管理」に記載されている手順に従ってください
Bring-Your-Own-Key (BYOK) 暗号化データ・ボリュームの構成 (オプション)
VSI はプロバイダー管理の 100 GB の暗号化済み ブート ・ボリュームで作成されていますが、その VSI を削除する場合は、保護するデータを移動してから VSI を削除する必要があります。 あるいは別の方法として、その VSI が削除されても持続できる データ ・ボリュームを作成して、新しい VSI に接続することもできます。 さらに、独自の鍵を使用してボリュームを暗号化することもできます。 それが望ましい結果である場合は、以下で説明する手順に従ってデータ・ボリュームを作成し、VSI に接続してください。
-
データ・ボリューム構成ファイルを作成します。
VOLUME_ID=$(ibmcloud is volume-create volume-lamp-1 10iops-tier $(ibmcloud target --output json | jq -r '.region.name')-1 --capacity 100 --json | jq -r '.id')
VPC では、お客様管理の暗号鍵を使用することもできます。 独自の暗号化キーを保管するには、次の2つのサービスのうちの1つを利用できます。(1)FIPS 140-2 レベル3の IBM Key Protect。 資料内の IBM Key Protect サービスのプロビジョニング に関するトピックを参照してください。(2) FIPS 140-2 レベル 4 サービス IBM Cloud Hyper Protect Crypto Services。資料内の IBM Cloud Hyper Protect Crypto Services の概説 のトピックを参照してください。 ボリュームの作成中に、使用する暗号鍵の CRN とともに
--encryption-key
パラメーターを指定できます。 -
すべてのインスタンスをリストし、インスタンス名に基づいてフィルタリングして、先に作成した VSI の ID をキャプチャーします。
VSI_ID=$(ibmcloud is instances --json | jq -r '.[] | select(.name == "vsi-lamp-1") | .id')
-
データ・ボリュームを既存の VSI に接続します。
ibmcloud is instance-volume-attachment-add attachment-data-1 $VSI_ID $VOLUME_ID --auto-delete false --json
-
SSH でサーバーに接続します。
ssh root@$FLOATING_IP
-
VSI 上で新しく作成したデータ・ボリュームを構成し、以下の各行を一度に 1 つずつ実行します。
new_bsv=$(echo $(parted -l 2>&1) | awk 'NR==1{print $2}' | sed 's/:$//') parted $new_bsv mklabel gpt parted -a opt $new_bsv mkpart primary ext4 0% 100% new_part=${new_bsv}1 mkfs.ext4 -L lamp-data ${new_part} mkdir /data mount ${new_part} /data echo "${new_part} /data ext4 defaults,relatime 0 0" | tee -a /etc/fstab mount -a
新規 /data ファイル・システムを使用するための Apache の構成
- Apache サービスを停止します
service apache2 stop
- Apache ディレクトリーを /var から /data に移動します
mv /var/www /data/
- 新しいロケーションへのリンクを作成します
ln -s /data/www /var/www
- Apache サービスを開始します
service apache2 start
新規 /data ファイル・システムを使用するための MySQL の構成
- MySQL サービスを停止します
service mysql stop
- MySQL ディレクトリーを /var から /data に移動します
mkdir /data/lib
mv /var/lib/mysql /data/lib/
- 新しいロケーションへのリンクを作成します
ln -s /data/lib/mysql /var/lib/mysql
- AppArmorに新しい場所のエイリアスを追加しないと AppArmorがアクセスをブロックします。
echo "alias /var/lib/mysql/ -> /data/lib/mysql/," >> /etc/apparmor.d/tunables/alias
- AppArmor サービスを再始動します
systemctl restart apparmor
- MySQL サービスを開始します
service mysql start
- ブラウザを開き、
http://{FloatingIPAddress}/wordpress
にアクセスしてください。 ご使用のインスタンスの浮動 IP アドレスに置き換えます。 新規データ・ボリュームを追加する前と同じように、WordPress ページにアクセスできるようになります。
VSI のサイズ変更 (オプション)
VSI は、VPC で使用可能な最小プロファイルの 1 つ (つまり、2 つの vCPU と 4GiB RAM) を使用して作成されました。 使用可能な vCPU および RAM の容量は、使用要件に応じて増減することができます。仮想サーバー・インスタンスのサイズ変更を参照してください。
-
すべてのインスタンスをリストし、インスタンス名に基づいてフィルタリングして、先に作成した VSI の ID をキャプチャーします。
VSI_ID=$(ibmcloud is instances --json | jq -r '.[] | select(.name == "vsi-lamp-1") | .id')
-
インスタンスを停止します。
ibmcloud is instance-stop $VSI_ID
-
インスタンスをサイズ変更します。
ibmcloud is instance-update $VSI_ID --profile cx2-4x8
コマンド
ibmcloud is instance-profiles
を発行して、代替プロファイルのリストを取得することができます。ただし、仮想サーバー・インスタンスのサイズ変更トピックにある現在/ターゲットのプロファイルに基づくサイズ変更に関する制限に注意してください。 -
インスタンスを開始します。
ibmcloud is instance-start $VSI_ID
-
VSI が適切なホストに配置されて開始されるまで数分待つ必要がある可能性があります。 ブラウザを開き、
http://{FloatingIPAddress}/wordpress
にアクセスしてください。 ご使用のインスタンスの浮動 IP アドレスに置き換えます。 サイズ変更する前と同じように、WordPress ページにアクセスできるようになります。
リソースを削除する
- VPC コンソールで 「浮動 IP」 をクリックし、次に VSI の IP アドレスをクリックしてから、アクション・メニューの 「解放」 を選択します。 IP アドレスを解放することを確認します。
- 次に、「仮想サーバー・インスタンス」 に切り替え、インスタンスを 「削除」 します。
- VSI が表示されなくなったら、「サブネット」 に切り替えます。 サブネットを削除します。
- サブネットが削除されたら、「VPC」 タブに切り替えて、VPC を削除します。
- オプションで作成したデータ・ボリュームが不要になった場合、「ブロック・ストレージ・ボリューム」 タブに切り替えて、ボリュームを削除します。
コンソールの使用時、リソース削除後の更新された状況情報を確認するためには、ブラウザーを最新表示しなければならない場合があります。
リソースによっては、即時に削除されずに保持される場合があります (デフォルトでは 7 日間)。 リソースを完全に削除して再利用することも、保存期間内に復元することもできます。 リソースの再利用を使用する方法については、この資料を参照してください。