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

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

在 Amazon Linux 2 上安裝 LAMP

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

重要

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

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

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

步驟 1:準備 LAMP 伺服器

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

  • 下列程序將安裝 Amazon Linux 2 上最新的 PHP 版本 (目前為 php8.2)。若您預計不使用此教學所提及的 PHP 應用程式,改使用其他 PHP 應用程式,您應檢查其與 php8.2 的相容性。

準備 LAMP 伺服器
  1. 連線到您的執行個體

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

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

    [ec2-user ~]$ sudo yum update -y
  3. 安裝 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
  4. 安裝 php8.2 Amazon Linux Extras 儲存庫,以取得適用於 Amazon Linux 2 的 PHP 套件最新版本。

    [ec2-user ~]$ sudo amazon-linux-extras install php8.2
  5. 現在您的執行個體是最新版本,可安裝 Apache Web 伺服器、PHP 和 MariaDB 軟體套件。使用 yum install 命令可以同時安裝多個軟體套件和所有相關的依存項。

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

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

    yum info package_name
  6. 啟動 Apache Web 伺服器。

    [ec2-user ~]$ sudo systemctl start httpd
  7. 使用 systemctl 命令來設定 Apache Web 伺服器在每次系統開機時啟動。

    [ec2-user ~]$ sudo systemctl enable httpd

    要確認 httpd 已啟用,您可以執行以下命令:

    [ec2-user ~]$ sudo systemctl is-enabled httpd
  8. 如果您尚未這樣做,請新增安全規則以允許對內 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 (來源):自訂

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

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

    重要

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

    
                        伺服器測試會顯示 Apache 測試頁面。

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

若要允許 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 adm wheel apache systemd-journal
  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 && 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 2 上設定 SSL/TLS

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

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

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

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

    如果您嘗試執行此命令時出現拒絕許可錯誤,請嘗試登出並重新登入,以取得您在 設定檔案許可 設定的適當群組許可。

  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 httpd mariadb-server php-mysqlnd

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

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

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

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

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

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

保護 MariaDB 伺服器
  1. 啟動 MariaDB 伺服器。

    [ec2-user ~]$ sudo systemctl start mariadb
  2. 執行 mysql_secure_installation

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

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

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

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

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

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

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

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

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

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

    [ec2-user ~]$ sudo systemctl enable mariadb

步驟 4:(可選)安裝 phpMyAdmin

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

重要

我們不建議使用 phpMyAdmin 來存取 LAMP 伺服器,除非您在 Apache 中啟用了 SSL/TLS;否則,您的資料庫管理員密碼和其他資料將透過網際網路不安全傳輸。如需開發人員提供的安全性建議,請參閱保護您的 phpMyAdmin 安裝。如需有關在 EC2 執行個體上保護 Web 伺服器的一般資訊,請參閱在 Amazon Linux 2 上設定 SSL/TLS

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

    [ec2-user ~]$ sudo yum install php-mbstring php-xml -y
  2. 重新啟動 Apache。

    [ec2-user ~]$ sudo systemctl restart httpd
  3. 重新啟動 php-fpm

    [ec2-user ~]$ sudo systemctl restart php-fpm
  4. /var/www/html 中導覽至 Apache 文件根。

    [ec2-user ~]$ cd /var/www/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 systemctl start mariadb
  9. 在網頁瀏覽器中,輸入 phpMyAdmin 安裝的 URL。此 URL 為您執行個體的公有 DNS 地址 (或公有 IP 地址),其後跟隨斜線和您安裝目錄的檔案名稱。例如:

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

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

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

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

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

    2. 將檔案另存為config.inc.php在包含的 phpMyAdmin 目錄中index.php

    3. 如需任何其他設定,請參閱安裝指示的「使用 phpMyAdmin 安裝程式指令碼」一節中的檔案後建立指示。

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

疑難排解

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

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

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

  • Web 伺服器是否正在執行?

    要確認 httpd 已啟用,您可以執行以下命令:

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

    如果 httpd 程序未執行,請重複 準備 LAMP 伺服器 所述的步驟。

  • 防火牆是否設定正確?

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

我無法使用 HTTPS 連線至我的伺服器

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

  • Web 伺服器是否正確設定?

    安裝 Apache 後,伺服器即針對 HTTP 流量進行設定。若要支援 HTTPS,請在伺服器上啟用 TLS 並安裝 SSL 憑證。如需相關資訊,請參閱 在 Amazon Linux 2 上設定 SSL/TLS

  • 防火牆是否設定正確?

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

相關主題

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

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

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