教程:在 AL2023 上主持一 WordPress 篇博客 - Amazon Linux 2023
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

教程:在 AL2023 上主持一 WordPress 篇博客

以下过程将帮助您在 AL2023 实例上安装、配置和保护 WordPress 博客。本教程很好地介绍了如何使用 Amazon EC2,因为您可以完全控制托管 WordPress 博客的 Web 服务器,这在传统托管服务中并不常见。

您负责更新软件包并为您的服务器维护安全补丁。对于不需要与 Web 服务器配置直接交互的自动化程度更高的 WordPress 安装,该 Amazon CloudFormation 服务提供了一个可以帮助您快速入门的 WordPress模板。有关更多信息,请参阅Amazon CloudFormation 用户指南中的入门。如果您希望在 Windows 实例上托管 WordPress 博客,请参阅亚马逊 EC2 用户指南中的在亚马逊 EC2 Windows 实例上部署 WordPress 博客。如果您需要具有分离数据库的高可用性解决方案,请参阅《开发人员指南》Amazon Elastic Beanstalk 中的部署高可用性 WordPress 网站

重要

这些程序专为 AL2023 而设计。有关其他发布版本的信息,请参阅特定于该版本的文档。本教程中的很多步骤对 Ubuntu 实例并不适用。有关在 Ubuntu 实例 WordPress 上安装的帮助,请参阅 Ubuntu 文档WordPress中的。你也可以使用CodeDeploy在亚马逊 Linux、macOS 或 Unix 系统上完成此任务。

先决条件

我们强烈建议您将弹性 IP 地址 (EIP) 关联到用于托管 WordPress 博客的实例。这将防止您的实例的公有 DNS 地址更改和中断您的安装。如果您有一个域名且打算将其用于您的博客,则可更新该域名的 DNS 记录,使其指向您的 EIP 地址 (如需帮助,请联系您的域名注册商)。您可以免费将一个 EIP 地址与正在运行的实例相关联。有关更多信息,请参阅《Amazon EC2 用户指南》中的弹性 IP 地址。本 教程:在 AL2023 上安装 LAMP 服务器 教程还介绍了配置安全组以允许 HTTPHTTPS 流量的步骤,以及用于确保为 Web 服务器正确设置文件权限的几个步骤。有关向安全组添加规则的信息,请参阅向安全组添加规则

如果您的博客还没有域名,则可使用 Route 53 注册一个域名并将您的实例的 EIP 地址与您的域名相关联。有关更多信息,请参阅 Amazon Route 53 开发人员指南中的使用 Amazon Route 53 注册域名

安装 WordPress

连接到您的实例,然后下载 WordPress 安装包。有关连接到实例的更多信息,请参阅正在连接到 AL2023 实例

  1. 使用以下命令下载并安装这些软件包。

    dnf install wget php-mysqlnd httpd php-fpm php-mysqli mariadb105-server php-json php php-devel -y
  2. 您可能会发现显示一条与输出中措辞类似的警告(版本可能随着时间变化):

    WARNING: A newer release of "Amazon Linux" is available. Available Versions: dnf update --releasever=2023.0.20230202 Release notes: https://aws.amazon.com Version 2023.0.20230204: Run the following command to update to 2023.0.20230204: dnf update --releasever=2023.0.20230204 ... etc

    作为最佳实践,我们建议 up-to-date 尽可能保留操作系统,但您可能需要遍历每个版本,以确保您的环境中没有冲突。如果步骤 1 中提及的软件包安装失败,则可能需要更新到所列出的某个较新版本,然后重试

  3. 使用wget命令下载最新的 WordPress 安装包。以下命令始终会下载最新版本。

    [ec2-user ~]$ wget https://wordpress.org/latest.tar.gz
  4. 解压并解档安装包。安装文件夹解压到名为 wordpress 的文件夹。

    [ec2-user ~]$ tar -xzf latest.tar.gz
为您的 WordPress 安装创建数据库用户和数据库

