跳转到主要内容

标签(标签)

资源精选(342) Go开发(108) Go语言(103) Go(99) angular(82) LLM(75) 大语言模型(63) 人工智能(53) 前端开发(50) LangChain(43) golang(43) 机器学习(39) Go工程师(38) Go程序员(38) Go开发者(36) React(33) Go基础(29) Python(24) Vue(22) Web开发(20) Web技术(19) 精选资源(19) 深度学习(19) Java(18) ChatGTP(17) Cookie(16) android(16) 前端框架(13) JavaScript(13) Next.js(12) 安卓(11) 聊天机器人(10) typescript(10) 资料精选(10) NLP(10) 第三方Cookie(9) Redwoodjs(9) LLMOps(9) Go语言中级开发(9) 自然语言处理(9) PostgreSQL(9) 区块链(9) mlops(9) 安全(9) 全栈开发(8) ChatGPT(8) OpenAI(8) Linux(8) AI(8) GraphQL(8) iOS(8) 软件架构(7) Go语言高级开发(7) AWS(7) C++(7) 数据科学(7) whisper(6) Prisma(6) 隐私保护(6) RAG(6) JSON(6) DevOps(6) 数据可视化(6) wasm(6) 计算机视觉(6) 算法(6) Rust(6) 微服务(6) 隐私沙盒(5) FedCM(5) 语音识别(5) Angular开发(5) 快速应用开发(5) 提示工程(5) Agent(5) LLaMA(5) 低代码开发(5) Go测试(5) gorm(5) REST API(5) 推荐系统(5) WebAssembly(5) GameDev(5) CMS(5) CSS(5) machine-learning(5) 机器人(5) 游戏开发(5) Blockchain(5) Web安全(5) Kotlin(5) 低代码平台(5) 机器学习资源(5) Go资源(5) Nodejs(5) PHP(5) Swift(5) 智能体(4) devin(4) Blitz(4) javascript框架(4) Redwood(4) GDPR(4) 生成式人工智能(4) Angular16(4) Alpaca(4) 编程语言(4) SAML(4) JWT(4) JSON处理(4) Go并发(4) kafka(4) 移动开发(4) 移动应用(4) security(4) 隐私(4) spring-boot(4) 物联网(4) nextjs(4) 网络安全(4) API(4) Ruby(4) 信息安全(4) flutter(4) 专家智能体(3) Chrome(3) CHIPS(3) 3PC(3) SSE(3) 人工智能软件工程师(3) LLM Agent(3) Remix(3) Ubuntu(3) GPT4All(3) 软件开发(3) 问答系统(3) 开发工具(3) 最佳实践(3) RxJS(3) SSR(3) Node.js(3) Dolly(3) 移动应用开发(3) 低代码(3) IAM(3) Web框架(3) CORS(3) 基准测试(3) Go语言数据库开发(3) Oauth2(3) 并发(3) 主题(3) Theme(3) earth(3) nginx(3) 软件工程(3) azure(3) keycloak(3) 生产力工具(3) gpt3(3) 工作流(3) C(3) jupyter(3) 认证(3) prometheus(3) GAN(3) Spring(3) 逆向工程(3) 应用安全(3) Docker(3) Django(3) R(3) .NET(3) 大数据(3) Hacking(3) 渗透测试(3) C++资源(3) Mac(3) 微信小程序(3) Python资源(3) JHipster(3) 大型语言模型(2) 语言模型(2) 可穿戴设备(2) JDK(2) SQL(2) Apache(2) Hashicorp Vault(2) Spring Cloud Vault(2) Go语言Web开发(2) Go测试工程师(2) WebSocket(2) 容器化(2) AES(2) 加密(2) 输入验证(2) ORM(2) Fiber(2) Postgres(2) Gorilla Mux(2) Go数据库开发(2) 模块(2) 泛型(2) 指针(2) HTTP(2) PostgreSQL开发(2) Vault(2) K8s(2) Spring boot(2) R语言(2) 深度学习资源(2) 半监督学习(2) semi-supervised-learning(2) architecture(2) 普罗米修斯(2) 嵌入模型(2) productivity(2) 编码(2) Qt(2) 前端(2) Rust语言(2) NeRF(2) 神经辐射场(2) 元宇宙(2) CPP(2) 数据分析(2) spark(2) 流处理(2) Ionic(2) 人体姿势估计(2) human-pose-estimation(2) 视频处理(2) deep-learning(2) kotlin语言(2) kotlin开发(2) burp(2) Chatbot(2) npm(2) quantum(2) OCR(2) 游戏(2) game(2) 内容管理系统(2) MySQL(2) python-books(2) pentest(2) opengl(2) IDE(2) 漏洞赏金(2) Web(2) 知识图谱(2) PyTorch(2) 数据库(2) reverse-engineering(2) 数据工程(2) swift开发(2) rest(2) robotics(2) ios-animation(2) 知识蒸馏(2) 安卓开发(2) nestjs(2) solidity(2) 爬虫(2) 面试(2) 容器(2) C++精选(2) 人工智能资源(2) Machine Learning(2) 备忘单(2) 编程书籍(2) angular资源(2) 速查表(2) cheatsheets(2) SecOps(2) mlops资源(2) R资源(2) DDD(2) 架构设计模式(2) 量化(2) Hacking资源(2) 强化学习(2) flask(2) 设计(2) 性能(2) Sysadmin(2) 系统管理员(2) Java资源(2) 机器学习精选(2) android资源(2) android-UI(2) Mac资源(2) iOS资源(2) Vue资源(2) flutter资源(2) JavaScript精选(2) JavaScript资源(2) Rust开发(2) deeplearning(2) RAD(2)

