在 Amazon Linux 上安裝 LAMP - Amazon Elastic Compute Cloud

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

在 Amazon Linux 上安裝 LAMP

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

重要

如果您要在不同的發行版 (例如 Ubuntu 或 Red Hat Enterprise Linux) 上設定 LAMP Web 伺服器,本教學不適用於您。若為 Amazon Linux 2,請參閱 在 Amazon Linux 2 上安裝 LAMP。如需 Ubuntu,請參閱下列社群文件:ApacheMySQL PHP。若是其他發行版,請參閱其特定文件。

選項:使用自動化完成此教學課程

若要使用「 AWS Systems Manager 自動化」(而非下列工作) 完成此教學課程,請執行文件AWS安裝伺服器自動化文件

步驟 1:準備 LAMP 伺服器

必要條件

本教學假設您已使用 Amazon Linux AMI 啟動一個新的執行個體,並使用可從網際網路連線的公有 DNS 名稱。如需詳細資訊,請參閱 步驟 1:啟動執行個體。您也必須先設定您的安全群組,允許 SSH (連接埠 22)、HTTP (連接埠 80) 和 HTTPS (連接埠 443) 連線。如需這些先決條件的詳細資訊,請參閱 授權 Linux 執行個體的傳入流量

使用 Amazon Linux AMI 安裝及啟動 LAMP Web 伺服器
  1. 連線到您的執行個體

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

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

    [ec2-user ~]$ sudo yum update -y
  3. 現在您的執行個體是最新的,您即可以安裝 Apache Web 伺服器、MySQL 和 PHP 軟體套件。

    重要

    有些應用程式可能與下列建議軟體環境不相容。安裝這些套件之前,請先檢查您的 LAMP 應用程式與它們是否相容。如有問題,您可能需要安裝替代環境。如需詳細資訊,請參閱 我想要在伺服器上執行的應用程式軟體和已安裝的 PHP 版本或其他軟體不相容

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

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

    如果收到錯誤 No package package-name available,則表示執行個體不是以 Amazon Linux AMI 啟動 (您可能是使用 Amazon Linux 2)。您可以使用下列命令來檢視您的 Amazon Linux 版本。

    cat /etc/system-release
  4. 啟動 Apache Web 伺服器。

    [ec2-user ~]$ sudo service httpd start Starting httpd: [ OK ]
  5. 使用 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 (這是您想要看到的)。

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

    1. https://console.aws.amazon.com/ec2/ 開啟 Amazon EC2 主控台。

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

    3. Security ( 安全性) 標籤上,檢視對內規則。您應該會看到下列規則:

      Port range Protocol Source 22 tcp 0.0.0.0/0
      警告

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

    4. 選擇安全群組的連結。使用 將規則新增至安全群組 中的程序,使用下列值新增入站安全規則:

      • 類型:HTTP

      • Protocol (通訊協定):TCP

      • Port Range (連接埠範圍):80

      • Source (來源):自訂

  7. 測試您的 Web 伺服器。在 Web 瀏覽器中,輸入執行個體的公有 DNS 地址 (或公有 IP 地址)。您可以使用 Amazon EC2 主控台取得執行個體的公有 DNS 地址。如果 /var/www/html 中沒有內容,您應該會看到 Apache 測試頁。當您將內容新增至文件根目錄時,您的內容會出現在您執行個體的公有 DNS 地址,而不是此測試頁面。

    確認執行個體的安全性群組包含允許連接埠 80 上的 HTTP 流量的規則。如需詳細資訊,請參閱 將規則新增至安全群組

    如果您未使用 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
  2. 登出並重新登入,以取得新的群組並驗證您的成員資格。

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

      [ec2-user ~]$ exit
    2. 若要在 apache 群組中驗證您的會員資格,請重新連線至您的執行個體,然後執行下列命令:

      [ec2-user ~]$ groups ec2-user wheel apache
  3. /var/www 的群組所有權及其內容變更為 apache 群組。

    [ec2-user ~]$ sudo chown -R ec2-user:apache /var/www
  4. 若要新增群組寫入許可並在將來的子目錄上設定群組 ID,請變更 /var/www 及其子目錄的目錄許可。

    [ec2-user ~]$ sudo chmod 2775 /var/www [ec2-user ~]$ find /var/www -type d -exec sudo chmod 2775 {} \;
  5. 若要新增群組寫入許可,請以遞迴方式變更 /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 上設定 SSL/TLS

步驟 2:測試您的 LAMP 伺服器

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

測試您的 LAMP Web 伺服器
  1. 在 Apache 文件根資料夾中建立 PHP 檔案。

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

    如果您嘗試執行此命令時出現拒絕許可錯誤,請嘗試登出並重新登入,以取得您在 步驟 1:準備 LAMP 伺服器 設定的適當群組許可。

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

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

    您現在應該會看見 PHP 資訊頁面:

    
                        LAMP 服務器的測試顯示了 PHP 信息頁面。

    如果你未看見此頁面,請確認 /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 命令來安裝。

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

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

步驟 3:保護資料庫伺服器

MySQL 伺服器的預設安裝有幾項非常適合測試和開發的功能,但針對生產伺服器應將其停用或移除。mysql_secure_installation 命令將引導您完成設定根目錄密碼並從安裝中移除不安全功能的程序。即使您不打算使用 MySQL 伺服器,我們也建議您執行此程序。

