如何在Ubuntu 20.04上用Nginx和LEMP建立WordPress多站点

1,911 阅读8分钟

简介

WordPress的多站点功能是一种独特的方式,可以在一个地方托管和管理一组网站,对于需要在一个主机下运行多个WordPress网站的项目或职位来说是非常有用的。多站点提供了从一个WordPress安装中创建多个WordPress网站的能力,每个网站都有一个单独的主题、一套插件和内容集合(通常是帖子和页面)。这一功能有助于减少维护和更新多个WordPress安装的开销,同时允许你托管可能互不相关的多个网站。

在本教程中,你将在Ubuntu 20.04 Droplet上使用子域建立一个WordPress多站点。你将创建的WordPress网站将有一个子域的网址,如**wp-site.yourdomain.com,但你的子域地址可以映射到一个外部域,如wp-site.net**,这样每个网站对访问你的多站点套件地址的用户来说看起来是独立的。

前提条件

本教程要求你有WordPress多站点的基本知识。以下文章可能有助于加深你对多站点的理解。

第一步 - 安装WordPress

在这个教程中,你需要访问一个在Ubuntu 20.04上运行LEMP栈的WordPress Droplet。你可以通过以下方式在Droplet上创建一个WordPress安装。

你也可以使用主机供应商上的WordPress安装来遵循本教程,但请记住,本教程的步骤将反映DigitalOcean Droplet上的WordPress多站点设置。

在安装WordPress之前,你需要为你的多站点安装中的每个预定的WordPress站点设置DNS记录。在本教程中,创建以下域名。

  • 网站1。

    域名: examplewp.com(主域名)

    这是在安装WordPress时创建的站点。

  • 站点2。

    外部域名:shoppingsite.com

    **子域名:**shoppingsite.example.com

  • 站点3。

    外部域名: companysite.org

    域名:companysite.example.com

第一个域名是主域名,WordPress将通过它被引用。请确保为所有三个域名设置DNS,使其指向托管WordPress的Droplet的IP地址。

在安装时,如果你选择使用带有LEMP堆栈的Droplet,请确保按照说明来设置你的数据库和用户。对于DigitalOcean的WordPress一键式安装,这已经为您配置好了。

在你的Droplet上安装WordPress后,让我们把文件所有权分配给用户www-data 。这对媒体上传和核心/插件/主题更新在WordPress中的工作至关重要。

通过命令行登录到您的Droplet,然后执行以下命令,用您的WordPress安装的完整路径替换突出显示的路径。

chown -R www-data:www-data /var/www/wordpress/

这个命令将授予www-data 用户读写权限,以便进行媒体上传和必要的更新。

在下一步,我们将进一步配置主域,然后从那里配置我们的多站点安装。

第2步 - 设置DNS通配符记录

让我们继续为主域添加一个DNS通配符记录。添加通配符记录允许在任何时候将更多的WordPress网站添加到你的多站点安装中,而不需要单个A记录。或者,你可以选择为每个子域添加一个新的A记录。

登录到您的DigitalOcean控制面板,导航到网络部分。编辑主域名,为这个域名创建一个指向Droplet的IP地址的通配符A记录。通配符记录是通过在主机名输入框中输入星号(*)来创建的,如以下截图所示。

DNS Control Panel - wildcard record

如果您将域名的DNS托管在一个主机提供商上,请使用注册商的网站设置通配符记录。

设置通配符记录后,对任何random-sub-domain.examplewp.com ,DNS查询应返回您的Droplet的IP地址。

第3步 - 启用多站点和创建其他站点

在这一节中,让我们现在启用我们的WordPress多站点并创建步骤1中提到的两个额外站点。

要开始这个过程,必须在wp-config.php 文件中定义一个PHP常量,以启用网络设置页面。

你可以在登录到你的WordPress Droplet时通过命令行编辑wp-config.php 文件。用你选择的命令行编辑器打开该文件。这里,我们将使用nano

nano /var/www/wordpress/wp-config.php

注释/* That's all, stop editing! Happy blogging. */ 或类似的文本之前添加以下代码。

/var/www/wordpress/wp-config.php

    /* Multisite settings */
    define( 'WP_ALLOW_MULTISITE', true );

保存并关闭该文件。如果你使用的是nano ,你可以用CTRL+X ,然后YENTER 来确认。

接下来,登录WordPress管理面板,导航到工具->网络设置。选择子域选项,根据需要修改网络标题,然后点击安装

WordPress Network Setup

你将看到在wp-config.php.htaccess 文件中添加两个代码块。因为我们使用的是Nginx,我们不需要使用建议的.htaccess ,所以你可以暂时忽略它。

