教學:在 Amazon Linux 2 上安裝 LAMP Web 伺服器 - Amazon Elastic Compute Cloud

教學:在 Amazon Linux 2 上安裝 LAMP Web 伺服器

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

重要

若要在 Amazon Linux AMI 上安裝 LAMP Web 伺服器,請參閱教學:使用 Amazon Linux AMI 安裝 LAMP Web 伺服器

如果您要在 Ubuntu 或 Red Hat Enterprise Linux 執行個體上設定 LAMP Web 伺服器,本教學不適用於您。如需其他分發的詳細資訊,請參閱其特定文件。如需 Ubuntu 上 LAMP Web 伺服器的資訊,請參閱 Ubuntu 社群文件的 ApacheMySQLPHP 主題。

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

若要使用 AWS Systems Manager Automation (而不使用進行下列工作) 完成此教學課程,請執行 AWSDocs-InstallALAMPServer-AL2 Automation 文件。

步驟 1:準備 LAMP 伺服器

先決條件

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

注意

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

準備 LAMP 伺服器

  1. 連線到您的執行個體

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

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

    [ec2-user ~]$ sudo yum update -y
  3. 安裝 lamp-mariadb10.2-php7.2php7.2 Amazon Linux Extras 儲存庫以取得適用於 Amazon Linux 2 的 LAMP MariaDB 和 PHP 套件之最新版本。

    [ec2-user ~]$ sudo amazon-linux-extras install -y lamp-mariadb10.2-php7.2 php7.2
    注意

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

    cat /etc/system-release

    若要在 Amazon Linux AMI 上安裝 LAMP Web 伺服器,請參閱教學:使用 Amazon Linux AMI 安裝 LAMP Web 伺服器

  4. 現在您的執行個體是最新的,您即可以安裝 Apache Web 伺服器、MariaDB 和 PHP 軟體套件。

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

    [ec2-user ~]$ sudo yum install -y httpd mariadb-server
    注意

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

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

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

    [ec2-user ~]$ sudo systemctl enable httpd

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

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

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

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

    3. Security groups (安全群組) 下,選擇 view inbound rules (檢視入站規則)

    4. 您應該會在預設安全群組中看到下列規則清單:

      Security Groups associated with i-1234567890abcdef0 Ports Protocol Source launch-wizard-N 22 tcp 0.0.0.0/0 ✔

      使用 新增規則至安全群組 中的程序,使用下列值新增入站安全規則:

      • Type (類型):HTTP

      • Protocol (通訊協定):TCP

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

      • Source (來源):自訂

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

    如果您未看見 Apache 測試頁面,請檢查您使用的安全群組是否包含允許 HTTP (連接埠 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 資訊頁面:

    注意

    如果你未看見此頁面,請確認 /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 -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 tarball。

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

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

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

    您現在應該會看見 phpMyAdmin 登入頁面:

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

    必須先設定您的安裝,才能將其投入使用。若要設定 phpMyAdmin,您可以參考 manually create a configuration fileuse the setup console 或結合這兩種方法。

    如需 phpMyAdmin 的資訊,請參閱 phpMyAdmin User Guide

故障診斷

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

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

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

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

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

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

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

  • 防火牆是否設定正確?

    如果您未看見 Apache 測試頁面,請檢查您使用的安全群組是否包含允許 HTTP (連接埠 80) 流量的規則。如需將 HTTP 規則新增至安全群組的詳細資訊,請參閱 新增規則至安全群組

相關主題

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

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

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