在 Amazon Linux 2 上托管 WordPress 博客 - Amazon Elastic Compute Cloud
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

在 Amazon Linux 2 上托管 WordPress 博客

以下步骤将帮助您在 Amazon Linux 2 实例上安装、配置和保护 WordPress 博客。本教程是很好的 Amazon EC2 入门教程,因为您可以完全控制托管您 WordPress 博客的 Web 服务器,这对传统的托管服务来说并不是一个典型的方案。

您负责更新软件包并为您的服务器维护安全补丁。对于不需要与 Web 服务器配置直接交互的更自动化 WordPress 安装来说,Amazon CloudFormation 服务还会提供可让您快速入门的 WordPress 模板。有关更多信息,请参阅Amazon CloudFormation 用户指南中的入门。如果您更喜欢将您的 WordPress 博客托管在 Windows 实例上,请参阅 Amazon EC2 Windows 实例用户指南中的在您的 Amazon EC2 Windows 实例上部署 WordPress 博客。如果您需要带分离数据库的高可用性解决方案,请参阅Amazon Elastic Beanstalk 开发人员指南中的部署高可用性 WordPress 网站

重要

这些过程适用于 Amazon Linux 2。有关其他发布版本的更多信息,请参阅其具体文档。本教程中的很多步骤对 Ubuntu 实例并不适用。有关在 Ubuntu 实例上安装 WordPress 的帮助,请参阅 Ubuntu 文档中的 WordPress。您还可以使用 CodeDeploy 在 Amazon Linux、macOS 或 Unix 系统上完成此任务。

先决条件

此教程假设您已遵照在 Amazon Linux 上安装 LAMP(适用于 Amazon Linux 2 的 在 Amazon Linux 2 上安装 LAMP)中的所有步骤启动了一个 Amazon Linux 2 实例,其中包含支持 PHP 和数据库(MySQL 或 MariaDB)的功能正常的 Web 服务器。本教程还介绍了配置安全组以允许 HTTPHTTPS 流量的步骤,以及用于确保为 Web 服务器正确设置文件权限的几个步骤。有关添加规则到您安全组的信息,请参阅 向安全组添加规则

强烈建议您将弹性 IP 地址 (EIP) 与您正用于托管 WordPress 博客的实例关联。这将防止您的实例的公有 DNS 地址更改和中断您的安装。如果您有一个域名且打算将其用于您的博客,则可更新该域名的 DNS 记录,使其指向您的 EIP 地址 (如需帮助,请联系您的域名注册商)。您可以免费将一个 EIP 地址与正在运行的实例相关联。有关更多信息,请参阅弹性 IP 地址

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

安装 WordPress

选项:使用 Automation 完成本教程

要使用 Amazon Systems Manager Automation 而不是以下任务完成本教程,请运行 Automation 文档

连接到您的实例,然后下载 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. 启动数据库服务器。

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

    如果您尚未给您的数据库服务器加密,则必须执行这项操作。有关更多信息,请参阅 保护 MariaDB 服务器(Amazon Linux 2)。

    [ec2-user ~]$ mysql -u root -p
  3. 为您的 MySQL 数据库创建用户和密码。安装 WordPress 的过程将使用这些值与您的 MySQL 数据库通信。

    确保为您的用户创建强密码。请勿在您的密码中使用单引号字符 ('),因为这将中断前面的命令。有关创建安全密码的更多信息,请转至 http://www.pctools.com/guides/password/。请勿重复使用现有密码,并确保将密码保存在安全的位置。

    输入以下命令,以替换唯一的用户名和密码。

    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 systemctl stop httpd。如果您即将继续到下一个步骤,则不需要终止 Apache Web 服务器。

允许 WordPress 使用 permalink

WordPress permalink 需要使用 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. 保存文件并退出文本编辑器。

在 Amazon Linux 2 上安装 PHP 图形绘图库

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

使用以下命令在 Amazon Linux 2 上安装 PHP 图形绘图库。例如,如果您在安装 LAMP 堆栈的过程中从 amazon-linux-extras 安装了 php7.2,则此命令将安装 7.2 版的 PHP 图形绘图库。

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

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

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

下面是示例输出:

php-gd.x86_64 7.2.30-1.amzn2 @amzn2extra-php7.2
修复 Apache Web 服务器的文件权限

WordPress 中的某些可用功能要求具有对 Apache 文档根目录的写入权限 (例如通过“Administration (管理)”屏幕上传媒体)。如果您尚未进行此操作,请应用以下组成员关系和权限 (在 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 服务器,则需要在这里将 Group(组)设置为更宽松的值。请查看建议的 steps and security settings in WordPress(WordPress 中的步骤和安全设置)来完成这一操作。

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

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

您已准备好安装 WordPress。您使用的命令取决于操作系统。此过程中的命令适用于 Amazon Linux 2。

  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:运行安装脚本

后续步骤

在测试您的 WordPress 博客后,请考虑更新其配置。

使用自定义域名

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

配置您的博客

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

增加容量

如果您的 WordPress 博客变得受关注并且您需要更多计算能力或存储,请考虑以下步骤:

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

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

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

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

了解有关 WordPress 的更多信息

有关 WordPress 的信息,请参阅 http://codex.wordpress.org/ 上的 WordPress Codex 帮助文档。有关对安装进行故障排除的更多信息,请转至 https://wordpress.org/support/article/how-to-install-wordpress/#common-installation-problems。有关如何使您的 WordPress 博客更安全的信息,请转至 https://wordpress.org/support/article/hardening-wordpress/。有关如何使您的 WordPress 博客保持最新的信息,请转至 https://wordpress.org/support/article/updating-wordpress/

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

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

如果您的 WordPress 安装发生了此问题,您可以使用以下过程恢复您的博客,该过程使用了适用于 WordPress 的 wp-cli 命令行界面。

使用 wp-cli 更改您的 WordPress 站点 URL
  1. 使用 SSH 连接到您的 EC2 实例。

  2. 请记下您的实例的旧站点 URL 和新站点 URL。安装了 WordPress 之后,旧站点 URL 可能是您的 EC2 实例的公有 DNS 名称。新站点 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。替换您的 EC2 实例的旧站点 URL 和新站点 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 以验证站点是否再次正常运行。否则,请参阅 https://wordpress.org/support/article/changing-the-site-url/https://wordpress.org/support/article/how-to-install-wordpress/#common-installation-problems 以了解更多信息。