
Drupal 以统一的方式存储站点的配置信息——包括启用的模块列表、内容类型、分类词汇表、字段以及视图等。
不建议在生产环境(线上网站)中直接修改配置。系统的设计目的是让您可以轻松地使用当前配置,在本地测试修改,将更改导出为文件,并部署到生产环境。您网站的配置可以作为代码库的一部分保存,并纳入版本控制系统。
默认情况下,“活动”配置存储在数据库中(表名为 “config”)。这样做是出于性能和安全性的考虑。这是当前站点的完整配置。配置可以导出和导入为 YAML 文件,既可以完整导出,也可以单独导出部分配置,使用 Drush、Drupal Console 或 Configuration Manager 模块中的配置命令实现(详见下文)。
在不同环境(如开发、测试、生产)之间导出和导入配置,可以让您方便地在非生产环境中进行修改和验证。
这使您能够从一个环境部署配置到另一个环境(为安全起见,Drupal 在导入前会通过比较 UUID 来确认站点是否相同)。


下面是一个简单的示例,展示如何在一个环境中配置站点名称并在另一个环境中进行部署。该示例包括手动上传和下载 tar.gz 配置文件,但您也可以通过将站点的 同步目录 置于版本控制下,实现自动同步。
1. 安装 Drupal 8。我们将此站点称为 “生产站点(Production)”。
2. 在另一个 URL 上复制该站点,这将是 “开发站点(Development)”。复制时请使用相同的源代码、文件目录和生产站点的数据库转储。请记住,配置系统用于在同一网站的副本之间同步设置——这意味着它依赖于匹配的 UUID——因此您必须首先完整复制网站和数据库(不过,在开始添加内容之前,不一定要这样做)。在 Drupal 7 中,您只需数据库转储和上传的文件;但在 Drupal 8 中,文件目录中的其他部分(包括配置文件和 PHP 文件)也同样重要。
完成后,您可以基于现有配置安装新站点,因此复制站点将像从导出的配置安装新站点一样简单。在此问题修复之前,您仍然需要完整的站点副本。


本页面假设您已经熟悉 Drush 的使用,并且已安装其最新版本。
以下示例演示了如何将开发站点的更改导出到生产(上线)站点。反向操作同样可行。
1. 安装 Drupal 8。我们将此站点称为 “Live(生产站点)”。
2. 创建该站点的副本(我们将其称为 “Development(开发站点)”)。复制时请使用与生产站点相同的源代码、文件目录以及导入的数据库转储文件。在 Drupal 7 中,您只需数据库转储和上传的文件;但在 Drupal 8 中,文件目录中的其他部分也非常重要,包括配置文件和 PHP 文件。因此,请确保创建完整的站点副本。
完成此操作后,您将能够基于现有配置安装新站点,这样复制站点就像从导出的配置安装新站点一样简单。在此问题修复之前,您仍然需要完整的站点副本。
3. 在 “开发站点” 上,进入 admin/config/system/site-information
,修改站点名称。


默认情况下,Drupal 将配置同步目录放置在站点文件目录中,并使用哈希值作为目录名称的一部分,例如 sites/default/files/config_HASH。
HASH 是一串相当长的随机字符。这使得通过互联网访问配置更加困难(但并非不可能)。安装完成后,可以更改同步目录的位置。
在生产站点上,如果您的账户具有相应的权限,建议将配置同步目录完全移动到站点根目录之外。由于您的同步目录应受版本控制,因此您的版本控制仓库的根目录应位于网站根目录的上一级。
在本地开发站点上,您可能希望更方便地访问配置文件,因此可以将目录移动到类似 sites/default/sync 的位置。
要移动目录,请打开您的 settings.php
文件。在文件末尾,Drupal 安装过程会写入一行,指定同步目录位于 sites/default/files/config_HASH
中。
如果缺少同步目录,可能会在 PHP 错误日志中看到以下消息:


