教程:在 AL2 023 上主持 WordPress 博客 - Amazon Linux 2023

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

教程:在 AL2 023 上主持 WordPress 博客

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

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

重要

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

先决条件

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

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

安装 WordPress

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

  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 upgrade --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 upgrade --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. 为您的 “我的SQL数据库” 创建用户名和密码。您的 WordPress安装使用这些值与 “我的SQL数据库” 进行通信。输入以下命令,以替换唯一的用户名和密码。

    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 文件中。要将文本粘贴到 Pu TTY 终端,请将光标放在要粘贴文本的位置,然后在 Pu TTY 终端内右键单击鼠标。

      有关安全密钥的更多信息,请访问 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 文档根目录下
  • 现在,您已经解压缩了安装文件夹,创建了 “我的SQL数据库和用户”,并自定义了 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. 保存文件并退出文本编辑器。

在 AL2 023 上安装PHP图形绘图库

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

使用以下命令在 AL2 023 上安装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 上安装PHP图形绘图库 AMI

的 GD 库PHP允许您修改图像。如果您需要裁剪博客的标题图像,请安装此库。您安装 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 上安装特定版本的PHP图形绘图库(例如 php8.1 版):AMI

[ec2-user ~]$ sudo dnf install -y php8.1-gd
修复 Apache Web 服务器的文件权限

中的某些可用功能 WordPress 需要对 Apache 文档根目录具有写入权限(例如通过 “管理” 屏幕上传媒体)。如果您尚未这样做,请应用以下群组成员资格和权限(详情请参阅 LAMPWeb 服务器教程)。

  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
使用 AL2 023 运行 WordPress 安装脚本

您已准备好进行安装 WordPress。您使用的命令取决于操作系统。此过程中的命令适用于 AL2 023。在 AL2 023 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:运行安装脚本

使用 AL2 023 运行 WordPress 安装脚本 AMI
  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地址。有关更多信息,请参阅URL网站上的 “更改 WordPress 网站”。

配置您的博客

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

增加容量

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

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

  • 将您的 “我的SQL数据库” 移RDS至 Amazon,以利用该服务的轻松扩展能力。

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

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

了解更多关于 WordPress

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

帮助!我的公开DNS名字改了,现在我的博客坏了

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

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

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

  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中的旧站点。用新旧站点代URLs替您的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常见安装问题以了解更多信息。