如何在 AWS 上构建 WordPress

您好,
我是系统解决方案部的八木屋。上个月我第一次染发,但因为没有遵循任何步骤,结果第一次就染成了蓝色。看来
除了染个安全的颜色之外别无选择,所以我现在很纠结下次该染什么颜色。
这是 Beyond Blog 上的第一篇文章,我将介绍如何使用 AWS 服务构建 LAMP 环境,以及最终如何将内容发布到 WordPress。
详细介绍每个服务篇幅太长,所以我只简要介绍一下设置。
*网站和数据库将以共存配置的方式创建。
AWS
[VPC]
名称:wp-test-vpc
CIDR:10.0.0.0/16
[互联网网关]
标签名称:wp-test-igw
键名 值:wp-test-igw
创建完成后,选择 wp-test-igw,然后从“操作”菜单中选择“附加到 VPC”。
可用 VPC:wp-test-vpc
[路由表]
名称标签:wp-test-rt
VPC:wp-test-vpc
创建完成后,选择 wp-test-rt ⇒ 编辑路由 ⇒ 添加路由
目标地址:0.0.0.0/0 目标地址:wp-test-igw
[子网]
名称:wp-test-public-subnet-1a
VPC:wp-test-vpc
CIDR:10.0.0.0/24
[安全组]
安全组名称:wp-test-sg
描述:wp-test-sg
VPC:wp-test-vpc
入站规则
类型:SSH 协议:TCP 端口范围:22 源:我的 IP
类型:HTTP 协议:TCP 端口范围:80 源:自定义 0.0.0.0/0
[EC2]
Amazon Linux2
t2.micro
VPC:wp-test-VPC
子网:wp-test-public-subnet-1a
自动分配的公网 IP:已启用
存储:保留默认值
标签键:名称 值:wp-test-ec2
安全组:wp-test-sg
密钥对:
创建新的密钥对 密钥
对名称:wp-test-key
现在我们已经完成了 AWS 控制台中的步骤,接下来将在服务器上安装和配置中间件。
使用命令行或 Windows PowerShell 通过 SSH 连接到服务器,并指定密钥、用户名和公网 IP 地址,如下所示:
ssh -i wp-test.pem ec2-user@[公网 IP 地址]
阿帕奇
我们先来安装 Apache。
# yum install httpd -y
只要最后显示“完成!”就可以了。
启动 Apache
# systemctl start httpd
按如下方式配置自动启动,以便即使重启实例也能自动启动。
# systemctl enable httpd
请查看下方,如果已启用,则表示正常。
# systemctl is-enabled httpd
这次,我们将创建一个虚拟主机,并设置以下参数:
路径:/etc/httpd/conf.d/wp-test.conf
服务器名称:wp-test
文档根目录:/var/www/html/wp-test
访问日志:/var/log/httpd/wp-test-access_log
错误日志:/var/log/httpd/wp-test-error_log
首先,创建文档根目录和验证文件。
# vi /var/www/html/wp-test/index.html 测试
# vi /etc/httpd/conf.d/wp-test.conf <VirtualHost *:80> ServerName wp-test DocumentRoot "/var/www/html/wp-test" CustomLog "/var/log/httpd/wptest-access_log" combined ErrorLog "/var/log/httpd/wptest-error_log" </VirtualHost>
由于我们对配置文件进行了一些更改,因此需要重启 Apache 服务才能使更改生效。
# systemctl restart httpd
在浏览器中搜索公网 IP 地址,如果显示“test”,则表示正常。
确认无误后,删除 index.html 文件。
# rm -f /var/www/html/wp-test/index.html
PHP
现在我们来安装 PHP。
默认情况下只安装了 5.4 系列版本,所以请先安装 epel 和 remi 软件仓库。
# yum info php 已加载插件:extras_suggestions、langpacks、priorities、update-motd 可用软件包 名称:php 架构:x86_64 版本:5.4.16 发行版:46.amzn2.0.2 大小:1.4 M 仓库:amzn2-core/2/x86_64 摘要:用于创建动态网站的 PHP 脚本语言 URL:http://www.php.net/ 许可证:PHP、Zend 和 BSD 描述:PHP 是一种嵌入 HTML 的脚本语言。PHP 旨在让开发者轻松编写动态生成的网页。PHP 还为多种商业和非商业数据库管理系统提供内置的数据库集成,因此使用 PHP 编写支持数据库的网页相当简单。PHP 代码最常见的用途可能是替代 CGI 脚本。 php 包包含模块(通常称为 mod_php):该模块为 Apache HTTP 服务器添加了对 PHP 语言的支持。.
安装 epel 存储库
# yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
remi 存储库安装
# yum install http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
我们来检查一下是否安装了7.3系列。
# yum info php --enablerepzo=remi-php73 已加载插件:extras_suggestions、langpacks、priorities、update-motd remi-php73 | 3.0 kB 00:00:00 remi-php73/primary_db | 234 kB 00:00:01 由于仓库优先级保护,已排除 261 个软件包 可用软件包 名称:php 架构:x86_64 版本:5.4.16 发行版:46.amzn2.0.2 大小:1.4 M 仓库:amzn2-core/2/x86_64 摘要:用于创建动态网站的 PHP 脚本语言 URL:http://www.php.net/ 许可证:PHP、Zend 和 BSD 描述:PHP 是一种嵌入 HTML 的脚本语言。PHP 旨在让开发人员能够轻松编写动态生成的网页。 PHP 还内置了对多种商业和非商业数据库管理系统的数据库集成,因此使用 PHP 编写支持数据库的网页相当简单。PHP 代码最常见的用途可能是替代 CGI 脚本。php 包包含一个模块(通常称为 mod_php),该模块为 Apache HTTP 服务器添加了对 PHP 语言的支持。.
这是 5.4 系列版本。
这是因为 amzn2-core 代码库的优先级更高。
# less /etc/yum.repos.d/amazon-2-core.repo [amzn2-core] name=Amazon Linux 2 core repository mirrorlist=$awsproto://$amazonlinux.$awsregion.$awsdomain/$releasever/$product/$target/$basearch/mirror.list priority=10 gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-amazon-linux-2 enabled=1 metadata_expire=300 mirrorlist_expire=300 report_instanceid=yes [省略]
它的优先级设置为“priority=10”,所以将其更改为“priority=99”以降低优先级。
# vi /etc/yum.repos.d/amazon-2-core.repo [amzn2-core] name=Amazon Linux 2 core repository mirrorlist=$awsproto://$amazonlinux.$awsregion.$awsdomain/$releasever/$product/$target/$basearch/mirror.list priority=99 gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-amazon-linux-2 enabled=1 metadata_expire=300 mirrorlist_expire=300 report_instanceid=yes [省略]
再次确认一下。
# yum info php --enablerepo=remi-php73 已加载插件:extras_suggestions、langpacks、priorities、update-motd 由于仓库优先级保护,已排除 1 个软件包 可用软件包 名称:php 架构:x86_64 版本:7.3.27 发行版:1.el7.remi 大小:3.2 M 仓库:remi-php73 摘要:用于创建动态网站的 PHP 脚本语言 URL:http://www.php.net/ 许可证:PHP、Zend、BSD、MIT、ASL 1.0 和 NCSA 描述:PHP 是一种嵌入 HTML 的脚本语言。PHP 旨在让开发者轻松编写动态生成的网页。PHP 还为多种商业和非商业数据库管理系统提供内置的数据库集成,因此使用 PHP 编写支持数据库的网页相当简单。 PHP 代码最常见的用途可能是替代 CGI 脚本。php 包包含一个模块(通常称为 mod_php),该模块为 Apache HTTP 服务器添加了对 PHP 语言的支持。.
它已更新至 7.3 系列。
现在我们也来安装这个模块。
# yum install php php-mbstring php-xml php-xmlrpc php-gd php-pdo php-pecl-mcrypt php-mysqlnd php-pecl-mysql --enablerepo=remi-php73
在文档根目录下创建一个名为 index.php 的文件。
# vi /var/www/html/index.php <?php phpinfo(); ?>

