platformsh/drupal9-multisite

此模板基于 "Drupal 推荐" Composer 项目,为 Platform.sh 构建多站点的 Drupal 9 配置。

dev-master 2024-09-21 19:35 UTC

This package is auto-updated.

Last update: 2024-09-21 19:35:40 UTC


README

Platform.sh 的 Drupal 9 多站点

贡献,请求功能或查看我们的资源

加入我们的社区       文档       博客       报告错误       请求功能

Open issues    Open PRs    License   

https://raw.githubusercontent.com/platformsh/template-builder/master/templates/drupal9/.platform.template.yaml

内容

关于       入门       迁移       学习       贡献      

关于

此模板使用 "Drupal 推荐" Composer 项目在多站点配置中构建 Drupal 9,从相同的代码库创建三个子站点安装。

它已预先配置使用 MariaDB 和 Redis 进行缓存。Drupal 安装程序将跳过请求数据库凭据,因为它们已经提供。

它还包括说明和脚本,以帮助设置额外的多站点实例,尽管根据您的具体需求,可能需要一些定制。

Drupal 是一个灵活且可扩展的基于 PHP 的 CMS 框架,能够在单个代码库上托管多个站点。

特性

  • PHP 8.0
  • MariaDB 10.4
  • Redis 6
  • 包含Drush
  • 已预配置多站点
  • 自动TLS证书
  • 基于Composer的构建

入门

部署

快速入门

在Platform.sh上部署此模板的最快方法是点击下面的按钮。这将自动为您创建一个新的项目并初始化存储库。

Deploy on Platform.sh


您也可以使用以下命令快速在本地上重建此项目

composer create-project platformsh/drupal9-multisite -s dev

注意

Platform.sh模板优先考虑上游发布版本,而不是我们自己的。尽管如此,我们独立于这些上游定期更新模板依赖项。因此,模板存储库不包含发布版本。这可能会在未来改变,但在此之前,使用-s dev标志是必要的,以便使用composer create-project

其他部署选项

对于下面的所有其他选项,首先克隆此存储库

git clone https://github.com/platformsh-templates/drupal9-multisite

如果您尝试从GitHub部署,您可以通过点击本页顶部的使用此模板按钮在您自己的命名空间中首先生成此存储库的副本。

然后,您可以使用git clone git@github.com:YOUR_NAMESPACE/drupal9-multisite.git在本地上克隆它的副本。

直接从命令行部署到Platform.sh
  1. 创建免费试用版

    在Platform.sh上注册30天的免费试用。完成注册后,选择<强>从头创建项目选项。为您项目命名,并选择您希望部署的区域。至于生产环境选项,请确保将其与此存储库的设置相匹配,或者与您在本地更新默认分支所设置的相匹配。

  2. 安装Platform.sh CLI

    Linux/OSX

    curl -sS https://platform.sh/cli/installer | php

    Windows

    curl -f https://platform.sh/cli/installer -o cli-installer.php
    php cli-installer.php

    您可以通过登录(platformsh login)并列出您的项目(platform project:list)来验证安装。

  3. 设置项目远程

    运行platform project:list命令以查找您的PROJECT_ID

    +---------------+------------------------------------+------------------+---------------------------------+
    | ID            | Title                              | Region           | Organization                    |
    +---------------+------------------------------------+------------------+---------------------------------+
    | PROJECT_ID    | Your Project Name                  | xx-5.platform.sh | your-username                   |
    +---------------+------------------------------------+------------------+---------------------------------+

    然后,在您的本地副本内,运行命令platform project:set-remote PROJECT_ID

  4. 推送

    git push platform DEFAULT_BRANCH
与GitHub存储库集成并部署拉取请求
  1. 创建免费试用版

    在Platform.sh上注册30天的免费试用。完成注册后,选择<强>从头创建项目选项。为您项目命名,并选择您希望部署的区域。至于生产环境选项,请确保将其与您在https://YOUR_NAMESPACE/nextjs-drupal上设置的相匹配。

  2. 安装Platform.sh CLI

    Linux/OSX

    curl -sS https://platform.sh/cli/installer | php

    Windows

    curl -f https://platform.sh/cli/installer -o cli-installer.php
    php cli-installer.php

    您可以通过登录(platformsh login)并列出您的项目(platform project:list)来验证安装。

  3. 设置集成

    请参阅GitHub集成文档以完成将存储库连接到Platform.sh上的项目的连接。为此,您需要在GitHub上创建访问令牌。

