如何在 Ubuntu 18.04 上使用 LEMP 安装 WordPress
介绍
WordPress 是互联网上最流行的 CMS(内容管理系统)。它允许您使用 PHP 处理在 MySQL 后端之上轻松设置灵活的博客和网站。 WordPress 的采用令人难以置信,是快速启动和运行网站的绝佳选择。设置完成后,几乎所有管理都可以通过 Web 前端完成。
在本指南中,我们将专注于在 Ubuntu 18.04 服务器上的 LEMP 堆栈(Linux、Nginx、MySQL 和 PHP)上设置 WordPress 实例。
先决条件
为了完成本教程,您需要访问 Ubuntu 18.04 服务器。
在开始本指南之前,您需要执行以下任务:
- 在您的服务器上创建一个
sudo
用户:我们将使用具有sudo
权限的非根用户来完成本指南中的步骤。您可以按照我们的 Ubuntu 18.04 初始服务器设置指南创建具有sudo
权限的用户。 - 安装 LEMP 堆栈:WordPress 需要网络服务器、数据库和 PHP 才能正常运行。设置 LEMP 堆栈(Linux、Nginx、MySQL 和 PHP)可以满足所有这些要求。按照本指南安装和配置此软件。
- 使用 SSL 保护您的网站:WordPress 提供动态内容并处理用户身份验证和授权。 TLS/SSL 是一种允许您加密来自您站点的流量的技术,以便您的连接是安全的。设置 SSL 的方式取决于您的网站是否有域名。
- 如果您有域名……保护您网站的最简单方法是使用 Let's Encrypt,它提供免费、可信的证书。按照我们的 Nginx Let's Encrypt 指南进行设置。
- 如果您没有域……并且您只是将此配置用于测试或个人使用,则可以改用自签名证书。这提供了相同类型的加密,但没有域验证。按照我们的 Nginx 自签名 SSL 指南进行设置。
当您完成设置步骤后,以您的
sudo
用户身份登录您的服务器并继续下面的操作。第 1 步 — 为 WordPress 创建 MySQL 数据库和用户
我们将采取的第一步是准备工作。 WordPress 使用 MySQL 来管理和存储站点和用户信息。我们已经安装了 MySQL,但是我们需要创建一个数据库和一个用户供 WordPress 使用。
首先,登录 MySQL 根(管理)帐户。如果 MySQL 配置为使用
auth_socket
身份验证插件(默认),您可以使用sudo
登录 MySQL 管理帐户:- sudo mysql
如果您将身份验证方法更改为使用 MySQL root 帐户的密码,请改用以下格式:
- mysql -u root -p
系统将提示您输入为 MySQL root 帐户设置的密码。
首先,我们可以创建一个 WordPress 可以控制的单独数据库。您可以随意调用它,但我们将在本指南中使用
wordpress
以保持简单。您可以通过键入以下内容为 WordPress 创建数据库:- CREATE DATABASE wordpress DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
注意:每个 MySQL 语句必须以分号 (;) 结尾。如果您遇到任何问题,请检查以确保它存在。
接下来,我们将创建一个单独的 MySQL 用户帐户,我们将专门使用它来操作我们的新数据库。从管理和安全的角度来看,创建单一功能的数据库和帐户是一个好主意。我们将在本指南中使用名称
wordpressuser
。如果您愿意,请随时更改此设置。我们将创建此帐户、设置密码并授予对我们创建的数据库的访问权限。我们可以通过键入以下命令来完成此操作。请记住在此处为您的数据库用户选择一个强密码:
- GRANT ALL ON wordpress.* TO 'wordpressuser'@'localhost' IDENTIFIED BY 'password';
您现在拥有一个数据库和用户帐户,每个都是专门为 WordPress 制作的。我们需要刷新权限,以便当前的 MySQL 实例知道我们最近所做的更改:
- FLUSH PRIVILEGES;
输入以下命令退出 MySQL:
- EXIT;
MySQL 会话将退出,返回到常规 Linux shell。
第 2 步 — 安装额外的 PHP 扩展
在设置我们的 LEMP 堆栈时,我们只需要极少的扩展集就可以让 PHP 与 MySQL 进行通信。 WordPress 及其许多插件利用了额外的 PHP 扩展。
我们可以通过键入以下内容来下载并安装一些最流行的 PHP 扩展以用于 WordPress:
- sudo apt update
- sudo apt install php-curl php-gd php-intl php-mbstring php-soap php-xml php-xmlrpc php-zip
注意:每个 WordPress 插件都有自己的一套要求。有些可能需要安装额外的 PHP 包。检查您的插件文档以发现其 PHP 要求。如果它们可用,它们可以使用
apt
安装,如上所示。完成安装扩展后,重新启动 PHP-FPM 进程,以便正在运行的 PHP 处理器可以利用新安装的功能:
- sudo systemctl restart php7.2-fpm
我们现在已经在服务器上安装了所有必要的 PHP 扩展。
第 3 步 — 配置 Nginx
接下来,我们将对我们的 Nginx 服务器块文件进行一些小的调整。根据先决条件教程,您应该在
/etc/nginx/sites-available/
目录中为您的站点配置一个配置文件,以响应您服务器的域名或 IP 地址并受 TLS 保护/SSL 证书。我们将在此处使用/etc/apache2/sites-available/wordpress
作为示例,但您应该在适当的地方将路径替换为您的配置文件。此外,我们将使用
/var/www/wordpress
作为 WordPress 安装的根目录。您应该使用您自己的配置中指定的 Web 根目录。注意:您可能正在使用
/etc/nginx/sites-available/default
默认配置(使用/var/www/html
作为您的网络根目录)。如果您只打算在此服务器上托管一个网站,则可以使用它。如果没有,最好将必要的配置拆分成逻辑块,每个站点一个文件。使用
sudo
权限打开您站点的服务器块文件以开始:- sudo nano /etc/nginx/sites-available/wordpress
在主要的
server
块中,我们需要添加一些location
块。首先为对
/favicon.ico
和/robots.txt
的请求创建完全匹配的位置块,我们不想记录对它们的请求。我们将使用正则表达式位置来匹配对静态文件的任何请求。我们将再次关闭这些请求的日志记录,并将它们标记为高度可缓存的,因为这些通常是昂贵的服务资源。您可以调整此静态文件列表以包含您的站点可能使用的任何其他文件扩展名:
server { . . . location = /favicon.ico { log_not_found off; access_log off; } location = /robots.txt { log_not_found off; access_log off; allow all; } location ~* \.(css|gif|ico|jpeg|jpg|js|png)$ { expires max; log_not_found off; } . . . }
在现有的
location /
块中,我们需要调整try_files
列表,以便将控制传递给而不是返回 404 错误作为默认选项带有请求参数的 index.php
文件。这应该是这个样子:
server { . . . location / { #try_files $uri $uri/ =404; try_files $uri $uri/ /index.php$is_args$args; } . . . }
完成后,保存并关闭文件。
现在,我们可以通过键入以下内容来检查我们的配置是否存在语法错误:
- sudo nginx -t
如果没有报告错误,请键入以下命令重新加载 Nginx:
- sudo systemctl reload nginx
接下来,我们将下载并设置 WordPress 本身。
第 4 步 — 下载 WordPress
现在我们的服务器软件已经配置好了,我们可以下载并设置 WordPress。特别是出于安全原因,始终建议从他们的站点获取最新版本的 WordPress。
更改为可写目录,然后通过键入以下内容下载压缩版本:
- cd /tmp
- curl -LO https://wordpress.org/latest.tar.gz
提取压缩文件以创建 WordPress 目录结构:
- tar xzvf latest.tar.gz
我们将暂时将这些文件移动到我们的文档根目录中。在我们这样做之前,我们可以将示例配置文件复制到 WordPress 实际读取的文件名:
- cp /tmp/wordpress/wp-config-sample.php /tmp/wordpress/wp-config.php
现在,我们可以将目录的全部内容复制到我们的文档根目录中。我们正在使用
-a
标志来确保我们的权限得到维护。我们在源目录的末尾使用一个点来表示应该复制目录中的所有内容,包括任何隐藏文件:- sudo cp -a /tmp/wordpress/. /var/www/wordpress
现在我们的文件已经就位,我们将把它们的所有权分配给
www-data
用户和组。这是 Nginx 运行的用户和组,Nginx 需要能够读取和写入 WordPress 文件才能为网站提供服务并执行自动更新。- sudo chown -R www-data:www-data /var/www/wordpress
我们的文件现在位于我们服务器的文档根目录中并具有正确的所有权,但我们仍然需要完成更多配置。
第 5 步 — 设置 WordPress 配置文件
接下来,我们需要对主 WordPress 配置文件进行一些更改。
当我们打开文件时,我们的首要任务是调整一些密钥以为我们的安装提供一些安全性。 WordPress 为这些值提供了一个安全的生成器,这样您就不必尝试自己想出好的值。这些仅在内部使用,因此在此处具有复杂、安全的值不会损害可用性。
要从 WordPress 密钥生成器获取安全值,请键入:
- curl -s https://api.wordpress.org/secret-key/1.1/salt/
你会得到看起来像这样的唯一值:
警告:每次请求唯一值很重要。不要复制下面显示的值!
Outputdefine('AUTH_KEY', '1jl/vqfs<XhdXoAPz9 DO NOT COPY THESE VALUES c_j{iwqD^<+c9.k<J@4H'); define('SECURE_AUTH_KEY', 'E2N-h2]Dcvp+aS/p7X DO NOT COPY THESE VALUES {Ka(f;rv?Pxf})CgLi-3'); define('LOGGED_IN_KEY', 'W(50,{W^,OPB%PB<JF DO NOT COPY THESE VALUES 2;y&,2m%3]R6DUth[;88'); define('NONCE_KEY', 'll,4UC)7ua+8<!4VM+ DO NOT COPY THESE VALUES #`DXF+[$atzM7 o^-C7g'); define('AUTH_SALT', 'koMrurzOA+|L_lG}kf DO NOT COPY THESE VALUES 07VC*Lj*lD&?3w!BT#-'); define('SECURE_AUTH_SALT', 'p32*p,]z%LZ+pAu:VY DO NOT COPY THESE VALUES C-?y+K0DK_+F|0h{!_xY'); define('LOGGED_IN_SALT', 'i^/G2W7!-1H2OQ+t$3 DO NOT COPY THESE VALUES t6**bRVFSD[Hi])-qS`|'); define('NONCE_SALT', 'Q6]U:K?j4L%Z]}h^q7 DO NOT COPY THESE VALUES 1% ^qUswWgn+6&xqHN&%');这些是我们可以直接粘贴到配置文件中以设置安全密钥的配置行。复制您现在收到的输出。
现在,打开 WordPress 配置文件:
- sudo nano /var/www/wordpress/wp-config.php
找到包含这些设置的虚拟值的部分。它看起来像这样:
. . . define('AUTH_KEY', 'put your unique phrase here'); define('SECURE_AUTH_KEY', 'put your unique phrase here'); define('LOGGED_IN_KEY', 'put your unique phrase here'); define('NONCE_KEY', 'put your unique phrase here'); define('AUTH_SALT', 'put your unique phrase here'); define('SECURE_AUTH_SALT', 'put your unique phrase here'); define('LOGGED_IN_SALT', 'put your unique phrase here'); define('NONCE_SALT', 'put your unique phrase here'); . . .
删除这些行并粘贴您从命令行复制的值:
. . . define('AUTH_KEY', 'VALUES COPIED FROM THE COMMAND LINE'); define('SECURE_AUTH_KEY', 'VALUES COPIED FROM THE COMMAND LINE'); define('LOGGED_IN_KEY', 'VALUES COPIED FROM THE COMMAND LINE'); define('NONCE_KEY', 'VALUES COPIED FROM THE COMMAND LINE'); define('AUTH_SALT', 'VALUES COPIED FROM THE COMMAND LINE'); define('SECURE_AUTH_SALT', 'VALUES COPIED FROM THE COMMAND LINE'); define('LOGGED_IN_SALT', 'VALUES COPIED FROM THE COMMAND LINE'); define('NONCE_SALT', 'VALUES COPIED FROM THE COMMAND LINE'); . . .
接下来,我们需要修改文件开头的一些数据库连接设置。您需要调整我们在 MySQL 中配置的数据库名称、数据库用户和关联密码。
我们需要做的另一个改变是设置 WordPress 应该用来写入文件系统的方法。由于我们已授予 Web 服务器写入所需位置的权限,因此我们可以将文件系统方法显式设置为“直接”。如果我们当前设置未设置此项,将导致 WordPress 在执行某些操作时提示输入 FTP 凭据. 此设置可以添加到数据库连接设置下方,或文件中的其他任何位置:
. . . define('DB_NAME', 'wordpress'); /** MySQL database username */ define('DB_USER', 'wordpressuser'); /** MySQL database password */ define('DB_PASSWORD', 'password'); . . . define('FS_METHOD', 'direct');
完成后保存并关闭文件。
第 6 步 — 通过 Web 界面完成安装
现在服务器配置已经完成,我们可以通过Web界面完成安装。
在您的 Web 浏览器中,导航到您服务器的域名或公共 IP 地址:
http://server_domain_or_IP
选择您要使用的语言:
接下来,您将进入主设置页面。
为您的 WordPress 站点选择一个名称并选择一个用户名(出于安全考虑,建议不要选择“admin”之类的名称)。系统会自动生成一个强密码。保存此密码或选择其他强密码。
输入您的电子邮件地址并选择是否要阻止搜索引擎将您的网站编入索引:
当您点击前进时,您将被带到一个提示您登录的页面:
登录后,您将被带到 WordPress 管理仪表板:
结论
WordPress 应该已安装并可以使用了!一些常见的后续步骤是为您的帖子选择永久链接设置(可以在
Settings > Permalinks
中找到)或选择一个新主题(在Appearance > Themes
中)。如果这是您第一次使用 WordPress,请浏览一下界面以熟悉您的新 CMS。