您的 WordPress 安装需要将博客文章和用户评论等信息存储在数据库中。此过程帮助您创建自己的博客数据库,并创建一个有权读取该数据库的信息并将信息保存到该数据库的用户。

  1. 启动数据库和 Web 服务器。

    [ec2-user ~]$ sudo systemctl start mariadb httpd
  2. root 用户身份登录数据库服务器。在系统提示时输入您的数据库 root 密码,它可能与您的 root 系统密码不同;如果您尚未给您的数据库服务器加密,它甚至可能是空的。

    如果您尚未给您的数据库服务器加密,则必须执行这项操作。有关更多信息,请参阅 步骤 3:确保数据库服务器的安全 (AL2023)。

    [ec2-user ~]$ mysql -u root -p
  3. 为您的 MySQL 数据库创建用户和密码。您的 WordPress安装使用这些值与您的 MySQL 数据库进行通信。输入以下命令,以替换唯一的用户名和密码。

    CREATE USER 'wordpress-user'@'localhost' IDENTIFIED BY 'your_strong_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 服务器文档根目录了,这样就可以运行完成安装的安装脚本了。这些文件的位置取决于您是希望 WordPress 博客在 Web 服务器的实际根目录(例如my.public.dns.amazonaws.com)中可用,还是在根目录下的子目录或文件夹(例如my.public.dns.amazonaws.com/blog)中可用。

    • 如果 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. 使用您常用的文本编辑器(如 vimnano)打开 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. 保存文件并退出文本编辑器。

在 AL2023 上安装 PHP 图形绘图库

PHP 的 GD 库允许您修改图像。如果您需要裁剪博客的标题图像,请安装此库。您安装 phpMyAdmin 的版本可能需要此库的特定最低版本(例如 8.1 版)。

使用以下命令在 AL2023 上安装 PHP 图形绘图库。例如,如果您在安装 LAMP 堆栈的过程中从源安装了 php8.1,则此命令将安装 8.1 版的 PHP 图形绘图库。

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

要验证安装的版本,请使用以下命令:

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

下面是示例输出:

php-gd.x86_64 8.1.30-1.amzn2 @amazonlinux
在 Amazon Linux AMI 上安装 PHP 图形绘图库

PHP 的 GD 库允许您修改图像。如果您需要裁剪博客的标题图像,请安装此库。您安装 phpMyAdmin 的版本可能需要此库的特定最低版本(例如 8.1 版)。

要验证哪些版本可用,请使用以下命令:

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

以下是 PHP 图形绘图库(8.1 版)的输出中的示例行:

php8.1.aarch64 8.1.7-1.amzn2023.0.1 @amazonlinux php8.1-cli.aarch64 8.1.7-1.amzn2023.0.1 @amazonlinux php8.1-common.aarch64 8.1.7-1.amzn2023.0.1 @amazonlinux php8.1-devel.aarch64 8.1.7-1.amzn2023.0.1 @amazonlinux php8.1-fpm.aarch64 8.1.7-1.amzn2023.0.1 @amazonlinux php8.1-gd.aarch64 8.1.7-1.amzn2023.0.1 @amazonlinux

使用以下命令在 Amazon Linux AMI 上安装特定版本的 PHP 图形绘图库(例如 php 8.1 版):

[ec2-user ~]$ sudo dnf install -y php8.1-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 0644 {} \;
    注意

    如果您还打算用 WordPress 作 FTP 服务器,则需要在此处进行更宽松的群组设置。请查看中的建议步骤和安全设置 WordPress以完成此操作。

  5. 重启 Apache Web 服务器,让新组和权限生效。

    [ec2-user ~]$ sudo systemctl restart httpd
使用 AL2023 运行 WordPress 安装脚本

您已准备好进行安装 WordPress。您使用的命令取决于操作系统。此操作步骤中的命令适用于 AL2023。在 AL2023 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. 在 Web 浏览器中,键入 WordPress 博客的 URL(要么是您的实例的公有 DNS 地址,要么是该地址后跟blog文件夹)。您应该会看到 WordPress 安装脚本。提供 WordPress 安装所需的信息。选择 “安装” WordPress 以完成安装。有关更多信息,请参阅 WordPress 网站上的步骤 5:运行安装脚本