与GitLab存储库集成并部署合并请求
  1. 创建免费试用版

    在Platform.sh上注册30天的免费试用。完成注册后,选择<强>从头创建项目选项。为您项目命名,并选择您希望部署的区域。至于生产环境选项,请确保将其与此存储库的设置相匹配,或者与您在本地更新默认分支所设置的相匹配。

  2. 安装Platform.sh CLI

    Linux/OSX

    curl -sS https://platform.sh/cli/installer | php

    Windows

    curl -f https://platform.sh/cli/installer -o cli-installer.php
    php cli-installer.php

    您可以通过登录(platformsh login)并列出您的项目(platform project:list)来验证安装。

  3. 创建存储库

    在GitLab上创建一个新的存储库,将其设置为本地副本的新远程,并推送到默认分支。

  4. 设置集成

    请参阅GitLab集成文档以完成将存储库连接到Platform.sh上的项目的连接。为此,您需要在GitLab上创建访问令牌。

与Bitbucket存储库集成并部署拉取请求
  1. 创建免费试用版

    在Platform.sh上注册30天的免费试用。完成注册后,选择<强>从头创建项目选项。为您项目命名,并选择您希望部署的区域。至于生产环境选项,请确保将其与此存储库的设置相匹配,或者与您在本地更新默认分支所设置的相匹配。

  2. 安装Platform.sh CLI

    Linux/OSX

    curl -sS https://platform.sh/cli/installer | php

    Windows

    curl -f https://platform.sh/cli/installer -o cli-installer.php
    php cli-installer.php

    您可以通过登录(platformsh login)并列出您的项目(platform project:list)来验证安装。

  3. 创建存储库

    在Bitbucket上创建一个新的存储库,将其设置为本地副本的新远程,并推送到默认分支。

  4. 设置集成

    请参阅Bitbucket集成文档,以完成将仓库连接到Platform.sh项目。为此,您需要在Bitbucket上创建访问令牌。

安装后

每个子站独立安装。按照配置,该项目为每个子站使用一个子域名。对于每个子站,按照正常流程运行Drupal安装程序。您不需要提供数据库凭据,因为这些凭据已经提供。

本地开发

本节提供了在本地运行drupal9-multisite模板的说明,该模板连接到Platform.sh活动环境上的实时数据库实例。

在所有使用Platform.sh进行开发的情况下,重要的是要在隔离环境中开发 - 不要在本地开发时连接到生产环境上的数据。以下每个选项都假设您已经将此模板部署到Platform.sh,以及以下起始命令

$ platform get PROJECT_ID
$ cd project-name
$ platform environment:branch updates
Drupal:使用ddev

ddev提供了一个与Platform.sh的集成,使得在本地开发Drupal变得简单。请查阅提供者文档以获取最新信息。

