digipolisgent/robo-digipolis-drupal8

Drupal 8 网站的基本部署流程。

4.0.9 2024-03-27 14:40 UTC

README

Latest Stable Version Latest Unstable Version Total Downloads License

Build Status Maintainability Test Coverage PHP 7 ready

由 digipolis 使用,作为示例。

此包包含一个 RoboFileBase 类,您可以在自己的 RoboFile 中使用。所有命令都可以通过覆盖父方法来重写。

示例

<?php

use DigipolisGent\Robo\Drupal8\RoboFileBase;

class RoboFile extends RoboFileBase
{
    use \Robo\Task\Base\loadTasks;

    /**
     * @inheritdoc
     */
    public function digipolisDeployDrupal8(
        array $arguments,
        $opts = [
            'app' => 'default',
            'site-name' => 'Drupal',
            'profile' => 'standard',
            'force-install' => false,
            'config-import' => false,
            'existing-config' => false,
            'worker' => null,
        ]
    ) {
        $collection = parent::digipolisDeployDrupal8($arguments, $opts);
        $collection->taskExec('/usr/bin/custom-post-release-script.sh');
        return $collection;
    }
}

可用命令

根据上述示例,以下命令将可用

digipolis:backup-drupal8           Create a backup of files
(sites/default/files) and database.
digipolis:build-drupal8            Build a Drupal 8 site and package it.
digipolis:clean-dir                Partially clean directories.
digipolis:clear-op-cache           Command digipolis:database-backup.
digipolis:database-backup          Command digipolis:database-backup.
digipolis:database-restore         Command digipolis:database-restore.
digipolis:deploy-drupal8           Build a Drupal 8 site and push it to the
servers.
digipolis:download-backup-drupal8  Download a backup of files
(sites/default/files) and database.
digipolis:init-drupal8-remote      Install or update a drupal 8 remote site.
digipolis:install-drupal8          Install the D8 site in the current folder.
digipolis:package-project          Package a directory into an archive.
digipolis:push-package             Command digipolis:push-package.
digipolis:restore-backup-drupal8   Restore a backup of files
(sites/default/files) and database.
digipolis:sync-drupal8             Sync the database and files between two
Drupal 8 sites.
digipolis:update-drupal8           Executes D8 database updates of the D8 site
in the current folder.
digipolis:upload-backup-drupal8    Upload a backup of files
(sites/default/files) and database to a server.

多站点/站点别名

支持 Drupal 8 多站点。有两种实现方式

  1. 使用 Drupal 的 sites.php

此脚本可以解析 sites.php 中的站点别名,其中 $sites 数组的键是 URL,值是文件夹(位于网站根目录下的 sites/ 文件夹中)。

  1. 使用 properties.yml

您可以在 properties.yml 中定义站点别名,在 remote 键下以相同的方式:键是 URL,值是文件夹。例如

remote:
  aliases:
    example.com: default
    alias1.example.com: alias1
    alias2.example.com: alias2

您可以在 helpers 包的 Readme 中了解更多关于 properties.yml 文件的信息

多站点设置文件

如果您想链接每个多站点安装的设置文件(建议这样做,因为替代方案是将它们放在您的存储库中),您必须将这些链接添加到 properties.yml 中。同样适用于文件目录。

使用上述示例,您必须将以下内容添加到您的 properties.yml 中

remote:
  symlinks:
    # Settings file symlinks.
    - '${remote.configdir}/alias1/settings.php:${remote.webdir}/sites/alias1/settings.php'
    - '${remote.configdir}/alias2/settings.php:${remote.webdir}/sites/alias2/settings.php'
    # Files directories symlinks.
    - '${remote.filesdir}/alias1/public:${remote.webdir}/sites/alias1/files'
    - '${remote.filesdir}/alias2/public:${remote.webdir}/sites/alias2/files'

多站点的回滚

由于备份是在多站点部署开始时制作的,因此在部署过程中发生错误时,即使错误发生在第一个别名的部署过程中,也会回滚多站点的每个站点。因此,在上面的示例中,部署开始时,为 defaultalias1alias2 创建数据库备份。如果在 default 的部署过程中过程失败,则回滚过程将恢复 defaultalias1alias2 的数据库备份。同样适用于在 alias2 的部署过程中失败。部署按别名定义的顺序进行。

将新站点添加到现有设置

当将新站点添加到现有安装时,请确保所有设置文件和文件夹都已就绪(就像您在第一次正常安装时做的那样)。新添加的站点将经过安装过程,而现有的站点将保持不变。这意味着您不能同时更新一个子站点并添加另一个。您必须分别进行两次部署。

从现有数据库安装

这适用于“正常”和“多站点”安装。如果出于某种原因,您想从一个现有数据库(即非空数据库)创建新站点(不推荐),您可以这样做。只需将您需要的数据填充到数据库中,并触发部署。部署将检测到尚未有站点(因为您的服务器上没有代码),并触发安装脚本。一旦您的代码上传到您的服务器,安装脚本将能够连接到数据库。然后它将检测到其中已有数据,并跳过安装过程。这样,您的代码就上传到您的服务器,它将使用现有的数据库。如果您的数据库落后于您的代码(意味着您需要触发数据库更新),您必须执行第二次部署。

这也是原因之一,当向您的多站安装添加新站点时,现有的站点不会被更改。我们原本需要覆盖整个基础包(robo-digipolis-helpers)来检测多站中的哪个站点是新的,哪个是可能需要更新的现有站点。因此,当部署脚本检测到多站安装中至少有一个站点需要从头开始安装时,会触发多站安装中所有站点的安装脚本。如果安装脚本为现有站点之一运行,它将在其数据库中检测现有数据,并保持不变。对于新添加的站点,将没有数据(除非您手动将其输入数据库)并触发该特定站点的安装。

常见问题

  • 我们假设$config_directories['sync']的值相对于网站根目录。我们自行在其前面添加网站根目录的路径。
  • 如果有多个别名指向同一个文件夹,我们只使用数组中的第一个别名。请注意,例如,您的站点地图。