看了 Drupal 8 官方文档,并不是很详细。并且在源代码中的实例,也并不完整实用。

想要启用 Drupal 8 多站点,举例:

  • www.zenkr.test 主站
  • site1.zenkr.test 子站 1
  • site2.zenkr.test 子站 2

配置好环境

我们首先要把 Drupal 代码安装好。在 Nginx 中将 3 个域名都解析到 Drupal 的 主目录 (以 /path/to/drupal/ 为例)。

修改 sites.php

首先我们要先修改文件 sites/sites.php 文件。

  1. $sites['site1.zenkr.test'] = 'site1.zenkr.test';
  2. $sites['site2.zenkr.test'] = 'site2.zenkr.test';

其中前面的是域名,后面的是 sites 文件夹下面的对应目录名。

默认的主站就不需要配置了,默认安装在 default 文件夹下

创建文件夹

在 sites 文件夹下,分别创建 2 个子文件夹:

  • site1.zenkr.test
  • site2.zenkr.test
    并将目录权限均设置为 777

安装 Drupal

此时,分别输入 3 个网站的域名,分别安装。

在数据库前缀 prefix 配置上,建议主站 www_,子站1 site1_,子站2 site2_

分别安装配置好以后。继续。

主要工作已经完成

其实,现在已经是一套代码,分别运行 3 个独立的网站了。(数据表完全独立)

如果我们想创建一个站群,需要共享用户数据。那么还需要修改 settings.php 文件。

修改 settings.php

此时,在 default site1.zenkr.test site2.zenkr.test 下,分别产生了 settings.php 文件和 files 子目录。
如果我们希望 site1 site2 共享使用 www 的用户数据表,我们只需要修改子站配置文件即可。

修改 site1.zenkr.test/settings.php

  1. $databases['default']['default'] = array(
  2. // 'database' => 'mysql_database',
  3. // 'username' => 'mysql_username',
  4. // 'password' => 'mysql_password',
  5. 'prefix' => array(
  6. 'default' => 'site1_',
  7. 'users' => 'www_',
  8. 'user__roles' => 'www_',
  9. 'user__user_picture' => 'www_',
  10. 'users_data' => 'www_',
  11. 'users_field_data' => 'www_',
  12. 'sessions' => 'www_',
  13. ),
  14. // 'host' => 'db',
  15. // 'port' => '3306',
  16. // 'namespace' => 'Drupal\\Core\\Database\\Driver\\mysql',
  17. // 'driver' => 'mysql',
  18. );

site2的配置方法一样。修改好以后,主站和子站就共用用户数据表啦。

大功告成!