使用 AL2023 AMI 运行 WordPress 安装脚本
  1. 使用 chkconfig 命令确保 httpd 和数据库服务在每次系统启动时启动。

    [ec2-user ~]$ sudo chkconfig httpd on && sudo chkconfig mariadb on
  2. 验证数据库服务器是否正在运行。

    [ec2-user ~]$ sudo service mariadb status

    如果数据库服务未运行,请启动。

    [ec2-user ~]$ sudo service mariadb start
  3. 验证您的 Apache Web 服务器 (httpd) 正在运行。

    [ec2-user ~]$ sudo service httpd status

    如果 httpd 服务未运行,请启动。

    [ec2-user ~]$ sudo service httpd start
  4. 在 Web 浏览器中,键入 WordPress 博客的 URL(要么是您的实例的公有 DNS 地址,要么是该地址后跟blog文件夹)。您应该会看到 WordPress 安装脚本。提供 WordPress 安装所需的信息。选择 “安装” WordPress 以完成安装。有关更多信息,请参阅 WordPress 网站上的步骤 5:运行安装脚本

后续步骤

测试完 WordPress 博客后,可以考虑更新其配置。

使用自定义域名

如果您有一个与您的 EC2 实例的 EIP 地址关联的域名,则可将您的博客配置为使用该域名而不是 EC2 公有 DNS 地址。有关更多信息,请参阅更改网站上的 WordPress 网站 URL

配置您的博客

您可以将您的博客配置为使用不同的主题插件,从而向您的读者提供更具个性化的体验。但是,有时安装过程可能事与愿违,从而导致您丢失您的整个博客。强烈建议您在尝试安装任何主题或插件之前,为您的实例创建一个备份 Amazon Machine Image (AMI),以便在安装过程中出现任何问题时,您还可以还原您的博客。有关更多信息,请参阅 Amazon EC2 用户指南中的创建您自己的 AMI

增加容量

如果您的 WordPress 博客越来越受欢迎,并且您需要更多的计算能力或存储空间,请考虑以下步骤:

  • 对实例扩展存储空间。有关更多信息,请参阅 Amazon EBS 弹性卷

  • 将您的 MySQL 数据库移动到 Amazon RDS 以利用服务的轻松扩展功能。

提高互联网流量的网络性能

如果希望您的博客吸引世界各地用户的流量,请考虑 Amazon Global Accelerator。Global Accelerator 通过改善用户的客户端设备和运行的 WordPress 应用程序之间的互联网流量性能,帮助您实现更低的延迟 Amazon。Global Accelerator 使用Amazon 全球网络将流量引导到离客户端最近的 Amazon 区域中运行良好的应用程序终端节点。

了解更多关于 WordPress

以下链接包含有关的更多信息 WordPress。

帮助!我的公有 DNS 名称发生更改导致我的博客瘫痪

您的 WordPress 安装是使用您的 EC2 实例的公有 DNS 地址自动配置的。如果您停止并重启实例,公有 DNS 地址将发生更改 (除非它与弹性 IP 地址相关联),并且您的博客将不会再运行,因为您的博客引用了不再存在的地址 (或已分配给另一个 EC2 实例的地址) 上的资源。https://wordpress.org/support/article/changing-the-site-url/中概述了对该问题的更详细描述和几种可能的解决方案。

如果 WordPress 安装时发生了这种情况,则可以通过以下步骤恢复博客,该过程使用wp-cli命令行界面 WordPress。

要更改您的 WordPress 网站网址,请使用 wp-cli
  1. 使用 SSH 连接到您的 EC2 实例。

  2. 请记下您的实例的旧站点 URL 和新站点 URL。安装时,旧站点 URL 很可能是您的 EC2 实例的公有 DNS 名称 WordPress。新站点 URL 是您的 EC2 实例的当前公有 DNS 名称。如果您不确定旧站点 URL 是什么,则可通过以下命令使用 curl 来查找它。

    [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。用新旧站点 URL 替换您的 EC2 实例和 WordPress 安装路径(通常为 o /var/www/html r/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,以验证该网站是否恢复正常运行。如果不是,请参阅更改站点 URL常见安装问题了解更多信息。