重启 Apache,在浏览器中搜索您的公网 IP 地址,如果您看到类似上面的页面,那么一切就绪。
MySQL
接下来是MySQL。
首先是安装。
# yum localinstall https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm
如果您使用以下命令检查 MySQL 版本,您会发现 8 系列已启用。
# yum repolist all repo id repo name status [省略] mysql57-community/x86_64 MySQL 5.7 Community Server disabled mysql80-community/x86_64 MySQL 8.0 Community Server enabled: 229 [省略]
这次我想安装 5.7 版本,所以我将禁用 8 版本并启用 5.7 版本。
禁用 8 版本
# yum-config-manager --disable mysql80-community 启用 5.7 系列 # yum-config-manager --enable mysql57-community
检查 5.7 版本是否已启用。
# yum repolist all [省略] mysql57-community/x86_64 MySQL 5.7 Community Server 已启用: 484 mysql80-community/x86_64 MySQL 8.0 Community Server 已禁用 [省略]
看起来没问题,所以我将安装 5.7 系列版本。
# yum install mysql-community-server
启动 MySQL
# systemctl start mysqld
就像 Apache 一样,将其设置为自动启动。
# systemctl enable mysqld
确认
# systemctl is-enabled mysqld enabled
进入 MySQL 数据库之前,请先更改密码。
请检查您当前的密码
# grep password /var/log/mysqld.log [注意] 已为 root@localhost: xxxxxxxxx 生成临时密码
其中 xxxxxx 部分是密码。
更改密码
# mysql_secure_installation 正在保护 MySQL 服务器部署。请输入 root 用户密码:[之前的密码] root 用户帐户的现有密码已过期。请设置新密码。新密码:[新密码] 再次输入新密码:[再次输入] 'validate_password' 组件已安装在服务器上。后续步骤将使用该组件的现有配置运行。使用 root 用户的现有密码。密码强度估计:100 更改 root 用户的密码? (按 y|Y 表示“是”,按其他任意键表示“否”):y 新密码:重新输入新密码:密码强度估计值:100 是否继续使用提供的密码?(按 y|Y 表示“是”,按其他任意键表示“否”):y 默认情况下,MySQL 安装会有一个匿名用户,允许任何人无需创建用户帐户即可登录 MySQL。这仅用于测试,并使安装过程更加顺畅。在迁移到生产环境之前,您应该删除这些匿名用户。#删除现有用户 删除匿名用户?(按 y|Y 表示“是”,按其他任意键表示“否”):y 成功。通常,root 用户应该只允许从“localhost”连接。这可以确保没有人能够从网络中猜测 root 密码。#禁止 root 用户远程登录?(按 y|Y 表示“是”,按其他任意键表示“否”):y 成功。默认情况下,MySQL 带有一个名为“test”的数据库,任何人都可以访问。这也仅用于测试,并且应该在迁移到生产环境之前,必须移除测试数据库及其访问权限。#移除测试数据库及其访问权限?(按 y|Y 表示“是”,按其他任意键表示“否”):y - 正在删除测试数据库... 成功。- 移除测试数据库的权限... 成功。重新加载权限表将确保所有更改立即生效。#现在重新加载权限表?(按 y|Y 表示“是”,按其他任意键表示“否”):y 成功。全部完成!
登录 MySQL 并为 WordPress 创建一个数据库。
登录 MySQL
# mysql -u root -p 输入密码:[您刚刚设置的新密码]
创建数据库
mysql > 数据库 wp_test_db;
用户创建
mysql>create user 'wp_user'@'localhost' identified with mysql_native_password by 'password';
如果保持原样,创建的用户(wp_user)将无法操作数据库(wp_test_db),因此我们将授予其权限。
mysql > 授予 wp_user@'localhost' 对 wp_test_db.* 的所有权限;
MySQL配置已完成。
WordPress
最后,我们来看看 WordPress。
你可以把它安装在任何位置,但在这里我们将把它安装在 ec2 用户的家目录中。
# cd /home/ec2-user
安装 WordPress 软件包
# wget https://ja.wordpress.org/latest-ja.tar.gz
请确认已安装。
# ls latest-ja.tar.gz
文件扩展名为 gz,表示它是压缩文件,因此请使用 tar 命令解压缩它。
# tar -zxvf latest-ja.tar.gz
使用 ls 命令确认目录已展开。
已创建一个名为 wordpress 的新目录
# ls latest-ja.tar.gz wordpress
将 wordpress 目录下的所有目录和文件移动到文档根目录。
# mv ./wordpress/* /var/www/html/wp-test/
按如下方式编辑wp-config-sample.php文件:
# vi wp-config-sample.php /** WordPress 数据库名称 */ define( 'DB_NAME', 'wp_test_db' ); /** MySQL 数据库用户名 */ define( 'DB_USER', 'wp_user' ); /** MySQL 数据库密码 */ define( 'DB_PASSWORD', '-GrrLr5A7ymN' );
走到这一步,你就离成功不远了。
如果你在浏览器中搜索你的公网IP地址,就会看到下面的屏幕。

点击“开始吧!”,然后输入您在 wp-config-sample.php 中输入的信息(您可以保留表前缀不变)。
接下来,系统会提示您创建一个如图所示的 wp-config.php 文件,并将内容粘贴到该文件中,请按照说明操作即可。
# vi /var/www/html/wp-test/wp-config.php {粘贴你复制的内容}
返回浏览器并继续。
最后,确定标题和用户名,保存用户名和密码,然后点击“安装 WordPress”。
登录 WordPress,随意发布内容,一旦内容显示出来,就完成了!
3