请注意,默认情况下,Drupal 将配置管理信息存储在数据库中。要使基于文件系统的工作流程正常工作,您需要修改 settings.php
和 services.yml
文件。
必须在安装 Drupal 之前完成此操作,因为在切换到文件系统后,很难再返回到基于数据库的配置管理设置。 如果您需要在网站安装后启用基于文件的配置,必须首先导出配置并在启用文件配置之前,将副本保存在活动配置文件夹中。
注意: 您必须有单独的活动目录和暂存目录(根据以下配置)。对于基于文件的工作流程,仍然需要执行配置导入步骤。请参阅此 问题 —— 基于文件系统的工作流程在没有导入配置步骤的情况下,无法正确安装或删除模块。
1. 打开 settings.php
文件,找到“活动配置设置”部分。
2. 取消注释以 $settings['bootstrap_config_storage']
开头的行,以启用基于文件的配置存储。
并确保该行如下所示:


您已经创建了一个 Drupal 8 网站,并希望将其部署到服务器上;
或
您已在远程服务器上设置了 Drupal 8 网站,并希望在本地进行开发。
Drupal 8 的不同之处
在 Drupal 7 之前,这个过程相当简单:复制所有文件,复制数据库,就完成了。
而在 Drupal 8 中,新增了 CMI(配置管理,Configuration Management Initiative)系统,因此还需要额外处理配置同步。
如何同步您的网站
无论您是将网站从本地同步到服务器,还是反向同步,流程都是相同的。为便于说明,我们以下以从本地部署到远程服务器为例。
1. 在本地安装您的网站,可使用 Wamp、Xamp、Mamp 或任何其他 Web 服务器。
2. 将 Drupal 目录中的所有文件上传到服务器。您可以使用版本控制(如 Git、SVN 等)或通过 FTP 进行传输。
3. 不要复制 sites/default 中的 “settings.php” 文件。
4. 在远程服务器上创建一个新的数据库,并执行 Drupal 的全新安装。


Drupal 具有一项功能,可让您从同一个代码库中运行多个独立的网站。每个网站都有自己的数据库、配置、文件以及独立的域名或 URL。在本篇文档尚未完善之前,请参阅 Drupal 7 的相关文档。


本指南将介绍设置 Drupal 8 多站点所需的步骤。该指南仍在编写中,目前仅包含部分配置示例。还可以使用其他选项,例如 HTTPS、不同的 Web 服务器和数据库,以及更高级的虚拟主机配置等。
不过需要注意的是,使用 Aegir 托管系统 是更推荐的选择。它会为您完成所有繁重的配置任务,采用安全的最佳实践,包括自动为 Apache 和 Nginx 配置虚拟主机、添加 HTTPS 支持、运行 Composer 命令等。请参阅 平台设置文档(Aegir 中的 “平台” 一词即指多站点代码库)。
流程概述:
1. 安装一个 Drupal 8 实例,作为我们多站点环境的主站点。在本示例中,主站点名为 d8multisite,可通过 d8multisite.com 访问,并安装在 /var/www/d8multisite。
2. 在多站点中创建一个名为 site1 的网站,可通过 site1.d8multisite.com 访问。
3. 配置 site1 使其拥有独立于主站点的模块。


使用 Drupal 多站点安装的主要原因是:当您管理多个运行相同 Drupal 核心版本的网站时,可以节省大量时间。每当发布新的 Drupal 核心更新时,您只需在一份代码库上执行更新,而无需在每个网站上分别更新。但这种方式也有其缺点。不过,如果您使用 Aegir 托管系统,这些问题会得到缓解。
否则,手动管理多站点安装的复杂性和潜在问题需要相当高的技术水平。具备此水平的用户通常熟悉命令行操作,并且可以在不到两分钟的时间内通过命令行更新每个受管网站。而使用 Aegir 则更快,因为您可以将所有网站排入“点击式”更新队列,并将整个平台(在多站点环境中称为 Aegir 平台)迁移到更新的版本。任何更新失败的网站都会被自动回滚。
多站点基础知识
一个 Drupal 网站需要 Web 服务器程序(例如 Apache 或 IIS)、数据库程序(例如 MySQL 或 MSSQL)以及 PHP 解释器。每个网站的独特部分都保存在其数据库和代码库中。
更新 Drupal 核心本质上是替换您的代码库。数据库保持不变,只需在替换代码库后为每个网站运行一次更新脚本([YOURSITE/update.php])。
