NGINX Full Version

借助 NGINX Unit 在 Ubuntu 上自动安装 WordPress

WordPress 的安装方法数不胜数,在撰写本文之时,Google 搜索“WordPress 安装”的条目多达 488,000 条。虽然如此,但能够全面解释如何以支持长期维护的方式安装 WordPress 和底层操作系统的教程却寥寥无几。原因可能是正确的配置很大程度上取决于具体的需求,也可能是全面的安装教程无法通过简单几句话解释清楚。

在这篇文章中,我们将试着就此给出解决办法。我们提供了在 Ubuntu 上自动执行 WordPress 安装的 bash 脚本,并详细解释了各部分的作用以及我们的考量取舍。(如果您是一名高级用户,则可跳过这篇文章,直接进入脚本部分,下载并根据您的环境进行修改。)最终的 WordPress 安装文件是一份可编写脚本,支持 Let’s Encrypt,使用 NGINX Unit,并已针对生产环境完成设置。

我们延续了上一篇博客中介绍的通过 NGINX Unit 部署 WordPress 的基本架构,另外还安装和配置了上一篇博客(或许多其他教程)中没有涵盖的特性:

本篇文章描述了在同时托管静态资源 Web 服务器、PHP 处理服务器和数据库的单个节点上设置 WordPress 的方法。未来,我们将介绍多主机、多服务的 WordPress 配置安装。您还希望我们讨论什么主题?请在文末评论区告诉我们!

前提条件

架构概述

应用架构为三层 Web 应用,与上一篇博客中描述的应用架构相同。其中包括必须由 PHP 处理器执行的 PHP 脚本和必须由 Web 服务器传递的静态文件。

一般原则

设置环境变量

请在运行脚本之前设置以下环境变量。

脚本将检查是否已设置与 WordPress 相关的变量,如果未设置,则退出(第 8–42 行,此处未显示)。第 572-576 行 将检查LETS_ENCRYPT_STAGING的值。

设置派生环境变量

脚本(第 55-61 行,此处未显示)将以下环境变量设置为硬编码值或上一节中设置的变量的派生值。

将 WordPress 网站主机名分配给计算实例

脚本将计算实例的主机名设置为与 WordPress 网站的域名相匹配。并非所有配置都需要进行此设置,但在单主机设置(如脚本配置的设置)中通过 SMTP 发送出站电子邮件时此设置将非常有帮助。

将 WordPress 网站主机名添加到 /etc/hosts

WordPress 使用 WP‑Cron 插件运行计划任务,前提是 WordPress 可以通过 HTTP 进行 ping 操作。为了确保 WP-Cron 能够在所有环境中正常运行,脚本在/etc/hosts中添加了一个条目,从而让 WordPress 可以通过本地环回接口路由至自身。

后续步骤所需的安装工具

后面的脚本部分将使用某些实用程序,并假定存储库索引已更新。我们更新存储库索引(第 77 行)并即刻安装所需工具 (第 78-84 行)

添加 NGINX Unit 和 NGINX 开源库

脚本通过 NGINX 官方存储库安装 NGINX Unit 和 NGINX 开源库,以确保我们始终拥有最新的安全更新和补丁修复程序。

此处,脚本通过为系统添加签名密钥并为 apt 配置(定义 Internet 上的存储库位置)添加文件来安装 NGINX Unit 库(第 87–91 行)和 NGINX 开源库(第 94–98 行)

NGINX Unit 和 NGINX 开源库实际在下一部分才开始安装。为避免多次更新元数据,我们预先添加了存储库,加快了整体安装速度。

安装 NGINX、NGINX Unit、PHP MariaDB、Certbot (Let’s Encrypt) 和依赖 (Dependencies)

安装完所有存储库后,我们将更新存储库元数据并安装应用。脚本安装的软件包包括运行 WordPress 时推荐的PHP 扩展插件

为 NGINX Unit 和 WordPress 配置 PHP

脚本在 PHP conf.d 目录 (第 136-174 行)中创建一个配置文件。该文件设置了 PHP 上传文件的最大体积(第 142 行),将 PHP 错误定向到STDERR (第 145 行),以便将它们记录在 NGINX Unit 日志中,及重启 NGINX Unit(第 151 行)。