保護資料庫伺服器
  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 ]
  2. 執行 mysql_secure_installation

    [ec2-user ~]$ sudo mysql_secure_installation
    1. 請在系統提示時,輸入根帳戶的密碼。

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

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

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

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

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

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

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

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

    [ec2-user ~]$ sudo service mysqld stop Stopping mysqld: [ OK ]
  4. (選用) 如果您希望 MySQL 伺服器在每次系統開機時啟動,請輸入下列命令。

    [ec2-user ~]$ sudo chkconfig mysqld on

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

步驟 4:(可選)安裝 phpMyAdmin

若要安裝 phpMyAdmin

phpMyAdmin是一種基於 Web 的數據庫管理工具,可用於查看和編輯 EC2 實例上的 MySQL 數據庫。請按照以下步驟 phpMyAdmin 在您的 Amazon Linux 執行個體上安裝和設定。

重要

除非您已在 Apache 中啟用 SSL/TLS,否則我們不建議使用 phpMyAdmin 來存取 LAMP 伺服器;否則,您的資料庫管理員密碼和其他資料會以不安全的方式透過網際網路傳輸。如需開發人員提供的安全性建議,請參閱保護您的 phpMyAdmin 安裝

注意

Amazon Linux 套件管理系統目前不支援在 PHP 7 環境 phpMyAdmin 中的自動安裝。本教學課程說明如何 phpMyAdmin手動安裝。

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

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

    [ec2-user ~]$ sudo yum install php72-mbstring.x86_64 -y
  3. 重新啟動 Apache。

    [ec2-user ~]$ sudo service httpd restart Stopping httpd: [ OK ] Starting httpd: [ OK ]
  4. /var/www/html 中導覽至 Apache 文件根。

    [ec2-user ~]$ cd /var/www/html [ec2-user html]$
  5. 請從 https://www.phpmyadmin.net/downloads 中選取最新 phpMyAdmin 發行版本的原始碼套件。若要直接將檔案下載到您的執行個體,請複製連結並將其貼入 wget 命令,如下所示:

    [ec2-user html]$ wget https://www.phpmyadmin.net/downloads/phpMyAdmin-latest-all-languages.tar.gz
  6. 創建一個 phpMyAdmin 文件夾,並使用以下命令將包解壓縮到其中。

    [ec2-user html]$ mkdir phpMyAdmin && tar -xvzf phpMyAdmin-latest-all-languages.tar.gz -C phpMyAdmin --strip-components 1
  7. 刪除 phpMyAdmin-latest-all-languages .tar.gz 壓縮包。

    [ec2-user html]$ rm phpMyAdmin-latest-all-languages.tar.gz
  8. (選用) 如果 MySQL 伺服器未執行,請現在將其啟動。

    [ec2-user ~]$ sudo service mysqld start Starting mysqld: [ OK ]
  9. 在網頁瀏覽器中,輸入 phpMyAdmin 安裝的 URL。此 URL 為您執行個體的公有 DNS 地址 (或公有 IP 地址),其後跟隨斜線和您安裝目錄的檔案名稱。例如:

    http://my.public.dns.amazonaws.com/phpMyAdmin

    您應該會看到 phpMyAdmin 登入頁面:

    
                        輸入 phpMyAdmin 安裝 URL 的結果是 phpMyAdmin 登錄屏幕。
  10. 使用您先前建立的root使用者名稱和 MySQL 根密碼登入您的 phpMyAdmin 安裝。

    必須先設定您的安裝,才能將其投入使用。若要進行設定 phpMyAdmin,您可以手動建立組態檔案使用安裝主控台,或結合這兩種方法。

    若要取得有關使用的資訊 phpMyAdmin,請參閱phpMyAdmin 使用指南

疑難排解

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

我無法使用 Web 瀏覽器連線至我的伺服器。

請執行下列檢查以查看您的 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 伺服器 所述的步驟。

  • 防火牆是否設定正確?

    確認執行個體的安全性群組包含允許連接埠 80 上的 HTTP 流量的規則。如需詳細資訊,請參閱 將規則新增至安全群組

我想要在伺服器上執行的應用程式軟體和已安裝的 PHP 版本或其他軟體不相容

本教程建議您安裝大多數 up-to-date 版本的阿帕奇 HTTP 服務器,PHP 和 MySQL。安裝其他 LAMP 應用程式之前,請先檢查其需求,確認它與您已安裝的環境相容。如果不支援最新版的 PHP,您可以 (絕對安全) 降級至之前支援的組態。您也可以平行安裝多個版本的 PHP,這可花最少的精力解決某些相容性問題。如需在多個安裝的 PHP 版本中設定偏好設定的資訊,請參閱 Amazon Linux AMI 2016.09 版本備註

如何降級

經過全面測試的上一版教學呼叫下列核心 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

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

相關主題

如需有關將檔案傳輸至執行個體或在 Web 伺服器上安裝 WordPress 部落格的詳細資訊,請參閱下列文件:

如需本教學所使用的命令和軟體之詳細資訊,請參閱下列網頁:

如需為您的 Web 伺服器註冊網域名稱或將現有網域名稱轉移至此主機的詳細資訊,請參閱Amazon Route 53 開發人員指南中的建立和遷移網域和子網域至 Amazon Route 53