category

The following guide will highlight the manual steps required to set up a Drupal multisite. This guide is a work in progress with only some example configurations presented. Other options are available, such as HTTPS, other Web servers and databases, and more refined virtual host configurations, etc.

Alternatively use the Aegir hosting system. It does most of the heavy lifting and uses secure best practices, including automatically configuring virtual hosts for both Apache and Nginx, adding HTTPS support, running Composer commands, etc. See the documentation for setting up a "platform", Aegir-speak for a multisite codebase.

Note: Official stable Aegir releases will not install on recent stable Debian or Ubuntu OSes until there's a new release available as support for these are only in development branches.  See #3246691: Create an Aegir 3.20 release for recent stable Debian & Ubuntu LTS for details.

Overview of the process

  1. Install a Drupal instance that will act as the root site for our multisite instance. In our example, the root site will be called dmultisite, will be reachable at dmultisite.com, and will be installed at /var/www/dmultisite
  2. Set up a site within the multisite called site1 which is reachable at site1.dmultisite.com
  3. Configure site1 to have its own modules outside of the root site.

Step 1: Instantiate the master site

To begin the process, install a supported version of Drupal 9 or later on your server. Read the docs on installing Drupal if you are not familiar.

In this example, we install Drupal with the following steps:

1.1: Create a database for the multisite root site, ex: dmultisite.

1.2: Download and extract a copy of Drupal into your web directory.

1.3: Create a virtual host definition for the root site. Read about virtual host configurations. An example of an Apache virtual host configuration is as follows. For Nginx, see the official recipe.

<VirtualHost *:80>

  # virtual host configuration for Drupal 8 multisite root site

  ServerAdmin me@domain.com
  DocumentRoot /var/www/dmultisite
  ServerName dmultisite.com
  ServerAlias www.dmultisite.com
  
  <Directory />
    Options FollowSymLinks
    AllowOverride None
  </Directory>
  
  <Directory /var/www/dmultisite>
    Options Indexes FollowSymLinks MultiViews
    AllowOverride All
    Order allow,deny
    Allow from all
  </Directory>

  ErrorLog ${APACHE_LOG_DIR}/dmultisite_error.log
  LogLevel warn
  CustomLog ${APACHE_LOG_DIR}/dmultisite_access.log combined

