

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 教學課程：在 AL2 上安裝 LAMP 伺服器
<a name="ec2-lamp-amazon-linux-2"></a>

下列程序可協助您在 AL2 執行個體 （有時稱為 LAMP Web 伺服器或 LAMP 堆疊） 上安裝支援 PHP 和 [MariaDB](https://mariadb.org/about/) （社群開發的 MySQL 分支） 的 Apache Web 伺服器。您可以使用此伺服器託管一個靜態網站或部署一個將資訊讀取和寫入資料庫的動態 PHP 應用程式。

**重要**  
如果您要在不同的發行版 (例如 Ubuntu 或 Red Hat Enterprise Linux) 上設定 LAMP Web 伺服器，本教學不適用於您。對於 AL2023，請參閱[在 AL2023 上安裝 LAMP 伺服器](https://docs.aws.amazon.com//linux/al2023/ug/ec2-lamp-amazon-linux-2023.html)。若為 Ubuntu，請參閱以下 Ubuntu 社群文件：[ApacheMySQLPHP](https://help.ubuntu.com/community/ApacheMySQLPHP)。若是其他發行版，請參閱其特定文件。

**選項：使用自動化完成此教學課程**  
若要使用 AWS Systems Manager 自動化而非下列任務完成本教學課程，請執行 [AWS Docs-InstallALAMPServer-AL2](https://console.aws.amazon.com/systems-manager/automation/execute/AWSDocs-InstallALAMPServer-AL2) Automation 文件。

**Topics**
+ [步驟 1：準備 LAMP 伺服器](#prepare-lamp-server)
+ [步驟 2：測試您的 LAMP 伺服器](#test-lamp-server)
+ [步驟 3：保護資料庫伺服器](#secure-mariadb-lamp-server)
+ [步驟 4：(選用) 安裝 phpMyAdmin](#install-phpmyadmin-lamp-server)
+ [疑難排解](#lamp-troubleshooting)
+ [相關主題](#lamp-more-info)

## 步驟 1：準備 LAMP 伺服器
<a name="prepare-lamp-server"></a>

**先決條件**
+ 本教學課程假設您已使用 AL2 啟動新的執行個體，並具有可從網際網路連線的公有 DNS 名稱。如需詳細資訊，請參閱《*Amazon EC2 使用者指南*》中的[啟動執行個體](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-launch-instance-wizard.html)。您也必須先設定您的安全群組，允許 SSH (連接埠 22)、HTTP (連接埠 80) 和 HTTPS (連接埠 443) 連線。如需這些先決條件的詳細資訊，請參閱《*Amazon EC2 使用者指南*》中的[安全群組規則](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/security-group-rules.html)。
+ 下列程序會安裝 AL2 上可用的最新 PHP 版本，目前為 `php8.2`。若您預計不使用此教學所提及的 PHP 應用程式，改使用其他 PHP 應用程式，您應檢查其與 `php8.2` 的相容性。<a name="install_apache-2"></a>

**準備 LAMP 伺服器**

1. [連線到您的執行個體](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/connect-to-linux-instance.html)。

1. 為確保所有軟體套件皆為最新版本，請對您的執行個體執行快速軟體更新。本程序可能需費時幾分鐘，但確定您擁有最新的安全更新和錯誤修正至關重要。

   `-y` 選項不要求確認就會安裝更新。如果您要先檢查更新再安裝，則可以略過此選項。

   ```
   [ec2-user ~]$ sudo yum update -y
   ```

1. 安裝 `mariadb10.5` Amazon Linux Extras 儲存庫，以取得 MariaDB 套件的最新版本。

   ```
   [ec2-user ~]$ sudo amazon-linux-extras install mariadb10.5
   ```

   如果出現錯誤，顯示 `sudo: amazon-linux-extras: command not found`，則代表執行個體不是以 Amazon Linux 2 AMI 啟動 (您可能是使用 Amazon Linux AMI)。您可以使用下列命令來檢視您的 Amazon Linux 版本。

   ```
   cat /etc/system-release
   ```

1. 安裝 `php8.2` Amazon Linux Extras 儲存庫以取得最新版本的 AL2 PHP套件。

   ```
   [ec2-user ~]$ sudo amazon-linux-extras install php8.2
   ```

1. 現在您的執行個體是最新版本，可安裝 Apache Web 伺服器、PHP 和 MariaDB 軟體套件。使用 yum install 命令可以同時安裝多個軟體套件和所有相關的依存項。

   ```
   [ec2-user ~]$ sudo yum install -y httpd
   ```

   您可以使用下列命令來檢視這些套件的目前版本：

   ```
   yum info {{package_name}}
   ```

1. 啟動 Apache Web 伺服器。

   ```
   [ec2-user ~]$ sudo systemctl start httpd
   ```

1.  使用 **systemctl** 命令來設定 Apache Web 伺服器在每次系統開機時啟動。

   ```
   [ec2-user ~]$ sudo systemctl enable httpd
   ```

   要確認 **httpd** 已啟用，您可以執行以下命令：

   ```
   [ec2-user ~]$ sudo systemctl is-enabled httpd
   ```

1. 如果您尚未這樣做，請新增安全規則以允許對內 HTTP (連接埠 80) 連線到您的執行個體。根據預設，**launch-wizard-{{N}}** 安全群組在初始化期間已針對您的執行個體設定完畢。該群組包含允許 SSH 連線的規則。

   1. 在 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 開啟 Amazon EC2 主控台。

   1. 選取 **Instances (執行個體)** 然後選取您的執行個體。

   1. 在 **Security ( 安全性)** 標籤上，檢視對內規則。您應該會看到下列規則：

      ```
      Port range   Protocol     Source
      22           tcp          0.0.0.0/0
      ```
**警告**  
使用 `0.0.0.0/0` 可讓所有 IPv4 地址使用 SSH 存取您的執行個體。通常在測試環境中短暫進行此作業是沒有問題的，但用在生產環境則不安全。在生產環境中，您應只授權特定 IP 地址或特定範圍的地址存取您的執行個體。

   1. 選擇安全群組的連結。使用[新增規則至安全群組](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/working-with-security-groups.html#adding-security-group-rule)中的程序，新增具有下列值的新傳入安全規則：
      + **類型**：HTTP
      + **Protocol (通訊協定)**：TCP
      + **Port Range (連接埠範圍)**：80
      + **Source (來源)**：自訂

1. 測試您的 Web 伺服器。在 Web 瀏覽器中，輸入執行個體的公有 DNS 地址 (或公有 IP 地址)。如果 `/var/www/html` 中沒有內容，您應該會看到 Apache 測試頁。您可以使用 Amazon EC2 主控台取得執行個體的公有 DNS (查看 **Public DNS (公有 DNS)** 欄；如果此欄為隱藏，請選擇 **Show/Hide Columns (顯示/隱藏欄)** (齒輪狀圖示) 並選擇 **Public DNS (公有 DNS)**)。

   確認執行個體的安全性群組包含允許連接埠 80 上的 HTTP 流量的規則。如需詳細資訊，請參閱[新增規則至安全群組](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/working-with-security-groups.html#adding-security-group-rule)。
**重要**  
如果您未使用 Amazon Linux，則可能也需要在您的執行個體上設定防火牆以允許這些連線。如需如何設定防火牆的詳細資訊，請參閱針對您特定散發的文件。  
![伺服器的測試會顯示 Apache 測試頁面。](http://docs.aws.amazon.com/zh_tw/linux/al2/ug/images/apache_test_page_al2_2.4.png)

Apache **httpd** 提供保存在稱為 Apache 文件根目錄中的檔案。Amazon Linux Apache 文件根目錄是 `/var/www/html`，預設情況下由根擁有。

若要允許 `ec2-user` 帳戶操作此目錄中的檔案，您必須修改目錄的所有權和許可。有多種方法可以達成這件任務。在本教學中，您會將 `ec2-user` 新增至 `apache` 群組，以向 `apache` 群組授予 `/var/www` 目錄的所有權，並指派寫入許可。<a name="setting-file-permissions-2"></a>

**設定檔案許可**

1. 將您的使用者 (在此案例中為 `ec2-user`) 新增至 `apache` 群組。

   ```
   [ec2-user ~]$ sudo usermod -a -G apache {{ec2-user}}
   ```

1. 登出並重新登入，以取得新的群組並驗證您的成員資格。

   1. 登出 (使用 **exit** 命令或關閉終端機視窗)：

      ```
      [ec2-user ~]$ exit
      ```

   1. 若要在 `apache` 群組中驗證您的會員資格，請重新連線至您的執行個體，然後執行下列命令：

      ```
      [ec2-user ~]$ groups
      ec2-user adm wheel apache systemd-journal
      ```

1. 將 `/var/www` 的群組所有權及其內容變更為 `apache` 群組。

   ```
   [ec2-user ~]$ sudo chown -R ec2-user:apache /var/www
   ```

1. 若要新增群組寫入許可並在將來的子目錄上設定群組 ID，請變更 `/var/www` 及其子目錄的目錄許可。

   ```
   [ec2-user ~]$ sudo chmod 2775 /var/www && find /var/www -type d -exec sudo chmod 2775 {} \;
   ```

1. 若要新增群組寫入許可，請以遞迴方式變更 `/var/www` 及其子目錄的檔案許可：

   ```
   [ec2-user ~]$ find /var/www -type f -exec sudo chmod 0664 {} \;
   ```

現在，`ec2-user` (以及 `apache` 群組未來的任何成員) 可以新增、刪除和編輯 Apache 文件根目錄中的檔案，所以您可以新增內容 (例如靜態網站或 PHP 應用程式)。

**保護您的 Web 伺服器 (選擇性)**  
執行 HTTP 通訊協定的 Web 伺服器不會為其傳送或接收的資料提供傳輸安全性。當您使用 Web 瀏覽器連線到 HTTP 伺服器時，您前往的 URL、您收到的網頁內容以及您提交的任何 HTML 表單內容 (包括密碼)，網路路徑的任何一處的竊聽者都可以看到。保護您的 Web 伺服器的最佳實務是安裝對 HTTPS (HTTP Secure) 的支援，HTTPS 使用 SSL/TLS 加密保護您的資料。

如需在伺服器上啟用 HTTPS 的相關資訊，請參閱 [教學課程：在 AL2 上設定 SSL/TLS](SSL-on-amazon-linux-2.md)。

## 步驟 2：測試您的 LAMP 伺服器
<a name="test-lamp-server"></a>

如果伺服器已安裝且正在執行，且檔案許可設定正確，則您的 `ec2-user` 帳戶應該能夠在可透過網際網路使用的 `/var/www/html` 目錄中建立 PHP 檔案。

**測試您的 LAMP 伺服器**

1. 在 Apache 文件根資料夾中建立 PHP 檔案。

   ```
   [ec2-user ~]$ echo "<?php phpinfo(); ?>" > /var/www/html/phpinfo.php
   ```

   如果您嘗試執行此命令時出現拒絕許可錯誤，請嘗試登出並重新登入，以取得您在 [設定檔案許可](#setting-file-permissions-2) 設定的適當群組許可。

1. 在 Web 瀏覽器中，輸入您剛才建立的檔案 URL。此 URL 為您執行個體的公有 DNS 地址，其後跟隨斜線和檔案名稱。例如：

   ```
   http://{{my.public.dns.amazonaws.com}}/phpinfo.php
   ```

   您現在應該會看見 PHP 資訊頁面：  
![LAMP 伺服器的測試會顯示 PHP 資訊頁面。](http://docs.aws.amazon.com/zh_tw/linux/al2/ug/images/phpinfo7.2.10.png)

   如果你未看見此頁面，請確認 `/var/www/html/phpinfo.php` 檔案在前述步驟中正確建立。您也可以使用下列命令來確認已安裝所有必要的套件。

   ```
   [ec2-user ~]$ sudo yum list installed httpd mariadb-server php-mysqlnd
   ```

   如果您的輸出未列出所需之任何套件，請使用 **sudo yum install {{package}}** 命令來安裝。另請確認在 **amazon-linux-extras** 命令的輸出中已啟用 `php7.2` 和 `lamp-mariadb10.2-php7.2` extras。

1. 刪除 `phpinfo.php` 檔案。雖然這可能是有用的資訊，但基於安全因素，您不應將其廣播至網際網路。

   ```
   [ec2-user ~]$ rm /var/www/html/phpinfo.php
   ```

現在您應擁有功能齊全的 LAMP Web 伺服器。如果您將內容新增至 `/var/www/html` 的文件根目錄，則應該可以在執行個體的公有 DNS 地址檢視該內容。

## 步驟 3：保護資料庫伺服器
<a name="secure-mariadb-lamp-server"></a>

MariaDB 伺服器的預設安裝有幾項非常適合測試和開發的功能，但針對生產伺服器應將其停用或移除。**mysql\_secure\_installation** 命令將引導您完成設定根目錄密碼並從安裝中移除不安全功能的程序。即使您不打算使用 MariaDB 伺服器，我們也建議您執行此程序。<a name="securing-maria-db"></a>

**保護 MariaDB 伺服器**

1. 啟動 MariaDB 伺服器。

   ```
   [ec2-user ~]$ sudo systemctl start mariadb
   ```

1. 執行 **mysql\_secure\_installation**。

   ```
   [ec2-user ~]$ sudo mysql_secure_installation
   ```

   1. 請在系統提示時，輸入根帳戶的密碼。

      1. 輸入目前的根密碼。根據預設，根帳戶並未設定密碼。按 Enter。

      1. 輸入 **Y** 來設定密碼，然後輸入兩次安全密碼。如需建立安全密碼的詳細資訊，請參閱 [https://identitysafe.norton.com/password-generator/](https://identitysafe.norton.com/password-generator/)。請確保此密碼存放於安全處。

         為 MariaDB 設定根密碼僅是確保資料庫安全的最基本措施。在建置或安裝資料庫驅動的應用程式時，通常會為該應用程式建立資料庫服務使用者，並避免使用根帳戶進行資料庫管理以外的任何作業。

   1. 輸入 **Y** 來移除匿名使用者帳戶。

   1. 輸入 **Y** 來停用遠端根登入。

   1. 輸入 **Y** 來移除測試資料庫。

   1. 輸入 **Y** 來載入使用者權限資料表並儲存您的變更。

1. (選用) 如果您不打算立即使用 MariaDB 伺服器，請將其停止。再次需要時，您可以將其重啟。

   ```
   [ec2-user ~]$ sudo systemctl stop mariadb
   ```

1. (選用) 如果您希望 MariaDB 伺服器在每次系統開機時啟動，請輸入下列命令。

   ```
   [ec2-user ~]$ sudo systemctl enable mariadb
   ```

## 步驟 4：(選用) 安裝 phpMyAdmin
<a name="install-phpmyadmin-lamp-server"></a>

[phpMyAdmin](https://www.phpmyadmin.net/) 是一個 Web 型的資料庫管理工具，可用於檢視和編輯 EC2 執行個體上的 MySQL 資料庫。請遵循下列步驟在您的 Amazon Linux 執行個體上安裝並設定 `phpMyAdmin`。

**重要**  
我們不建議使用 `phpMyAdmin` 來存取 LAMP 伺服器，除非您在 Apache 中啟用了 SSL/TLS；否則，您的資料庫管理員密碼和其他資料將透過網際網路不安全傳輸。如需開發人員的安全性建議，請參閱[保護您的 phpMyAdmin 安裝](https://docs.phpmyadmin.net/en/latest/setup.html#securing-your-phpmyadmin-installation)。如需有關在 EC2 執行個體上保護 Web 伺服器的一般資訊，請參閱[教學課程：在 AL2 上設定 SSL/TLS](SSL-on-amazon-linux-2.md)。

**安裝 phpMyAdmin**

1. 安裝所需的依存項目。

   ```
   [ec2-user ~]$ sudo yum install php-mbstring php-xml -y
   ```

1. 重新啟動 Apache。

   ```
   [ec2-user ~]$ sudo systemctl restart httpd
   ```

1. 重新啟動 `php-fpm`。

   ```
   [ec2-user ~]$ sudo systemctl restart php-fpm
   ```

1. 在 `/var/www/html` 中導覽至 Apache 文件根。

   ```
   [ec2-user ~]$ cd /var/www/html
   ```

1. 從 [https://www.phpmyadmin.net/downloads](https://www.phpmyadmin.net/downloads) 選取最新 phpMyAdmin 版本的來源套件。若要直接將檔案下載到您的執行個體，請複製連結並將其貼入 **wget** 命令，如下所示：

   ```
   [ec2-user html]$ wget {{https://www.phpmyadmin.net/downloads/phpMyAdmin-latest-all-languages.tar.gz}}
   ```

1. 以下列命令建立 `phpMyAdmin` 資料夾，並將套件擷取至該資料夾中。

   ```
   [ec2-user html]$ mkdir phpMyAdmin && tar -xvzf {{phpMyAdmin-latest-all-languages.tar.gz}} -C phpMyAdmin --strip-components 1
   ```

1. 刪除 {{phpMyAdmin-latest-all-languages.tar.gz}} tarball。

   ```
   [ec2-user html]$ rm {{phpMyAdmin-latest-all-languages.tar.gz}}
   ```

1.  (選用) 如果 MySQL 伺服器未執行，請現在將其啟動。

   ```
   [ec2-user ~]$ sudo systemctl start mariadb
   ```

1. 在 Web 瀏覽器中，輸入 phpMyAdmin 安裝的 URL。此 URL 為您執行個體的公有 DNS 地址 (或公有 IP 地址)，其後跟隨斜線和您安裝目錄的檔案名稱。例如：

   ```
   http://{{my.public.dns.amazonaws.com}}/phpMyAdmin
   ```

   您現在應該會看見 phpMyAdmin 登入頁面：  
![輸入 phpMyAdmin 安裝 URL 的結果是 phpMyAdmin 登入畫面。](http://docs.aws.amazon.com/zh_tw/linux/al2/ug/images/phpmyadmin_login.png)

1. 使用您之前建立的 `root` 使用者名稱和 MySQL 根密碼登入至您的 phpMyAdmin 安裝。

   必須先設定您的安裝，才能將其投入使用。我們建議您從手動建立組態檔案開始，如下所示：

   1. 若要從最小的組態檔開始，請使用您最愛的文字編輯器建立新檔案，然後將 `config.sample.inc.php` 的內容複製到其中。

   1. 將該檔案儲存為包含 `config.inc.php` 的 phpMyAdmin 目錄中的 `index.php`。

   1. 如需任何其他設定，請參閱 phpMyAdmin 安裝說明的 [使用安裝指令碼](https://docs.phpmyadmin.net/en/latest/setup.html#using-the-setup-script)一節中有關檔案建立後的說明。

    如需 phpMyAdmin 的資訊，請參閱 [phpMyAdmin User Guide](http://docs.phpmyadmin.net/en/latest/user.html)。

## 疑難排解
<a name="lamp-troubleshooting"></a>

本節提供解決設定新 LAMP 伺服器時可能遇到之常見問題的建議。

### 我無法使用 Web 瀏覽器連線至我的伺服器
<a name="is_apache_on"></a>

請執行下列檢查以查看您的 Apache Web 伺服器是否正在執行且可存取。
+ **Web 伺服器是否正在執行？**

  要確認 **httpd** 已啟用，您可以執行以下命令：

  ```
  [ec2-user ~]$ sudo systemctl is-enabled httpd
  ```

  如果 **httpd** 程序未執行，請重複 [準備 LAMP 伺服器](#install_apache-2)所述的步驟。
+ **防火牆是否設定正確？**

  確認執行個體的安全性群組包含允許連接埠 80 上的 HTTP 流量的規則。如需詳細資訊，請參閱[新增規則至安全群組](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/working-with-security-groups.html#adding-security-group-rule)。

### 我無法使用 HTTPS 連線至我的伺服器
<a name="is-https-enabled"></a>

請執行下列檢查以查看您的 Apache Web 伺服器是否設為支援 HTTPS。
+ **Web 伺服器是否正確設定？**

  安裝 Apache 後，伺服器即針對 HTTP 流量進行設定。若要支援 HTTPS，請在伺服器上啟用 TLS 並安裝 SSL 憑證。如需相關資訊，請參閱[教學課程：在 AL2 上設定 SSL/TLS](SSL-on-amazon-linux-2.md)。
+ **防火牆是否設定正確？**

  確認執行個體的安全性群組包含允許連接埠 443 上的 HTTPS 流量的規則。如需詳細資訊，請參閱[將規則新增至安全群組](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/working-with-security-groups.html#adding-security-group-rule)。

## 相關主題
<a name="lamp-more-info"></a>

如需將檔案傳輸到執行個體或在 Web 伺服器上安裝 WordPress 部落格的詳細資訊，請參閱下列文件：
+ [使用 將檔案傳輸到您的 Linux 執行個體WinSCP](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/putty.html#Transfer_WinSCP)。
+ [使用 SCP用戶端將檔案傳輸至 Linux 執行個體](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/connect-linux-inst-ssh.html#linux-file-transfer-scp)。
+ [教學課程：在 AL2 上託管 WordPress 部落格](hosting-wordpress.md)

如需本教學所使用的命令和軟體之詳細資訊，請參閱下列網頁：
+ Apache Web 伺服器：[http://httpd.apache.org/](http://httpd.apache.org/)
+ MariaDB 資料庫伺服器：[https://mariadb.org/](https://mariadb.org/)
+ PHP 程式設計語言：[http://php.net/](http://php.net/)
+ `chmod` 命令：[https://en.wikipedia.org/wiki/Chmod](https://en.wikipedia.org/wiki/Chmod)
+ `chown` 命令：[https://en.wikipedia.org/wiki/Chown](https://en.wikipedia.org/wiki/Chown)

如需為您的 Web 伺服器註冊網域名稱或將現有網域名稱轉移至此主機的詳細資訊，請參閱*Amazon Route 53 開發人員指南*中的[建立和遷移網域和子網域至 Amazon Route 53](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/creating-migrating.html)。