VPC 中 LAMP 堆疊上的 PHP 網路應用程式
本指導教學可能會產生成本。 使用「成本估算器」根據您的預計用量生成成本估算。
本教學將引導您完成創建UbuntuL inux 虛擬伺服器 A 帕奇網頁伺服器,中號ySQL 資料庫和磷HP 腳本開啟IBM Cloud虛擬私有雲(VPC)基礎架構。 這種軟體組合 - 一般稱為 LAMP 堆疊- 通常用來提供網站和 Web 應用程式。 使用IBM Cloud VPC您將快速部署 LAMP 堆疊,並根據需要新增日誌記錄和監控。 為了體驗 LAMP 伺服器的運作,您也將安裝和設定免費的開放原始碼 WordPress 內容管理系統。
目標
- 在 VPC 中佈建虛擬伺服器實例 (VSI)。
- 安裝最新的 Apache、MySQL 和 PHP 軟體。
- 透過安裝和設定 WordPress 來託管網站或部落格。
- 配置記載及監視,以偵測中斷並監視慢速效能 (選用)。
- 調整 VSI 大小 (選用)。
- 一般使用者使用 Web 瀏覽器存取在 VPC 上執行的 LAMP 伺服器。
- VSI 配置為使用已加密 Block Storage 磁區中的資料 (選用)。
開始之前
本指導教學需要:
- IBM Cloud 計費帳戶,
- IBM Cloud CLI,
- IBM Cloud VPC 外掛程式 (
vpc-infrastructure),
- IBM Cloud VPC 外掛程式 (
terraform: 使用「基礎架構即程式碼」來佈建資源,jq以查詢 JSON 檔案,git以複製原始碼儲存庫,
您將在 開始使用解決方案指導教學 手冊中找到下載並安裝適用於您作業環境的這些工具的指示。 若要避免安裝這些工具,您可以使用 Cloud Shell。
建立服務
在本節中,您將使用 IBM Cloud Shell 和 IBM Cloud CLI 來佈建 VPC、子網路、安全群組和虛擬伺服器實例 (VSI)。 VSI 常常可應付需求高峰,之後可以 暫停或關閉電源,讓雲端環境完全符合您的基礎架構需求。
如果您偏好使用 Terraform 範本來產生這些資源,則可以使用這裡提供的範本: https://github.com/IBM-Cloud/vpc-tutorials/tree/master/vpc-lamp,並遵循 README.md中的指示。 此範本也可以在 Schematics中使用。
- 在登入 IBM Cloud 帳戶時,啟動 IBM Cloud Shell。
- 在 Shell 中,您會自動登入其中一個 IBM Cloud 區域,如果需要的話,您可以執行下列指令來切換至不同的區域:
ibmcloud target -r <region-name> -g <resource-group>
建立 SSH 金鑰
-
在 VPC 中,使用 SSH 金鑰來管理者存取 VSI,而不是密碼。 透過執行下列指令來建立 SSH 金鑰,並在提示時接受預設值。 如需 SSH 金鑰的相關資訊,請參閱文件 SSH 金鑰。
ssh-keygen -t rsa -b 4096上述指令會在
~/.ssh目錄內產生兩個檔案:id_rsa和id_rsa.pub。 您的 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,才能透過瀏覽器存取虛擬伺服器。 因為先前已在 Shell 變數中擷取它,所以您可以執行下列指令來取得浮動 IP 位址ssh root@$FLOATING_IPecho $FLOATING_IP,或執行ibmcloud is floating-ips --json並在結果中搜尋用來建立浮動 IPfip-lamp-1的名稱。 您也可以從 Web 主控台 找到伺服器的浮動 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 -vmysql -Vphp -v - 開啟
mysql提示。mysql - 執行下列指令,將您的密碼替換為 yourPassword。
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'yourPassword'; - 結束
mysql提示。exit - 執行下列 Script 來保護 MySQL 資料庫。 選擇最適合您喜好設定的選項,或直接按 ENTER 鍵以快速逐步完成設定。
mysql_secure_installation - 此外,您可以使用下列指令快速建立 PHP 資訊頁面。
echo "<?php phpinfo(); ?>" > /var/www/html/info.php - 檢視您建立的 PHP 資訊頁面:開啟瀏覽器並移至
http://{FloatingIPAddress}/info.php。 代入 VSI 的浮動 IP 位址。 它看起來類似於下圖。
安裝及配置 WordPress
藉由安裝應用程式來體驗 LAMP 堆疊。 下列步驟將安裝開放程式碼 WordPress 平台,該平台通常用於建立網站和部落格。 有關生產安裝的詳細資訊和設定,請參閱 WordPress 文件。
- 執行下列指令安裝 Wordpress。
apt install wordpress -y - 將 WordPress 配置為使用 MySQL 和 PHP。 執行下列指令開啟文字編輯器,並建立
/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/wordpressmv /etc/wordpress/config-localhost.php /etc/wordpress/config-default.php - 完成 WordPress 設定,並在平台上發佈。 開啟瀏覽器,前往
http://{FloatingIPAddress}/wordpress/wp-admin。 代入您的實例的浮動 IP 位址。 它看起來應該與下圖相似。
WordPress 網站正在運行
配置網域
若要在 LAMP 伺服器上使用現有的網域名稱,請更新 A 記錄以指向 VSI 的浮動 IP 位址。
伺服器監視及日誌管理
為了確保伺服器可用性和最佳使用者體驗,應在每個正式作業伺服器上已啟用監視。 有數個選項可用來監視 VSI,並在集中位置擷取日誌以進行分析。
伺服器監視
您可以在設定 IBM Cloud Monitoring 服務的實體後,監控 VSI 實體的 CPU、容量、記憶體和網路使用量。 如果您要配置監視服務,請遵循 監視 Linux 主機 文件中概述的步驟。
伺服器記載
您可以建立一個IBM Cloud Logs實例來管理IBM Cloud中的系統和應用程式日誌。
IBM Cloud Logs 為管理員、DevOps 團隊和開發人員提供進階功能,以過濾、搜尋和追蹤日誌資料、定義警示,以及設計自訂檢視來監控應用程式和系統日誌
請按照 管理Linux的日誌記錄代理程式 中概述的說明進行操作
配置自帶金鑰 (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 中,您也可以選擇使用客戶管理的加密金鑰。 若要儲存您自己的加密金鑰,您可以使用下列兩個可用服務之一: (1) FIPS 140-2 Level 3 服務 IBM Key Protect。 請參閱文件中的 佈建 IBM Key Protect 服務 主題。(2) FIPS 140-2 Level 4 服務 IBM Cloud Hyper Protect Crypto Services,請參閱文件中的 開始使用 IBM Cloud Hyper Protect Crypto Services 主題。 建立磁區時,您可以將
--encryption-key參數與 CRN 一起指定給您要使用的加密金鑰。 -
透過列出所有實例並根據實例名稱進行過濾,擷取先前建立之 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 上配置新建立的資料磁區,一次執行一行以下。
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
配置 Apache 以使用新的 /data 檔案系統
- 停止 Apache 服務
service apache2 stop - 將 Apache 目錄從 /var 移至 /data
mv /var/www /data/ - 建立新位置的鏈結
ln -s /data/www /var/www - 啟動 Apache 服務
service apache2 start
配置 MySQL 以使用新的 /data 檔案系統
- 停止 MySQL 服務
service mysql stop - 將 MySQL 目錄從 /var 移至 /data
mkdir /data/libmv /var/lib/mysql /data/lib/ - 建立新位置的鏈結
ln -s /data/lib/mysql /var/lib/mysql - 將新位置的別名加入到 應用裝甲,否則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 中可用的其中一個最小設定檔 (即 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 主控台 中,按一下 Floating IPs(浮動 IP),然後按一下 VSI 的 IP 位址,然後在動作功能表中選擇 Release(釋放)。 確認您想要釋放 IP 位址。
- 接下來,切換至 虛擬伺服器實例,刪除 您的實例。
- VSI 消失之後,切換至子網路。 刪除子網路。
- 刪除子網路後,切換到 VPC 標籤,並刪除您的 VPC。
- 如果您已建立選用資料磁區,且不再需要它,請切換至 區塊儲存空間磁區 標籤並刪除磁區。
使用主控台時,您可能需要重新整理瀏覽器,才能在刪除資源之後看到更新的狀態資訊。
視資源而定,可能不會立即刪除它,但會保留 (依預設會保留 7 天)。 您可以透過永久刪除資源或在保留期間內還原資源來收回資源。 請參閱本文件,以瞭解如何 使用資源收回。