教學課程:使用 Amazon Linux 託管 WordPress 部落格 - Amazon Elastic Compute Cloud

教學課程:使用 Amazon Linux 託管 WordPress 部落格

以下程序將協助您在 Amazon Linux 執行個體上安裝、設定及保護 WordPress 部落格。本教學課程正確提供 Amazon EC2 的使用簡介,您可在該執行個體上完全掌控託管 WordPress 部落格的 web 伺服器,其並非一般傳統型的託管服務。

您需負責為伺服器更新軟體套件及維護安全性修補程式。如需免除與 web 伺服器組態的直接互動,自動完成 WordPress 的安裝,AWS CloudFormation 服務另提供 WordPress 範本,可助您快速開始。如需詳細資訊,請參閱 AWS CloudFormation 使用者指南 中的入門。若您偏好在 Windows 執行個體上託管您的 WordPress 部落格,請參閱 Windows 執行個體的 Amazon EC2 使用者指南 中的在 Amazon EC2 Windows 執行個體上部署 WordPress 部落格。若您需要具備分離資料庫的高可用性解決方案,請參閱 中的部署高可用性 WordPress 網站。

重要

這些程序專用於 Amazon Linux。如需其他分發的詳細資訊,請參閱其特定文件。本教學課程中的許多步驟不適用於 Ubuntu 執行個體。如需在 Ubuntu 執行個體上安裝 WordPress 的協助,請參閱 Ubuntu 文件中的 WordPress

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

若要使用 AWS Systems Manager Automation (而不進行下列工作) 完成此教學課程,請值行下列其中一個 Automation 文件:AWSDocs-HostingAWordPressBlog-AL (Amazon Linux) 或 AWSDocs-HostingAWordPressBlog-AL2 (Amazon Linux 2)。

先決條件

本教學課程假設您已遵照適用於 Amazon Linux AMI 之 教學:使用 Amazon Linux AMI 安裝 LAMP Web 伺服器 或適用於 Amazon Linux 2 之 教學:在 Amazon Linux 2 上安裝 LAMP Web 伺服器 中的所有步驟啟動 Amazon Linux 執行個體,而且有支援 PHP 與資料庫 (MySQL 或 MariaDB) 運作中的 web 伺服器。本教學課程亦提供設定安全群組以允許 HTTPHTTPS 流量的步驟,還有多個步驟可確保您的 web 伺服器已設定正確的檔案權限。如需將規則新增至安全群組的詳細資訊,請參閱新增規則至安全群組

我們強烈建議您將彈性 IP 地址 (EIP) 與您用來託管 WordPress 部落格的執行個體建立關聯。如此可避免您執行個體的公有 DNS 地址變更及損害安裝。如果您擁有網域名稱,而且您想將該網域名稱用於部落格,您可更新網域名稱的 DNS 記錄,使其指向您的 EIP 地址 (如需這類的協助,請聯絡您的網域名稱註冊商)。您可免費將一個 EIP 地址與執行中的執行個體建立關聯。如需更多詳細資訊,請參閱 彈性 IP 地址

如果您沒有網域名稱可用於部落格,您可向 Route 53 註冊網域名稱,並將執行個體的 EIP 地址與網域名稱建立關聯。如需詳細資訊,請參閱 Amazon Route 53 開發人員指南 中的使用 Amazon Route 53 註冊網域名稱

安裝 WordPress

連接至您的執行個體,然後下載 WordPress 安裝套件。

下載並解壓縮 WordPress 安裝套件

  1. 請用 wget 命令下載最新的 WordPress 安裝套件。以下命令將一律下載最新版本。

    [ec2-user ~]$ wget https://wordpress.org/latest.tar.gz
  2. 解壓縮並解除封存安裝套件。安裝資料夾將解壓縮到名為 wordpress 的資料夾。

    [ec2-user ~]$ tar -xzf latest.tar.gz

