

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

# 教學課程：在 AL1 上安裝 LAMP 伺服器
<a name="install-LAMP"></a>

**注意**  
 不再支援 Amazon Linux 1 (AL1，先前稱為 Amazon Linux AMI)。本指南僅供參考。

下列程序可協助您在 AL1 執行個體上安裝具有 PHP 和 MySQL 支援的 Apache Web 伺服器 （有時稱為 LAMP Web 伺服器或 LAMP 堆疊）。您可以使用此伺服器託管一個靜態網站或部署一個將資訊讀取和寫入資料庫的動態 PHP 應用程式。

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

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

**Topics**
+ [

## 步驟 1：準備 LAMP 伺服器
](#prepare-lamp-server-alami)
+ [

## 步驟 2：測試您的 LAMP 伺服器
](#test-lamp-server-alami)
+ [

## 步驟 3：保護資料庫伺服器
](#secure-mysql-lamp-server)
+ [

## 步驟 4：(選用) 安裝 phpMyAdmin
](#install-phpmyadmin-lamp-server-alami)
+ [

## 疑難排解
](#lamp-troubleshooting-alami)
+ [

## 相關主題
](#lamp-more-info-alami)

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

**先決條件**  
本教學假設您已使用 Amazon Linux AMI 啟動一個新的執行個體，並使用可從網際網路連線的公有 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)。

**使用 Amazon Linux AMI 安裝及啟動 LAMP Web 伺服器**

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

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

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

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

1. 現在您的執行個體是最新的，您即可以安裝 Apache Web 伺服器、MySQL 和 PHP 軟體套件。
**重要**  
有些應用程式可能與下列建議軟體環境不相容。安裝這些套件之前，請先檢查您的 LAMP 應用程式與它們是否相容。如有問題，您可能需要安裝替代環境。如需詳細資訊，請參閱 [我想要在伺服器上執行的應用程式軟體和已安裝的 PHP 版本或其他軟體不相容](#software-versions-alami) 

   使用 **yum install** 命令可以同時安裝多個軟體套件和所有相關的依存項目。

   ```
   [ec2-user ~]$ sudo yum install -y httpd24 php72 mysql57-server php72-mysqlnd
   ```

   如果您收到錯誤 `No package package-name available`，則執行個體並未使用 Amazon Linux AMI 啟動 （可能是您使用 AL2)。您可以使用下列命令來檢視您的 Amazon Linux 版本。

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

1. 啟動 Apache Web 伺服器。

   ```
   [ec2-user ~]$ sudo service httpd start
   Starting httpd:                                            [  OK  ]
   ```

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

   ```
   [ec2-user ~]$ sudo chkconfig httpd on
   ```

   當您成功使用 **chkconfig** 命令啟用服務時，它不會提供任何確認訊息。

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

   ```
   [ec2-user ~]$ chkconfig --list httpd
   httpd           0:off   1:off   2:on    3:on    4:on    5:on    6:off
   ```

   其中，**httpd** 在執行級別 2、3、4 以及 5 中的狀態為 `on` （這是您想要看到的）。

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 地址)。您可以使用 Amazon EC2 主控台取得執行個體的公有 DNS 地址。如果 `/var/www/html` 中沒有內容，您應該會看到 Apache 測試頁。當您將內容新增至文件根目錄時，您的內容會出現在您執行個體的公有 DNS 地址，而不是此測試頁面。

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

   如果您未使用 Amazon Linux，則可能也需要在您的執行個體上設定防火牆以允許這些連線。如需如何設定防火牆的詳細資訊，請參閱針對您特定散發的文件。

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

```
[ec2-user ~]$ ls -l /var/www
total 16
drwxr-xr-x 2 root root 4096 Jul 12 01:00 cgi-bin
drwxr-xr-x 3 root root 4096 Aug  7 00:02 error
drwxr-xr-x 2 root root 4096 Jan  6  2012 html
drwxr-xr-x 3 root root 4096 Aug  7 00:02 icons
drwxr-xr-x 2 root root 4096 Aug  7 21:17 noindex
```

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

**設定檔案許可**

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 wheel apache
      ```

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
   [ec2-user ~]$ 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 的相關資訊，請參閱 [教學課程：在 Amazon Linux AMI 上設定 SSL/TLS](SSL-on-amazon-linux-ami.md)。

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

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

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

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

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

   如果您嘗試執行此命令時出現拒絕許可錯誤，請嘗試登出並重新登入，以取得您在 [步驟 1：準備 LAMP 伺服器](#prepare-lamp-server-alami) 設定的適當群組許可。

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

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

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

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

   ```
   [ec2-user ~]$ sudo yum list installed httpd24 php72 mysql57-server php72-mysqlnd
   Loaded plugins: priorities, update-motd, upgrade-helper
   Installed Packages
   httpd24.x86_64                          2.4.25-1.68.amzn1                    @amzn-updates
   mysql56-server.x86_64                   5.6.35-1.23.amzn1                    @amzn-updates
   php70.x86_64                            7.0.14-1.20.amzn1                    @amzn-updates
   php70-mysqlnd.x86_64                    7.0.14-1.20.amzn1                    @amzn-updates
   ```

   如果您的輸出未列出所需之任何套件，請使用 **sudo yum install *package*** 命令來安裝。

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

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

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

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

**保護資料庫伺服器**

1. 啟動 MySQL 伺服器。

   ```
   [ec2-user ~]$ sudo service mysqld start
   Initializing MySQL database:  
   ...
   
   PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER !
   ...
   
   Starting mysqld:                                           [  OK  ]
   ```

1. 執行 **mysql\$1secure\$1installation**。

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

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

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

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

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

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

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

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

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

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

   ```
   [ec2-user ~]$ sudo service mysqld stop
   Stopping mysqld:                                           [  OK  ]
   ```

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

   ```
   [ec2-user ~]$ sudo chkconfig mysqld on
   ```

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

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

**安裝 phpMyAdmin**

[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)。
**注意**  
Amazon Linux 套件管理系統目前不支援在 PHP 7 環境中自動安裝 phpMyAdmin。本教學說明如何手動安裝 phpMyAdmin。

1. 使用 SSH 登入您的 EC2 執行個體。

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

   ```
   [ec2-user ~]$ sudo yum install php72-mbstring.x86_64 -y
   ```

1. 重新啟動 Apache。

   ```
   [ec2-user ~]$ sudo service httpd restart
   Stopping httpd:                                            [  OK  ]
   Starting httpd:                                            [  OK  ]
   ```

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

   ```
   [ec2-user ~]$ cd /var/www/html
   [ec2-user 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 service mysqld start
   Starting mysqld:                                           [  OK  ]
   ```

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/al1/ug/images/phpmyadmin_login.png)

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

   必須先設定您的安裝，才能將其投入使用。若要設定 phpMyAdmin，您可以參考 [manually create a configuration file](https://docs.phpmyadmin.net/en/latest/setup.html#manually-creating-the-file)、[use the setup console](https://docs.phpmyadmin.net/en/latest/setup.html#using-setup-script) 或結合這兩種方法。

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

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

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

### 我無法使用 Web 瀏覽器連線至我的伺服器。
<a name="is-apache-on-alami"></a>

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

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

  ```
  [ec2-user ~]$ chkconfig --list httpd
  httpd           0:off   1:off   2:on    3:on    4:on    5:on    6:off
  ```

  其中，**httpd** 在執行級別 2、3、4 以及 5 中的狀態為 `on` （這是您想要看到的）。

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

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

### 我想要在伺服器上執行的應用程式軟體和已安裝的 PHP 版本或其他軟體不相容
<a name="software-versions-alami"></a>

本教學建議安裝最新版的 Apache HTTP Server、PHP 和 MySQL。安裝其他 LAMP 應用程式之前，請先檢查其需求，確認它與您已安裝的環境相容。如果不支援最新版的 PHP，您可以 (絕對安全) 降級至之前支援的組態。您也可以平行安裝多個版本的 PHP，這可花最少的精力解決某些相容性問題。如需在多個安裝的 PHP 版本中設定偏好設定的資訊，請參閱 [Amazon Linux AMI 2016.09 版本備註](https://aws.amazon.com/amazon-linux-ami/2016.09-release-notes/)。

**如何降級**  
經過全面測試的上一版教學呼叫下列核心 LAMP 套件：
+ `httpd24`
+ `php56`
+ `mysql55-server`
+ `php56-mysqlnd`

如果您已按照本教學一開始的建議安裝最新的套件，您必須先解除安裝這些套件和其他相依性，如下所示：

```
[ec2-user ~]$ sudo yum remove -y httpd24 php72 mysql57-server php72-mysqlnd perl-DBD-MySQL57
```

接著，安裝替代環境：

```
[ec2-user ~]$ sudo yum install -y  httpd24 php56 mysql55-server php56-mysqlnd
```

如果稍後決定升級至建議環境，您必須先移除自訂的套件和相依性：

```
[ec2-user ~]$ sudo yum remove -y  httpd24 php56 mysql55-server php56-mysqlnd perl-DBD-MySQL56
```

現在可以依前文所述，安裝最新的套件。

## 相關主題
<a name="lamp-more-info-alami"></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 部落格](https://docs.aws.amazon.com/linux/al2/ug/hosting-wordpress.html)

如需本教學所使用的命令和軟體之詳細資訊，請參閱下列網頁：
+ Apache Web 伺服器：[http://httpd.apache.org/](http://httpd.apache.org/)
+ MySQL 資料庫伺服器：[http://www.mysql.com/](http://www.mysql.com/)
+ 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 做為子網域的 DNS 服務，而不遷移父系網域](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/creating-migrating.html)。 * *