如何为所有Drupal多站点批量安装并启用同一模块
批量处理Drupal多站点的模块安装与启用
一、Composer 批量安装模块
如果你的多站点共享根目录下的composer.json(即共用核心和依赖库),直接运行一次composer require drupal/module_name即可将模块安装到所有站点共用的modules/contrib目录,无需逐个站点操作。
如果每个站点有独立的composer.json,可以用bash脚本批量执行:
#!/bin/bash # 替换为你的多站点根目录路径 SITES_DIR="/var/www/html/sites" MODULE="drupal/module_name" # 遍历所有站点目录 for site in "$SITES_DIR"/*; do if [ -d "$site" ] && [ -f "$site/composer.json" ]; then echo "为站点 $(basename "$site") 安装模块..." cd "$site" && composer require "$MODULE" cd - > /dev/null fi done
二、Drush 批量启用模块
结合DDEV和Drush,用脚本批量给所有站点启用模块:
#!/bin/bash MODULE="module_name" # 替换为你的实际站点名称列表 SITES=("site1" "site2" "site3" "site4") for site in "${SITES[@]}"; do echo "为站点 $site 启用模块 $MODULE..." ddev drush -l "$site" en "$MODULE" -y done
如果多站点都在同一个DDEV项目的sites目录下,也可以自动遍历站点文件夹:
#!/bin/bash MODULE="module_name" SITES_DIR="./sites" # 排除默认的all和default目录,仅处理自定义站点 for site_dir in "$SITES_DIR"/*; do site=$(basename "$site_dir") if [ "$site" != "all" ] && [ "$site" != "default" ] && [ -d "$site_dir" ]; then echo "处理站点: $site" ddev drush -l "$site" en "$MODULE" -y fi done
三、合并脚本:一次完成安装+启用
把安装和启用步骤整合,一键完成所有操作:
#!/bin/bash MODULE_NAME="module_name" COMPOSER_MODULE="drupal/$MODULE_NAME" SITES_DIR="./sites" # 第一步:Composer安装模块(共用核心时只需执行一次) echo "通过Composer安装模块 $COMPOSER_MODULE..." composer require "$COMPOSER_MODULE" # 第二步:批量启用模块到所有站点 echo "为所有站点启用模块 $MODULE_NAME..." for site_dir in "$SITES_DIR"/*; do site=$(basename "$site_dir") if [ "$site" != "all" ] && [ "$site" != "default" ] && [ -d "$site_dir" ]; then echo "处理站点: $site" ddev drush -l "$site" en "$MODULE_NAME" -y fi done echo "所有操作完成。"
注意事项
- 确保DDEV项目已启动(
ddev start),否则Drush命令无法正常执行。 - 若部分站点已安装目标模块,Drush会自动跳过,不会抛出错误。
- 脚本中的路径、站点名称需根据你的实际环境调整。
内容的提问来源于stack exchange,提问作者Albert
相关产品推荐
相关产品推荐