建立 WordPress 安裝的資料庫使用者和資料庫

您的 WordPress 安裝需要將資訊存放在資料庫,例如部落格文章和使用者評論。此程序協助您建立部落格的資料庫,以及有權在該資料庫中讀取和儲存資訊的使用者。

  1. 啟動資料庫伺服器。

    • Amazon Linux 2

      [ec2-user ~]$ sudo systemctl start mariadb
    • Amazon Linux AMI

      [ec2-user ~]$ sudo service mysqld start
  2. root 使用者的身分登入資料庫伺服器。出現提示時,輸入您資料庫的 root 密碼;此密碼可能不同於您的 root 系統密碼,假如您尚未設定資料庫伺服器的密碼,此密碼可能為空白。

    如果您尚未建立資料庫伺服器的保護機制,請務必這麼做。如需詳細資訊,請參閱 保護 MariaDB 伺服器 (Amazon Linux 2) 或 保護資料庫伺服器 (Amazon Linux AMI)。

    [ec2-user ~]$ mysql -u root -p
  3. 為您的 MySQL 資料庫建立使用者和密碼。您的 WordPress 安裝使用這些值與 MySQL 資料庫通訊。請輸入下列命令,並換成唯一的使用者名稱與密碼。

    CREATE USER 'wordpress-user'@'localhost' IDENTIFIED BY 'your_strong_password';

    務必為使用者建立高強度密碼。請勿在密碼中使用單引號字元 ( ' ),因為這會使上述命令中斷。如需建立安全密碼的詳細資訊,請前往 http://www.pctools.com/guides/password/。請勿重複使用現有密碼,並將此密碼存放在安全的地方。

  4. 建立資料庫。為資料庫提供一個描述性有意義的名稱,例如 wordpress-db

    注意

    以下命令中資料庫名稱前後的標點符號稱為反引號。標準鍵盤上的反引號 (`) 鍵通常位在 Tab 鍵上方。反引號不一定為必要,但反引號可讓您在資料庫名稱中使用其他的非法字元,例如連字號。

    CREATE DATABASE `wordpress-db`;
  5. 將資料庫完整權限授予先前建立的 WordPress 使用者。

    GRANT ALL PRIVILEGES ON `wordpress-db`.* TO "wordpress-user"@"localhost";
  6. 排清資料庫權限,以套用所有變更。

    FLUSH PRIVILEGES;
  7. 離開 mysql 用戶端。

    exit

建立及編輯 wp-config.php 檔案

WordPress 安裝資料夾包含組態檔案範例,其名稱為 wp-config-sample.php。在此程序中您將複製該檔案,並依照您的特定組態編輯檔案。

  1. wp-config-sample.php 檔案複製到稱為 wp-config.php 的檔案。此動作將建立一個新的組態檔案,並保留原本的範例檔案做為備份。

    [ec2-user ~]$ cp wordpress/wp-config-sample.php wordpress/wp-config.php
  2. 用您喜愛的文字編輯器 (例如 nanovim) 編輯 wp-config.php 檔案,並輸入您的安裝值。如果您沒有喜愛的文字編輯器,nano 很適合入門者。

    [ec2-user ~]$ nano wordpress/wp-config.php
    1. 找出定義 DB_NAME 的行,並將 database_name_here 變更為您在步驟 4建立 WordPress 安裝的資料庫使用者和資料庫中建立的資料庫名稱。

      define('DB_NAME', 'wordpress-db');
    2. 找出定義 DB_USER 的行,並將 username_here 變更為您在步驟 3建立 WordPress 安裝的資料庫使用者和資料庫中建立的資料庫使用者。

      define('DB_USER', 'wordpress-user');
    3. 找出定義 DB_PASSWORD 的行,並將 password_here 變更為您在步驟 3建立 WordPress 安裝的資料庫使用者和資料庫中建立的高強度密碼。

      define('DB_PASSWORD', 'your_strong_password');
    4. 找出稱為 Authentication Unique Keys and Salts 的區段。這些 KEYSALT 的值會將一層加密提供給 WordPress 使用者存放於本機機器的瀏覽器 Cookie。基本上,於此新增長的隨機值將使您的網站更安全。請前往 https://api.wordpress.org/secret-key/1.1/salt/ 隨機產生一組金鑰值,您可將其複製並貼入到 wp-config.php 檔案內。若要將文字貼入到 PuTTY 終端,請將游標移至想要貼入文字的位置,然後在 PuTTY 終端內按一下滑鼠右鍵。

      如需安全金鑰的詳細資訊,請參閱 https://wordpress.org/support/article/editing-wp-config-php/#security-keys

      注意

      下列值僅供範例使用;請勿使用這些值進行安裝。

      define('AUTH_KEY', ' #U$$+[RXN8:b^-L 0(WU_+ c+WFkI~c]o]-bHw+)/Aj[wTwSiZ<Qb[mghEXcRh-'); define('SECURE_AUTH_KEY', 'Zsz._P=l/|y.Lq)XjlkwS1y5NJ76E6EJ.AV0pCKZZB,*~*r ?6OP$eJT@;+(ndLg'); define('LOGGED_IN_KEY', 'ju}qwre3V*+8f_zOWf?{LlGsQ]Ye@2Jh^,8x>)Y |;(^[Iw]Pi+LG#A4R?7N`YB3'); define('NONCE_KEY', 'P(g62HeZxEes|LnI^i=H,[XwK9I&[2s|:?0N}VJM%?;v2v]v+;+^9eXUahg@::Cj'); define('AUTH_SALT', 'C$DpB4Hj[JK:?{ql`sRVa:{:7yShy(9A@5wg+`JJVb1fk%_-Bx*M4(qc[Qg%JT!h'); define('SECURE_AUTH_SALT', 'd!uRu#}+q#{f$Z?Z9uFPG.${+S{n~1M&%@~gL>U>NV<zpD-@2-Es7Q1O-bp28EKv'); define('LOGGED_IN_SALT', ';j{00P*owZf)kVD+FVLn-~ >.|Y%Ug4#I^*LVd9QeZ^&XmK|e(76miC+&W&+^0P/'); define('NONCE_SALT', '-97r*V/cgxLmp?Zy4zUU4r99QQ_rGs2LTd%P;|_e1tS)8_B/,.6[=UK<J_y9?JWG');
    5. 儲存檔案並結束您的文字編輯器。

將 WordPress 檔案安裝至 Apache 文件根底下

  • 現在您已解壓縮安裝資料夾、建立 MySQL 資料庫和使用者,並自訂 WordPress 組態檔案,接著您可將安裝檔案複製到 web 伺服器文件根,並執行安裝指令碼以完成安裝。這些檔案的位置取決於您想要在 web 伺服器的實際根 (例如,my.public.dns.amazonaws.com) 或根底下之子目錄或資料夾 (例如,my.public.dns.amazonaws.com/blog) 下使用 WordPress 部落格。

    • 如果您想讓 WordPress 在文件根下執行,請複製 wordpress 安裝目錄的內容 (非目錄本身),如下所示:

      [ec2-user ~]$ cp -r wordpress/* /var/www/html/
    • 如果您想讓 WordPress 在文件根下的其他目錄下執行,請先建立目錄,然後將檔案複製到目錄中。在此範例中,WordPress 將在 blog 目錄中執行:

      [ec2-user ~]$ mkdir /var/www/html/blog [ec2-user ~]$ cp -r wordpress/* /var/www/html/blog/
重要

基於安全起見,如果您不是要立即移至下一個步驟,現在請先停止 Apache web 伺服器 (httpd)。將安裝移到 Apache 文件根底下後,WordPress 安裝指令碼未受保護,攻擊者可能在 Apache web 伺服器執行時存取您的部落格。若要停止 Apache Web 伺服器,輸入命令 sudo service httpd stop。如果您要移至下一個步驟,則不需要停止 Apache web 伺服器。

允許 WordPress 使用永久連結

WordPress 永久連結需要使用 Apache .htaccess 檔案才能正常運作,但此檔案在 Amazon Linux 上並非預設啟用。請使用此程序允許 Apache 文件根下的所有覆寫。

  1. 使用您喜愛的文字編輯器 (例如 nanovim) 開啟 httpd.conf 檔案。如果您沒有喜愛的文字編輯器,nano 很適合入門者。

    [ec2-user ~]$ sudo vim /etc/httpd/conf/httpd.conf
  2. 找出開頭為 <Directory "/var/www/html"> 的區段。

    <Directory "/var/www/html"> # # Possible values for the Options directive are "None", "All", # or any combination of: # Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews # # Note that "MultiViews" must be named *explicitly* --- "Options All" # doesn't give it to you. # # The Options directive is both complicated and important. Please see # http://httpd.apache.org/docs/2.4/mod/core.html#options # for more information. # Options Indexes FollowSymLinks # # AllowOverride controls what directives may be placed in .htaccess files. # It can be "All", "None", or any combination of the keywords: # Options FileInfo AuthConfig Limit # AllowOverride None # # Controls who can get stuff from this server. # Require all granted </Directory>
  3. 變更上述區段中的 AllowOverride None 行,以讀取 AllowOverride All

    注意

    此檔案中有多個 AllowOverride 行;請確定您變更的是 <Directory "/var/www/html"> 區段中的行。

    AllowOverride All
  4. 儲存檔案並結束您的文字編輯器。

在 Amazon Linux 2 安裝 PHP 圖形繪製程式庫

適用於 PHP 的 GD 程式庫可讓您修改影像。如果您需要裁剪部落格的標題映像,請安裝此程式庫。您安裝的 phpMyAdmin 版本可能需要此程式庫的特定最低版本 (例如 7.2 版)。

使用以下命令將 PHP 圖形繪製庫安裝在 Amazon Linux 2 上。例如,如果您從 amazon-linux-extras 安裝 php7.2 作為安裝 LAMP 堆疊的一部分,則此命令會安裝 PHP 圖形繪製庫的 7.2 版。

[ec2-user ~]$ sudo yum install php-gd

若要確認已安裝的版本,請使用下列命令:

[ec2-user ~]$ sudo yum list installed | grep php

下列為範例輸出:

php-cli.x86_64 7.2.30-1.amzn2 @amzn2extra-php7.2 php-common.x86_64 7.2.30-1.amzn2 @amzn2extra-php7.2 php-fpm.x86_64 7.2.30-1.amzn2 @amzn2extra-php7.2 php-gd.x86_64 7.2.30-1.amzn2 @amzn2extra-php7.2 php-json.x86_64 7.2.30-1.amzn2 @amzn2extra-php7.2 php-mysqlnd.x86_64 7.2.30-1.amzn2 @amzn2extra-php7.2 php-pdo.x86_64 7.2.30-1.amzn2 @amzn2extra-php7.2

在 Amazon Linux AMI 安裝 PHP 圖形繪製庫

適用於 PHP 的 GD 程式庫可讓您修改影像。如果您需要裁剪部落格的標題映像,請安裝此程式庫。您安裝的 phpMyAdmin 版本可能需要此程式庫的特定最低版本 (例如 7.2 版)。

若要確認哪些版本可用,請使用下列命令:

[ec2-user ~]$ yum list | grep php

以下是 PHP 圖形繪製庫 (7.2 版) 輸出的範例行:

php72-gd.x86_64 7.2.30-1.22.amzn1 amzn-updates

使用下列命令,在上安裝特定版本的 PHP 圖形繪製庫 (例如,7.2 版) Amazon Linux AMI:

[ec2-user ~]$ sudo yum install php72-gd

修正 Apache web 伺服器的檔案權限

WordPress 中可用的部分功能需要 Apache 文件根的寫入存取 (例如透過管理畫面上傳媒體)。如果您尚未這樣做,請先套用下列的群組成員資格與許可 (詳細資訊詳述於 LAMP web 伺服器教學課程)。

  1. /var/www 及其內容的檔案所有權授予 apache 使用者。

    [ec2-user ~]$ sudo chown -R apache /var/www
  2. /var/www 及其內容的群組所有權授予 apache 群組。

    [ec2-user ~]$ sudo chgrp -R apache /var/www
  3. 變更 /var/www 及其子目錄的目錄許可,以新增群組寫入許可並設定日後子目錄的群組 ID。

    [ec2-user ~]$ sudo chmod 2775 /var/www [ec2-user ~]$ find /var/www -type d -exec sudo chmod 2775 {} \;
  4. 請以遞迴方式變更 /var/www 及其子目錄的檔案許可,以新增群組寫入許可。

    [ec2-user ~]$ find /var/www -type f -exec sudo chmod 0664 {} \;
  5. 重新啟動 Apache web 伺服器,以套用新的群組與許可。

    • Amazon Linux 2

      [ec2-user ~]$ sudo systemctl restart httpd
    • Amazon Linux AMI

      [ec2-user ~]$ sudo service httpd restart

使用 Amazon Linux 2 來執行 WordPress 安裝指令碼

現在已就緒可安裝 WordPress。使用的指令取決於作業系統。本程序中的指令是用來搭配 Amazon Linux 2 使用​。使用此程序之後的程序搭配 Amazon Linux AMI。

  1. 使用 systemctl 命令,確定每次系統開機時 httpd 和資料庫服務都會啟動。

    [ec2-user ~]$ sudo systemctl enable httpd && sudo systemctl enable mariadb
  2. 確認資料庫伺服器正在執行。

    [ec2-user ~]$ sudo systemctl status mariadb

    如果資料庫服務未執行,請啟動服務。

    [ec2-user ~]$ sudo systemctl start mariadb
  3. 確認 Apache web 伺服器 (httpd) 正在執行。

    [ec2-user ~]$ sudo systemctl status httpd

    如果 httpd 服務未執行,請啟動服務。

    [ec2-user ~]$ sudo systemctl start httpd
  4. 在網頁瀏覽器中,輸入您 WordPress 部落格的 URL (可能是執行個體的公有 DNS 地址,或是該地址後面加上 blog 資料夾)。接著應該會出現 WordPress 安裝指令碼。提供 WordPress 安裝所需的資訊。選擇安裝 WordPress 來完成安裝。如需詳細資訊,請參閱 WordPress 網站上的 Run the Install Script (執行安裝指令碼)

使用 Amazon Linux AMI 來執行 WordPress 安裝指令碼

  1. 使用 chkconfig 命令,確定每次系統開機時 httpd 和資料庫服務都會啟動。

    [ec2-user ~]$ sudo chkconfig httpd on && sudo chkconfig mysqld on
  2. 確認資料庫伺服器正在執行。

    [ec2-user ~]$ sudo service mysqld status

    如果資料庫服務未執行,請啟動服務。

    [ec2-user ~]$ sudo service mysqld start
  3. 確認 Apache web 伺服器 (httpd) 正在執行。

    [ec2-user ~]$ sudo service httpd status

    如果 httpd 服務未執行,請啟動服務。

    [ec2-user ~]$ sudo service httpd start
  4. 在網頁瀏覽器中,輸入您 WordPress 部落格的 URL (可能是執行個體的公有 DNS 地址,或是該地址後面加上 blog 資料夾)。接著應該會出現 WordPress 安裝指令碼。提供 WordPress 安裝所需的資訊。選擇安裝 WordPress 來完成安裝。如需詳細資訊,請參閱 WordPress 網站上的 Run the Install Script (執行安裝指令碼)

後續步驟

在完成 WordPress 部落格的測試之後,您可以考慮更新其組態。

使用自訂的網域名稱

如果您有網域名稱與 EC2 執行個體的 EIP 地址相關聯,您可設定部落格使用該名稱,而不是使用 EC2 公有 DNS 地址。如需詳細資訊,請參閱 http://codex.wordpress.org/Changing_The_Site_URL

設定部落格

您可設定部落格使用不同的主題外掛程式,為讀者提供更為個人化的使用體驗。但安裝程序有時會出錯,使您失去整個部落格。因此我們強烈建議您為執行個體建立備份的 Amazon Machine Image (AMI),然後再嘗試安裝任何主題或外掛程式,如此安裝期間發生任何錯誤時便能還原部落格。如需更多詳細資訊,請參閱 建立自己的 AMI

增加容量

若您的 WordPress 部落格變得十分熱門而需要更多運算能力或儲存空間,請參考下列步驟:

進一步了解 WordPress

如需安裝 WordPress 的詳細資訊,請參閱 http://codex.wordpress.org/ 上的 WordPress Codex help documentation。如需安裝故障診斷的詳細資訊,請前往 http://codex.wordpress.org/Installing_WordPress#Common_Installation_Problems。如需將 WordPress 部落格變得更安全的資訊,請前往 http://codex.wordpress.org/Hardening_WordPress。如需將 WordPress 部落格保持在最新狀態,請前往 http://codex.wordpress.org/Updating_WordPress

說明! 我的公有 DNS 名稱曾經變更且現在部落格無法使用

您的 WordPress 安裝會自動設定為使用 EC2 執行個體的公有 DNS 地址。如果您停止並重新啟動執行個體,公有 DNS 地址便會變更 (除非與彈性 IP 地址建立關聯),而且部落格將無法再使用,因為其參考資源的地址已不存在 (或已指派至其他的 EC2 執行個體)。如需更詳細的問題說明和多個可能的解決方案,請參閱 http://codex.wordpress.org/Changing_The_Site_URL

如果您的 WordPress 安裝發生此狀況,您也許可用下列程序使用 WordPress 的 wp-cli 命令列界面復原部落格。

使用 wp-cli 變更 WordPress 網站 URL

  1. 使用 SSH 連結至您的 EC2 執行個體。

  2. 記下執行個體的舊網站 URL 和新網站 URL。舊網站 URL 可能是安裝 WordPress 時 EC2 執行個體的公有 DNS 名稱。新網站 URL 為 EC2 執行個體目前的公有 DNS 名稱。如果您不確定舊網站的 URL,請用 curl 使用下列命令來尋找 URL。

    [ec2-user ~]$ curl localhost | grep wp-content

    輸出應該會顯示舊公有 DNS 名稱的參考,其看起來類似 (舊網站的 URL 為紅色):

    <script type='text/javascript' src='http://ec2-52-8-139-223.us-west-1.compute.amazonaws.com/wp-content/themes/twentyfifteen/js/functions.js?ver=20150330'></script>
  3. 使用下列命令下載 wp-cli

    [ec2-user ~]$ curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
  4. 使用下列命令搜尋並取代 WordPress 安裝中的舊網站 URL。取代 EC2 執行個體的舊網站和新網站 URL,以及 WordPress 安裝的路徑 (通常為 /var/www/html/var/www/html/blog)。

    [ec2-user ~]$ php wp-cli.phar search-replace 'old_site_url' 'new_site_url' --path=/path/to/wordpress/installation --skip-columns=guid
  5. 在 web 瀏覽器中輸入 WordPress 部落格的新網站 URL,再次確認網站是否正常運作。如果無法正常運作,請參閱 http://codex.wordpress.org/Changing_The_Site_URLhttp://codex.wordpress.org/Installing_WordPress#Common_Installation_Problems 了解詳細資訊。