复制wp-config.php 的代码,它看起来类似于下面的内容。

    define('MULTISITE', true);
    define('SUBDOMAIN_INSTALL', true);
    define('DOMAIN_CURRENT_SITE', 'examplewp.com');
    define('PATH_CURRENT_SITE', '/');
    define('SITE_ID_CURRENT_SITE', 1);
    define('BLOG_ID_CURRENT_SITE', 1);

接下来,打开wp-config.php 文件。

nano /var/www/wordpress/wp-config.php

包括你刚刚复制的代码片段,把它放在写有/* That's all, stop editing! Happy blogging. */ (或建议不要写在下面的变体文本)的注释之前。完成后保存该文件。

退出WordPress管理面板,然后再次登录。从左上角的管理工具栏,导航到我的网站>网络管理>网站

WordPress Toolbar

点击 "添加新"按钮,打开 "添加新网站"表格。下面的截图显示了我们的例子中购物网站所填写的细节。输入的网站地址将构成这个网站的子域。

Creating a new WordPress site

点击添加网站,创建的网站将通过http://shoppingsite.examplewp.com

重复这些步骤来创建第二个站点(在我们的例子中是companysite.examplewp.com )。

以下三个WordPress站点现在可以有自己的内容、主题和活跃的插件集。

  • examplewp.com
  • shoppingsite.examplewp.com
  • companysite.examplewp.com

第4步 - 设置域名映射

在这一步,让我们通过下载和启用WordPress MU域名映射插件,使多站点为每个WordPress站点使用一个单独的域名。这个第三方插件允许WordPress多站点的用户将他们的博客/网站映射到另一个域名。

要下载这个插件,请访问**"我的网站"->"网络管理"->"插件**",在你的主域名上选择**"添加新**",找到WordPress MU域名映射插件。

Plugins

安装该插件,然后点击WordPress MU域名映射插件下面的网络激活链接。进入设置->域名映射,对域名选项做如下修改。

  • 取消勾选远程登录
  • 勾选永久重定向
  • 取消勾选重定向管理页面到网站的原始域名

Domain mapping options

完成后点击保存。这些设置将所有对子域(如companysite.examplewp.com )的请求重定向到它们各自的外部域(如companysite.org ),包括管理页面(/wp-admin )。

在下一步,让我们根据每个网站的ID为其映射一个域名。有很多方法可以找到一个网站的ID,但为了更容易管理,你将创建一个简单的WordPress必用插件,在网站页面上显示一个额外的ID列。

通过SSH登录到你的WordPress Droplet,创建一个mu-plugins目录。

mkdir /var/www/wordpress/wp-content/mu-plugins

在这个目录中创建一个PHP文件。

nano /var/www/wordpress/wp-content/mu-plugins/wpms_blogid.php

接下来,将以下内容复制到你的wpms_blogid.php 文件。

/var/www/wordpress/wp-content/mu-plugins/wpms_blogid.php

    <?php
    add_filter( 'wpmu_blogs_columns', 'do_get_id' );
    add_action( 'manage_sites_custom_column', 'do_add_columns', 10, 2 );
    add_action( 'manage_blogs_custom_column', 'do_add_columns', 10, 2 );

    function do_add_columns( $column_name, $blog_id ) {
        if ( 'blog_id' === $column_name )
            echo $blog_id;
        return $column_name;
    }

    function do_get_id( $columns ) {
        $columns['blog_id'] = 'ID';
        return $columns;
    }

网站->所有网站部分现在应该显示一个额外的ID列。

ID

记下每个网站的ID值,然后进入设置->域名页面。输入网站的ID和网站的外部域名。例如,由于companysite 的ID是3,在这个页面上,网站ID应该是3,而域名应该是companysite.org

Mapping a site ID to a domain

如果你希望将网站的URL设置为www.companysite.org ,你可以添加一个 "www "前缀。对其他域名重复这些步骤。点击页面底部的 "保存"。

现在每个网站都将有自己的域名,而不是一个子域;即在浏览器中输入http://companysite.org ,将打开我的在线公司网站。你现在可以通过访问你的其他被映射的域名来检查这一点。你应该看到网站标题在页面的左上角发生了变化。

现在,每个网站都可以通过它自己的WordPress管理面板单独维护。

- `http://examplewp.com/wp-admin/`
- `http://shoppingsite.com/wp-admin/`
- `http://companysite.org/wp-admin/`

对核心/插件/主题的更新和插件/主题的安装应该从主域的网络管理页面进行。

- `http://examplewp.com/wp-admin/network/`

结论

在本教程中,你学到了如何在运行于Ubuntu 20.04和Nginx(LEMP栈)的WordPress网站上设置多站点功能。多站点功能使你能够在你的droplet上的一个WordPress安装中托管多个WordPress网站。你还学会了如何设置域名映射,它允许你的每个子站点通过一个自定义域名到达。

关于安装WordPress多站点功能的另一个过程,请访问我们的教程,在Apache上设置WordPress多站点