</VirtualHost>

1.4: Install Drupal by visiting dmultisite.com and follow the install UI.

Step 2: Configure the first site for the multisite

Now that we have the root site set up, we can begin configuring our first site called site1. Here are the steps in this process:

2.1: Create a folder for site1 in your multisite: /dmultisite/sites/site1.dmultisite.com

2.2: Create a database for site1, ex: dmultisite_site1

2.3: Make a copy of /dmultisite/sites/example.sites.php called /dmultisite/sites/sites.php

2.4: Edit sites.php so the end of the file looks like this:

# make the root drupal site aware of site1:
$sites['site1.dmultisite.com'] = 'site1.dmultisite.com';

2.5: Create a virtual host for site1. Note that this virtual host should point to the root site, not the site's subdirectory. Note that you can also forego creating a new virtual host configuration for this site and just the new site as a ServerAlias to the root site. In this Apache example, we will, however, create a separate virtual host for site1:

<VirtualHost *:80>
  ServerAdmin me@domain.com
  DocumentRoot /var/www/dmultisite
  ServerName site1.dmultisite.com
  
  <Directory />
    Options FollowSymLinks
    AllowOverride None
  </Directory>
  
  <Directory /var/www/dmultisite>
    Options Indexes FollowSymLinks MultiViews
    AllowOverride All
    Order allow,deny
    Allow from all
  </Directory>

  ErrorLog ${APACHE_LOG_DIR}/site1-dmultisite_error.log
  LogLevel warn
  CustomLog ${APACHE_LOG_DIR}/site1-dmultisite_error.log combined

</VirtualHost>

2.6: Copy /dmultisite/sites/default/default.settings.php to the new site's directory as settings.php:

#from the drupal root folder
cp sites/default/default.settings.php sites/site1.dmultisite.com/settings.php

2.7: Finish the Drupal installation process for site1 by visiting the site's domain. If this shows up the first site you're not expecting, visit specifically '/core/install.php'.

You can repeat these steps each time you want to build a site in your multisite. You can also use domains like example.com and site1.anotherdomain.com. More details on domains, URLs, and sites subdirectory names.

Step 3: Enable per-site modules

Installation of per-site modules in the manner described below will not allow them to be managed via composer and any updates in the future will need to be done manually. It is advised to only implement this approach for custom modules. If you would like to have per-site contributed modules which are managed via composer, you can use the configuration management system and config split.

In some cases, you may want one of your sites within your multisite to have its own modules. To enable this, you simply need to create the appropriate folders within the target site’s folder. See Multisite folder structure in Drupal.

In this example, we will enable site1 to have its own modules:

  1. Create a ‘modules’ folder in site1’s subdirectory: /dmultisite/sites/site1.dmultisite.com/modules
  2. Give apache write access to this folder with chown www-data /dmultisite/sites/site1.dmultisite.com/modules
  3. Test it out:
    1. Move out of site1’s subdirectory (the root site directory) and install the Pathauto module
    2. Move into site1’s subdirectory and install the Display Suite module
    3. Visit both sites and confirm that the Pathauto module is available in both the sites and the Display Suite module is only available in site1

Note: The assumption here is that you can do this with themes, libraries, and files. More testing and documentation is needed here.

Using drush in a multisite

You can use the -l option (drush -l example.com command) or the site alias (drush @alias command).

To check what aliases are used, run drush site:alias.

An example of its output could be:

'@sub1.dev':
  root: /var/www/mydomain.com/web
  uri: 'https://sub1.mydomain.com'
'@default.dev':
  root: /var/www/mydomain.com/web
  uri: 'https://sub2.mydomain.com'
'@third.dev':
  root: /var/www/mydomain.com/web
  uri: 'https://thirddomain.com'

And the right drush command could be drush @sub1 updb.
 

Note: we are not using ".dev" in the alias.

Related Content