如何在 Ubuntu 16.04 上使用 LEMP 安装 WordPress

介绍

WordPress是互联网上最受欢迎的CMS(内容管理系统)。它允许您轻松地在PHP处理的MySQL后端上设置灵活的博客和网站。WordPress已经见过令人难以置信的采用,是快速启动和运行网站的绝佳选择。

在本指南中,我们将专注于在Ubuntu 16.04服务器上设置一个WordPress实例(Linux, Nginx,MySQL和PHP)。

前提条件

要完成本教程,您将需要访问Ubuntu 16.04服务器。

您需要完成以下任务,才能开始本指南:

  • ** 在您的服务器上创建 sudo 用户** : 我们将使用具有 " sudo " 特权的非根本用户完成本指南的步骤。 您可以遵循我们的 [Ubuntu 16.04 初始服务器设置指南] (https://andsky.com/tech/tutorials/initial-server-setup-with-ubuntu-16-04) 来创建拥有"sudo"权限的用户.
  • ** 安装一个 LEMP 堆栈** :WordPress 需要一个网络服务器,一个数据库,以及PHP,以便正确运行. 建立一个LEMP堆栈(Linux, Nginx, MySQL,和PHP)可以满足所有这些要求. 遵循本指南安装并配置此软件.
  • ** 用 SSL 保护您的网站 ** : WordPress服务于动态内容并处理用户认证和授权. TLS/SSL 是允许您从您的站点加密流量的技术,以使您的连接安全. 您设置 SSL 的方式将取决于您是否拥有您的网站的域名 。
  • ** 如果您有域名... ** 保护您网站最简单的方式是使用Let's Encrypt,它提供了免费的,可信赖的证书. 跟着我们的[让我们为Nginx加密指南] (https://andsky.com/tech/tutorials/how-to-secure-nginx-with-let-s-encrypt-on-ubuntu-16-04)来设置这个.
  • ** 如果您没有域名...** 而您只是使用此配置进行测试或个人使用,您可以使用自签名的证书取而代之. 这提供了同类型的加密,但没有域验证. 遵循我们[自签的 Nginx (https://andsky.com/tech/tutorials/how-to-create-a-self-signed-ssl-certificate-for-nginx-in-ubuntu-16-04) 的 SSL 指南来设置 。 (英语)

当你完成了设置步骤后,登录你的服务器作为你的sudo用户,并继续下方。

步骤 1:为 WordPress 创建 MySQL 数据库和用户

我們將採取的第一步是準備。WordPress使用MySQL來管理和儲存網站和用戶資訊.我們已經安裝了MySQL,但我們需要為WordPress建立一個資料庫和使用者。

要开始,请通过发出此命令登录MySQL root(管理)帐户:

1mysql -u root -p

您将被提示为您在安装软件时为 MySQL 根帐户设置的密码。

首先,我们可以创建一个单独的数据库,WordPress可以控制它,你可以称之为任何你想要的,但我们将在本指南中使用WordPress,以保持简单。

1CREATE DATABASE wordpress DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;

<$>[注] [标签注] 每个MySQL语句必须以半列(;)结束。

接下来,我们将创建一个单独的MySQL用户帐户,我们将专门用于在我们的新数据库上运行。创建一个功能的数据库和帐户从管理和安全的角度来说是一个好主意。

我们将创建此帐户,设置密码,并授予访问我们创建的数据库。我们可以通过键入以下命令来做到这一点。

1GRANT ALL ON wordpress.* TO 'wordpressuser'@'localhost' IDENTIFIED BY 'password';

你现在有一个数据库和用户帐户,每一个都是专门为WordPress创建的,我们需要清除权限,以便当前的MySQL实例知道我们最近所做的更改:

1FLUSH PRIVILEGES;

通过键入离开MySQL:

1EXIT;

步骤 2:调整 Nginx 配置以正确处理 WordPress

接下来,我们将对我们的 Nginx 服务器封锁文件做一些小调整。

打开sudo特权的默认服务器封锁文件以开始:

1sudo nano /etc/nginx/sites-available/default

在主服务器块中,我们需要添加一些位置块。

首先,为/favicon.ico/robots.txt的请求创建准确匹配的位置块,我们不希望登录请求。

我们将使用一个常规的表达位置来匹配任何对静态文件的请求,我们将再次关闭这些请求的日志,并将其标记为高度可缓存,因为这些通常是昂贵的资源。

 1[label /etc/nginx/sites-available/default]
 2server {
 3    . . .
 4
 5    location = /favicon.ico { log_not_found off; access_log off; }
 6    location = /robots.txt { log_not_found off; access_log off; allow all; }
 7    location ~* \.(css|gif|ico|jpeg|jpg|js|png)$ {
 8        expires max;
 9        log_not_found off;
10    }
11    . . .
12}

在现有的位置 / 块中,我们需要调整try_files列表,这样而不是作为默认选项返回 404 错误,控制将转移到请求参数的index.php文件中。

这应该看起来像这样的东西:

1[label /etc/nginx/sites-available/default]
2server {
3    . . .
4    location / {
5        #try_files $uri $uri/ =404;
6        try_files $uri $uri/ /index.php$is_args$args;
7    }
8    . . .
9}

完成后,保存并关闭文件。

现在,我们可以通过键入检查我们的配置语法错误:

1sudo nginx -t

如果没有报告错误,请通过键入重新加载 Nginx:

1sudo systemctl reload nginx

步骤 3:安装额外的PHP扩展

当我们设置LEMP堆栈时,我们只需要一组非常小的扩展来让PHP与MySQL进行通信。

我们可以通过键入下载并安装一些最流行的PHP扩展来使用WordPress:

1sudo apt-get update
2sudo apt-get install php-curl php-gd php-mbstring php-mcrypt php-xml php-xmlrpc

<$>[注] [标签注] 每个WordPress插件都有自己的要求。 有些可能需要安装额外的PHP包。 检查您的插件文档以了解其PHP要求。 如果它们可用,可以安装apt-get如上所示。 <$>

当您完成安装扩展时,请重新启动 PHP-FPM 流程,以便运行的 PHP 处理器能够利用新安装的功能:

1sudo systemctl restart php7.0-fpm

步骤四:下载WordPress

现在我们的服务器软件已配置,我们可以下载并设置WordPress,特别是出于安全原因,我们建议从他们的网站上获取最新的WordPress版本。

转换为可编写的目录,然后通过键入下载压缩版本:

1cd /tmp
2curl -O https://wordpress.org/latest.tar.gz

提取压缩文件来创建WordPress目录结构:

1tar xzvf latest.tar.gz

在我们这样做之前,我们可以将样本配置文件复制到WordPress实际阅读的文件名:

1cp /tmp/wordpress/wp-config-sample.php /tmp/wordpress/wp-config.php

我们还可以创建升级目录,以便WordPress在试图在软件更新后自行完成此操作时不会遇到权限问题:

1mkdir /tmp/wordpress/wp-content/upgrade

现在,我们可以将整个目录内容复制到我们的文档根中。我们正在使用-a旗帜来确保我们的权限得到维持。我们正在使用源目录末尾的点头来表示目录内的一切都应该被复制,包括任何隐藏的文件:

1sudo cp -a /tmp/wordpress/. /var/www/html

步骤 5:设置WordPress目录

在我们进行基于Web的WordPress设置之前,我们需要调整我们的WordPress目录中的某些项目。

调整所有权和许可

我们需要能够像普通用户一样写入这些文件,我们需要Web服务器也可以访问和调整某些文件和目录以便正常工作。

我们将在本指南中使用sammy作为我们的用户名,但您应该更改以匹配您的sudo用户的名称。

1sudo chown -R sammy:www-data /var/www/html

接下来,我们将在文档根中的每个目录中设置setgid位,这会导致在这些目录中创建的新文件继承主目录组(我们刚刚设置为www-data)而不是创建用户的主要组。

我们可以通过键入我们的WordPress安装中的每个目录设置setgid点:

1sudo find /var/www/html -type d -exec chmod g+s {} \;

首先,我们会给小组写入wp-content目录,以便 Web 界面可以对主题和插件进行更改:

1sudo chmod g+w /var/www/html/wp-content

作为此过程的一部分,我们将给网页服务器写入这些两个目录中的所有内容:

1sudo chmod -R g+w /var/www/html/wp-content/themes
2sudo chmod -R g+w /var/www/html/wp-content/plugins

这应该是一个合理的权限设置,以开始,一些插件和程序可能需要额外的调整。

创建WordPress配置文件

现在,我们需要对主 WordPress 配置文件进行一些更改。

当我们打开文件时,我们的第一个业务命令将是调整一些秘密密密钥,为我们的安装提供一些安全性。WordPress为这些值提供一个安全的生成器,因此您不必试图自行提出良好的价值。

要从 WordPress 秘密密密钥生成器中获取安全值,键入:

1curl -s https://api.wordpress.org/secret-key/1.1/salt/

您将获得像这样的独特值:

<$>[警告] [标签警告] 重要的是每次请求单一值。

1[secondary_label Output]
2define('AUTH_KEY',         '1jl/vqfs<XhdXoAPz9 DO NOT COPY THESE VALUES c_j{iwqD^<+c9.k<J@4H');
3define('SECURE_AUTH_KEY',  'E2N-h2]Dcvp+aS/p7X DO NOT COPY THESE VALUES {Ka(f;rv?Pxf})CgLi-3');
4define('LOGGED_IN_KEY',    'W(50,{W^,OPB%PB<JF DO NOT COPY THESE VALUES 2;y&,2m%3]R6DUth[;88');
5define('NONCE_KEY',        'll,4UC)7ua+8<!4VM+ DO NOT COPY THESE VALUES #`DXF+[$atzM7 o^-C7g');
6define('AUTH_SALT',        'koMrurzOA+|L_lG}kf DO NOT COPY THESE VALUES 07VC*Lj*lD&?3w!BT#-');
7define('SECURE_AUTH_SALT', 'p32*p,]z%LZ+pAu:VY DO NOT COPY THESE VALUES C-?y+K0DK_+F|0h{!_xY');
8define('LOGGED_IN_SALT',   'i^/G2W7!-1H2OQ+t$3 DO NOT COPY THESE VALUES t6**bRVFSD[Hi])-qS`|');
9define('NONCE_SALT',       'Q6]U:K?j4L%Z]}h^q7 DO NOT COPY THESE VALUES 1% ^qUswWgn+6&xqHN&%');

这些是配置行,我们可以直接粘贴到我们的配置文件中,以设置安全密钥。

现在,打开WordPress配置文件:

1nano /var/www/html/wp-config.php

查找包含这些设置的 dummy 值的部分,它将看起来像这样:

 1[label /var/www/html/wp-config.php]
 2. . .
 3
 4define('AUTH_KEY',         'put your unique phrase here');
 5define('SECURE_AUTH_KEY',  'put your unique phrase here');
 6define('LOGGED_IN_KEY',    'put your unique phrase here');
 7define('NONCE_KEY',        'put your unique phrase here');
 8define('AUTH_SALT',        'put your unique phrase here');
 9define('SECURE_AUTH_SALT', 'put your unique phrase here');
10define('LOGGED_IN_SALT',   'put your unique phrase here');
11define('NONCE_SALT',       'put your unique phrase here');
12
13. . .

删除这些行并粘贴您从命令行复制的值:

 1[label /var/www/html/wp-config.php]
 2. . .
 3
 4define('AUTH_KEY',         'VALUES COPIED FROM THE COMMAND LINE');
 5define('SECURE_AUTH_KEY',  'VALUES COPIED FROM THE COMMAND LINE');
 6define('LOGGED_IN_KEY',    'VALUES COPIED FROM THE COMMAND LINE');
 7define('NONCE_KEY',        'VALUES COPIED FROM THE COMMAND LINE');
 8define('AUTH_SALT',        'VALUES COPIED FROM THE COMMAND LINE');
 9define('SECURE_AUTH_SALT', 'VALUES COPIED FROM THE COMMAND LINE');
10define('LOGGED_IN_SALT',   'VALUES COPIED FROM THE COMMAND LINE');
11define('NONCE_SALT',       'VALUES COPIED FROM THE COMMAND LINE');
12
13. . .

接下来,我们需要在文件开始时修改某些数据库连接设置,您需要调整我们在MySQL中配置的数据库名称、数据库用户和相关密码。

我们需要做的另一个变化是设置WordPress应该使用的方法来写到文件系统. 由于我们已经给了Web服务器允许写到它需要的地方,我们可以明确地将文件系统方法设置为直接

此设置可在数据库连接设置下方或文件中的任何其他位置添加:

 1[label /var/www/html/wp-config.php]
 2. . .
 3
 4define('DB_NAME', 'wordpress');
 5
 6/** MySQL database username */
 7define('DB_USER', 'wordpressuser');
 8
 9/** MySQL database password */
10define('DB_PASSWORD', 'password');
11
12. . .
13
14define('FS_METHOD', 'direct');

保存并关闭文件,当你完成。

步骤 6:通过 Web 界面完成安装

现在,服务器配置已经完成,我们可以通过Web界面完成安装。

在您的网页浏览器中,导航到您的服务器的域名或公共IP地址:

1http://server_domain_or_IP

选择您想要使用的语言:

WordPress language selection

接下来,您将进入主设置页面。

选择您的WordPress网站的名称,并选择一个用户名(不建议为安全目的选择admin)。

输入您的电子邮件地址,然后选择是否希望阻止搜索引擎索引您的网站:

WordPress setup installation

当您点击前进时,您将被带到一个提示您登录的页面:

WordPress login prompt

一旦您登录,您将被带到WordPress管理仪表板:

WordPress login prompt

升级WordPress

随着 WordPress 升级变得可用,您将无法通过使用当前权限的界面来安装它们。

我们在这里选择的权限旨在为升级之间99%的次数提供安全性和可用性之间的良好平衡,但它们对软件自动应用更新来说太限制了。

当一个更新变得可用时,请重新登录您的服务器作为您的sudo用户. 暂时让 Web 服务器的流程访问整个文档根:

1sudo chown -R www-data /var/www/html

现在,回到WordPress管理面板并应用更新。

完成后,再次锁定权限以确保安全:

1sudo chown -R sammy /var/www/html

这应该只在应用升级到WordPress本身时是必要的。

结论

WordPress 应该安装并准备好使用! 下一步的一些常见步骤是为您的帖子选择 permalinks 设置(可以在设置 > Permalinks中找到)或选择一个新主题(在外观 > 主题中)。

Published At
Categories with 技术
comments powered by Disqus