一般来说,步骤如下

  1. 安装ddev.
  2. 已提供配置文件.ddev/providers/platform.yaml,因此您不需要运行ddev config
  3. 通过管理控制台获取组织API令牌
  4. 更新ddev全局配置文件以使用您刚刚获取的令牌
    web_environment:
    - PLATFORMSH_CLI_TOKEN=abcdeyourtoken`
  5. 运行ddev restart
  6. 使用platform project:info获取项目ID。如果您尚未将本地仓库与项目连接(默认情况下,源集成会这样做),您可以运行platform project:list以定位项目ID,然后运行platform project:set-remote PROJECT_ID以配置本地Platform.sh。
  7. 更新当前设置的.ddev/providers/platform.yaml文件
    environment_variables:
    project_id: PROJECT_ID
    environment: CURRENT_ENVIRONMENT
    application: drupal
  8. 使用ddev pull platform获取当前环境的数据
  9. 完成工作后,运行ddev stopddev poweroff
Drupal:使用Lando

Lando支持配置在Platform.sh上运行的PHP应用程序,并在本地构建过程中通过其自己的食谱和插件从相同的容器注册中心获取数据。

  1. 安装Lando.
  2. 确保Docker已经运行 - Lando会尝试为您启动Docker,但最好在开始之前在后台运行。
  3. 使用lando start命令启动您的应用程序和服务。
  4. 要获取来自Platform.sh环境的最新数据(服务挂载),请运行命令lando pull
  5. 如果您已更新Platform.sh配置文件,请运行命令lando rebuild
  6. 完成工作后,运行lando stoplando poweroff

注意

对于上述许多步骤,如果您不在项目目录中或环境与现有拉取请求相关联,您可能需要包含CLI标志-p PROJECT_ID-e ENVIRONMENT_ID

迁移

以下步骤概述了迁移应用程序到Platform.sh的重要步骤 - 例如,添加所需的配置文件和依赖项。并非每个步骤都适用于每个人的迁移。这些步骤实际上假设可能的最早起点 - 本地没有任何代码,并且此模板仓库将完全从头开始重建。

如果您已经有一些想要迁移的代码,请专注于与您的应用程序最相关的步骤,并跳过第一部分。

入门

假设您的起点没有任何本地代码,以下步骤将设置一个起始仓库,我们可以开始对其进行更改以重建此模板并将数据迁移到 Platform.sh。如果您已经有了一个尝试迁移的代码库,请进行到下一个步骤 - 添加和更新文件 - 并将任何对默认分支 main 的引用替换为其他分支名称。

$ mkdir drupal9-multisite && cd drupal9-multisite
$ git init
$ git remote add upstream https://github.com/drupal/recommended-project.git
$ git branch -m main
$ git fetch --all --depth=2
$ git fetch --all --tags
$ git merge --allow-unrelated-histories -X theirs 9.3.9

添加和更新文件

在此阶段,需要添加或修改您的仓库中的一些文件。其中一些文件明确配置了应用程序在 Platform.sh 上构建和部署的方式,而其他一些则只是修改您可能已经在本地拥有的文件,在这种情况下,您需要复制这些更改。

打开下面的下拉菜单,查看您在迁移过程中需要复制的所有 添加的更新的 文件。

查看文件

依赖项和配置

有时,在 Platform.sh 上部署时,有必要安装额外的依赖项并修改上游项目的配置。在这种情况下,我们将尽可能保持这些修改的最小化。运行以下命令以复现模板中的依赖项。

$ composer require platformsh/config-reader drush/drush drupal/redis
$ composer config allow-plugins.composer/installers true --no-plugins
$ composer config allow-plugins.drupal/core-composer-scaffold true --no-plugins
$ composer config allow-plugins.drupal/core-project-message true --no-plugins
$ composer config allow-plugins.cweagans/composer-patches true --no-plugins 

部署到Platform.sh

您的仓库现在已拥有部署到 Platform.sh 所需的所有代码。

直接从命令行部署到Platform.sh
  1. 创建免费试用版

    在Platform.sh上注册30天的免费试用。完成注册后,选择<强>从头创建项目选项。为您项目命名,并选择您希望部署的区域。至于生产环境选项,请确保将其与此存储库的设置相匹配,或者与您在本地更新默认分支所设置的相匹配。

  2. 安装Platform.sh CLI

    Linux/OSX

    curl -sS https://platform.sh/cli/installer | php

    Windows

    curl -f https://platform.sh/cli/installer -o cli-installer.php
    php cli-installer.php

    您可以通过登录(platformsh login)并列出您的项目(platform project:list)来验证安装。

  3. 设置项目远程

    运行platform project:list命令以查找您的PROJECT_ID

    +---------------+------------------------------------+------------------+---------------------------------+
    | ID            | Title                              | Region           | Organization                    |
    +---------------+------------------------------------+------------------+---------------------------------+
    | PROJECT_ID    | Your Project Name                  | xx-5.platform.sh | your-username                   |
    +---------------+------------------------------------+------------------+---------------------------------+

    然后,在您的本地副本内,运行命令platform project:set-remote PROJECT_ID

  4. 推送

    git push platform DEFAULT_BRANCH
与GitHub存储库集成并部署拉取请求
  1. 创建免费试用版

    在Platform.sh上注册30天的免费试用。完成注册后,选择<强>从头创建项目选项。为您项目命名,并选择您希望部署的区域。至于生产环境选项,请确保将其与您在https://YOUR_NAMESPACE/nextjs-drupal上设置的相匹配。

  2. 安装Platform.sh CLI

    Linux/OSX

    curl -sS https://platform.sh/cli/installer | php

    Windows

    curl -f https://platform.sh/cli/installer -o cli-installer.php
    php cli-installer.php

    您可以通过登录(platformsh login)并列出您的项目(platform project:list)来验证安装。

  3. 设置集成

    请参阅GitHub集成文档以完成将存储库连接到Platform.sh上的项目的连接。为此,您需要在GitHub上创建访问令牌。

与GitLab存储库集成并部署合并请求
  1. 创建免费试用版

    在Platform.sh上注册30天的免费试用。完成注册后,选择<强>从头创建项目选项。为您项目命名,并选择您希望部署的区域。至于生产环境选项,请确保将其与此存储库的设置相匹配,或者与您在本地更新默认分支所设置的相匹配。

  2. 安装Platform.sh CLI

    Linux/OSX

    curl -sS https://platform.sh/cli/installer | php

    Windows

    curl -f https://platform.sh/cli/installer -o cli-installer.php
    php cli-installer.php

    您可以通过登录(platformsh login)并列出您的项目(platform project:list)来验证安装。

  3. 创建存储库

    在GitLab上创建一个新的存储库,将其设置为本地副本的新远程,并推送到默认分支。

  4. 设置集成

    请参阅GitLab集成文档以完成将存储库连接到Platform.sh上的项目的连接。为此,您需要在GitLab上创建访问令牌。

与Bitbucket存储库集成并部署拉取请求
  1. 创建免费试用版

    在Platform.sh上注册30天的免费试用。完成注册后,选择<强>从头创建项目选项。为您项目命名,并选择您希望部署的区域。至于生产环境选项,请确保将其与此存储库的设置相匹配,或者与您在本地更新默认分支所设置的相匹配。

  2. 安装Platform.sh CLI

    Linux/OSX

    curl -sS https://platform.sh/cli/installer | php

    Windows

    curl -f https://platform.sh/cli/installer -o cli-installer.php
    php cli-installer.php

    您可以通过登录(platformsh login)并列出您的项目(platform project:list)来验证安装。

  3. 创建存储库

    在Bitbucket上创建一个新的存储库,将其设置为本地副本的新远程,并推送到默认分支。

  4. 设置集成

    请参阅Bitbucket集成文档,以完成将仓库连接到Platform.sh项目。为此,您需要在Bitbucket上创建访问令牌。

迁移您的数据

如果您要将现有网站迁移到 Platform.sh,那么除了代码之外,您还需要迁移您的数据。这意味着您的数据库和文件。

导入数据库

首先,从您当前的网站获取数据库转储,并将您的转储文件保存为 database.sql。然后,使用 CLI 将数据库导入到您的 Platform.sh 网站中。

platform sql -e main < database.sql
导入文件

您首先需要从您当前的托管环境中下载您的文件。最简单的方法可能是使用 rsync,但请参阅您旧主机的文档。

platform mount:upload 命令提供了一种简单的方法,可以将整个目录一次性上传到在 .platform.app.yaml 文件中定义的 mount。底层使用 SSH 隧道和 rsync,因此效率最高。(还有一个 platform mount:download 命令,您可以用来稍后下载文件。)在您的本地 Git 仓库根目录中运行以下命令(如果需要,请修改 --source 路径,并将 BRANCH_NAME 设置为您正在使用的分支)。

以下列出了几个示例,但对于您想要迁移的所有包含数据的目录,都需要重复执行。

$ platform mount:upload -e main --mount web/sites/default/files --source ./web/sites/default/files
$ platform mount:upload -e main --mount private --source ./private

请注意,rsync 对其尾部斜杠很挑剔,所以请确保包含它们。

下一步

现在,您的应用程序已部署到 Platform.sh,事情变得更加有趣。运行您的项目的 platform environment:branch new-feature 命令,或者从您当前的分支打开一个简单的拉取请求。

生成的环境是生产环境的 精确 复制。它包含与您的配置文件中定义的完全相同的基础设施,并且还包括从生产环境复制到其服务中的数据。在这个隔离的环境中,您可以自由地对应用程序进行任何必要的更改,并真正测试它们在生产环境中的行为。

之后,这里有一系列您在继续迁移到 Platform.sh 过程中可能会感兴趣的其他资源。

学习

故障排除

访问日志

环境部署完成后,您可以使用 CLI 调查启动、deploypost_deploy 钩子以及通常在运行时出现的问题。运行以下命令

platform ssh

如果您在项目的本地副本之外运行命令,则需要包括-p(项目)和/或-e(环境)标志。连接到容器后,可以在/var/log/目录下查看日志

重建缓存

在您的生产环境中首次安装Drupal后,可能会遇到数据库错误。为了修复此问题,使用SSH进入应用容器(platform ssh)并使用Drush重建缓存。

drush cache-rebuild
默认hash_salt行为

Drupal的默认设置hash_salt设置为空字符串。

$settings['hash_salt'] = '';

以前,Platform.sh模板已覆盖了这个值。

$settings['hash_salt'] = $settings['hash_salt'] ?? $platformsh->projectEntropy;

此设置不足以覆盖某些用户配置,例如,当应用程序依赖于hash_saltNull值时。

现在,此设置在settings.platformsh.php中如下所示

$settings['hash_salt'] = empty($settings['hash_salt']) ? $platformsh->projectEntropy : $settings['hash_salt'];

此更改将hash_salt设置为内置环境变量PLATFORM_PROJECT_ENTROPY的值,如果项目包含默认设置或Null。如果您的应用程序代码依赖于空值,您可以取消注释该行,或稍后在文件中重置它。

欢迎访问platformsh-templates/drupal9#73以获取有关此讨论的更多详细信息。

在Platform.sh上Drupal多站点的运作方式

在Platform.sh上,多站点可能有点棘手。Drupal多站点基于传入请求的域名进行逻辑判断。然而,由于每个环境都有一个唯一的域名,Platform.sh上的请求域名设计上具有高度可变性。因此,此模板建立了一系列约定和自定义配置,以使多站点工作。

  • 每个子站点都是公共域名的子域名。请参阅routes.yaml。域名前缀是“子站点ID”。
  • 每个子站点都有自己的数据库和单个MariaDB服务实例上的端点。端点名称与子站点ID相同。
  • sites/sites.php文件包括代码来构建一个$sites查找列表,以将任何传入请求(无论分支如何)映射到以子站点ID命名的设置目录。它遍历指向Drupal应用程序的所有路由,并将这些路由解析为域名 -> 目录列表,其中目录是站点ID。如果您不使用基于子域名的多站点,则可能需要修改foreach()循环的主体。
  • .platform.app.yaml文件基本上与单个站点的Drupal安装相同,但其关系包括每个定义的MariaDB端点。关系也以子站点ID命名。
  • 每个子站点ID的settings.php文件都是相同的,并且与标准Platform.sh settings.php文件大部分相似。如果需要,您可以对其进行自定义。特别是,应在完成站点的安装过程之后将每个站点的$platformsh_enable_redis变量切换为true,因为Drupal无法在redis模块激活的情况下安装。
  • settings.php文件还包括一个共享的sites/settings.platformsh.php文件。它与单个站点的配置大致相同,但已被修改以利用子站点ID进行
    • 选择要使用的数据库关系
    • 在Redis中包含缓存前缀,以便每个站点都有自己的有效缓存池。
    • 设置文件和私有文件目录,它们是顶级filesprivate目录的子站点ID前缀,而不是在每个站点目录下。
添加新的子站点

添加新的子站点需要以下步骤。对于这些步骤,假设我们正在添加名为stuff的子域名。

  1. routes.yaml中添加一个新的具有新stuff域名前缀的路由。复制和粘贴现有路由是可以的。
  2. sites/default目录复制到sites/stuff
  3. 编辑 services.yaml 文件,并添加一个新的数据库和端点。复制粘贴现有条目是可行的。新的关系必须命名为 stuff
  4. 编辑 .platform.app.yaml 文件,并添加新的关系:stuff: db:stuff。(其中 db 是从 services.yaml 中的数据库服务名称。)
  5. 提交上述更改并推送。
  6. 在浏览器中,访问 stuff.example.com 域名(或在开发环境中相应的域名)并像往常一样运行 Drupal 安装程序。或者,您可以使用以下描述的 Drush。
  7. 再次编辑 sites/stuff/settings.php 文件,并通过将 $platformsh_enable_redis 设置为 true 启用 Redis。
  8. 提交并推送该更改。

或者,提供了一个 PHP 脚本,可以自动化步骤 1-4。请参阅 psh-subsite-add.php

在多站使用 Drush

在 Drupal 多站设置中,站点 ID 定义在 web/sites/sites.php 中。默认情况下,在此多站模板中,在 routes.yaml 中定义了 2 个子站点:firstsecond

因此,可以通过使用 --uri= 在特定子站点上使用任何 Drush 命令。例如

  • drush status --uri=first
  • drush status --uri=second

Blackfire.io:创建持续可观察策略

此模板包含一个启动的 .blackfire.yml 文件,可用于启用项目上的 应用性能监控分析构建性能测试。Platform.sh 在应用程序容器中预先安装了 Blackfire,并且 设置需要最少的配置

资源

联系

此模板由 Platform.sh 开发者关系团队维护,他们将会收到您在这里打开的所有问题和拉取请求的通知。

  • 社区:与社区分享您的问题,或者查看它是否已经在我们 社区网站 上被提出。
  • Slack:如果您尚未这样做,您可以通过 Platform.sh 的 公共 Slack 频道加入,并用任何问题 ping @devrel_team

关于 Platform.sh

此模板专门设计用于在 Platform.sh 上部署。

什么是 Platform.sh?

Platform.sh 是一个统一、安全的企业级平台,用于构建、运行和扩展 Web 应用程序。我们是 Fleet Ops 的领导者:从一开始,您就可以从平台中获得管理您的网站和应用所需的一切。由于基础设施和工作流程从开始就得到处理,因此应用只需工作即可,这样团队就可以专注于真正重要的事情:加快更改速度、自信地协作和负责任地扩展。无论管理十个还是十个网站的网站和应用,Platform.sh 都是开发者首选的解决方案,它可以根据需要进行扩展。

我们的关键特性包括

  • GitOps:Git 作为真相来源

    每个分支都成为开发环境,任何更改都必须通过提交才能生效。

  • 内置电池:管理基础设施

    使用 YAML 进行简单抽象,以提交和配置基础设施,完全管理补丁更新,以及 24 个运行时和可以通过一行代码添加的服务

  • 即时克隆:分支、合并、重复

    可重用的构建和自动继承的生产数据提供真正的预发布环境 - 在隔离环境中实验,测试后销毁或合并。

  • FleetOps:舰队管理平台

    利用我们的公共 API 以及像 源操作活动脚本 这样的自定义工具,通过 管理成千上万的应用程序 - 依赖更新、新内容和上游代码。

了解更多信息,请查看下面的演示并访问我们的 网站


The Platform.sh demo

贡献

帮助我们保持一流的模板!

我们的每个模板都是开源的,对于尝试首次部署到 Platform.sh 或更好地了解该平台的用户来说,它们是非常重要的资源。它们充当入门指南,但也包含了许多在使用特定语言和框架时非常有用的技巧和最佳实践。

发现这个模板需要修复的错误?文档中的某些内容不清晰或缺失?请告诉我们!

如何贡献

报告错误       提交功能请求       打开拉取请求      


需要帮助?

询问 Platform.sh 社区       加入我们的 Slack      


感谢所有令人惊叹的贡献者!


contrib.rocks 制作