初始化 WordPress MariaDB 数据库

我们选择使用 MariaDB 而不是 MySQL 作为 WordPress 数据库。MariaDB 背后有一个更活跃的开源社区,可以说它能够提供更出色的开箱即用性能

脚本初始化新数据库,并为 WordPress 创建凭证,以通过本地环回地址进行访问。

安装 WordPress CLI 实用程序

现在,脚本将安装WP-CLI 实用程序。使用该程序安装和管理 WordPress 可以让您完全控制 WordPress 配置,而无需手动修改文件,更新数据库或导航到 WordPress 管理员面板。 您还可以使用该程序安装主题或插件及升级 WordPress。

安装和配置 WordPress

脚本将最新版本的 WordPress 安装在/var/www/wordpress目录下,并进行以下设置:

配置 NGINX Unit

脚本将 NGINX Unit 配置为运行 PHP 和处理 WordPress 路径、隔离 PHP 进程命名空间,并调谐性能设置。以下三个特性需要注意:

  1. 命名空间支持根据脚本是否正在容器中运行有条件地进行定义(第 213-224 行)。必需采用这种定义方式,原因是大多数容器配置都不支持在其内部运行其他容器。

  2. 启用命名空间支持后,network 命名空间将被禁用(第 218 行)。要支持 WordPress 访问自己的端点并连接 Internet 必需禁用 network 命名空间。

  3. 使用以下算法计算最大进程数(第 226-228 行):(运行 MariaDB 和 NGINX Unit 的可用内存)/(PHP 内存限制 + 5)。 然后在第 277-280 行的 NGINX Unit 配置中设置该值。

    此值可确保始终至少有两个 PHP 进程在运行,这一点很重要,因为 WordPress 自身会进行多次异步调用,并且如果没有其他进程运行,WP-Cron 等操作将会失败。由于此处生成的设置是保守设置,因此您可能需要根据特定的 WordPress 配置增减此设置。许多生产系统设置通常在 10 到 100 之间。

配置 NGINX

配置核心 NGINX 参数

该脚本为 NGINX 缓存目录创建了一个目录(第 301 行),并创建了 NGINXnginx.conf 主配置文件 (第 304–341 行)。配置设置中包括 NGINX 工作进程数(第 306 行)和上传文件的最大体积(第 325 行)。第 329 行导入了 下一部分中定义的压缩配置,第 332–337 行设置了缓存参数。

配置 NGINX 压缩设置

在将内容发送给客户端之前动态压缩内容能够有效提高网站性能,但前提是压缩配置正确无误。脚本使用 GitHub 上 h5bp 存储库 中的配置(第 346–414 行)

为 WordPress 配置 NGINX 参数

接下来,脚本在 conf.d 目录下创建一个名为default.conf 的 NGINX 配置文件,并设置 WordPress(第 417–541 行)。配置如下:

配置 Certbot 以处理 Let’s Encrypt 证书和自动更新

Certbot 是电子前沿基金会 (EFF) 推出的一款免费工具,可从 Let’s Encrypt 获取并自动更新 TLS 证书。脚本将执行以下操作,配置 Certbot 为 NGINX 处理Let’s Encrypt 证书:

自定义您的 WordPress 网站/h2>

以上为您介绍了我们的bash脚本如何配置 NGINX 开源版和 NGINX Unit,以托管一个启用 TLS/SSL 的生产就绪型网站。您可能想要根据自己的需求进一步定制您的网站:

为了获得更出色的网站性能,建议您升级到我们基于 NGINX 开源版的企业级商业支持产品NGINX Plus。NGINX Plus 用户可享受动态加载的 Brotli module,和 NGINX ModSecurity WAF(需额外付费)。我们还为您提供了基于 F5 业界领先安全技术的 NGINX Plus WAF 模块 NGINX App Protect

想要通过 NGINX Plus 试用脚本?立即下载30 天免费试用版,或与我们联系以讨论您的用例