Drupal 的云原生之旅
Posted: Thu Dec 26, 2024 10:34 am
容器,特别是 Docker,是迈向云原生之旅的第一步,因为它们允许我们将应用程序及其运行所需的一切打包在一起,并能够将其带到任何我们想要的地方,包括本地环境(每次让我们谈论部署,我们也指本地部署)。所以,事实上,我们只能在我们的机器上安装 Docker 和一些其他工具(我们很快就会介绍),并且我们将拥有开始所需的一切。
如何构建用于使容器栩栩如生的 Docker 映像?所有指 墨西哥电报数据 令都驻留在代码库中,代码库必须是唯一的、唯一的和版本化的 - 这超出了代码版本化本身给我们带来的所有好处:我们的存储库是 Docker 镜像的真实来源。从存储库中,我们可以构建整个应用程序,包括必要的依赖项。因此,在我们的代码库中,我们将拥有:一个 Dockerfile、所有脚本(包括自动化脚本)、我们的自定义代码和 Drupal 配置。这是很重要的一点,因为并不是所有依赖项都会被带入存储库,而是通过包管理器(在 PHP 世界中它是 Composer)进行管理 - 这不仅包括 contrib 模块和主题,还包括也是 Drupal 的核心,因为我们不想对不属于我们直接责任的内容进行版本控制。然后所有依赖项将在我们项目的composer.json中列出,构建过程将负责获取它们。
此外,在composer.json中,建议将仅开发所需的所有内容指示为开发依赖项,因为我们希望图像尽可能小并且仅包含所需的内容。
此时,单个代码库可能会出现问题,因为不同环境中的配置会有所不同。最经典的例子是数据库:我们有不同的配置来连接到本地数据库、生产数据库或我们拥有的任何其他环境。但是,我们可以使用环境变量来管理它,并将其注入到 Docker 容器中。我们将在运行时传递一切必要的信息,以便能够使用各种方式根据我们所处的环境进行配置:如果在本地我们可能会使用 Docker Compose,在 CI 上我们将利用直接在我们的平台上注册环境变量的可能性,就这样离开了。回到数据库示例,在settings.php中,我们使用一个简单的getenv()来从环境中获取任何必要的变量。一个方便的过程不仅可以设置不同的配置,还可以根据需要启用或禁用某些服务。一个典型的例子是 Google 标签管理器:我们可能不想在本地激活它,就像我们可能不想让实习数据污染生产数据一样。所以我们可以决定是否将该变量传递给Drupal或传递不同的变量。通过这种方式,我们根据特定环境的需求专门隔离我们服务的行为。
如何构建用于使容器栩栩如生的 Docker 映像?所有指 墨西哥电报数据 令都驻留在代码库中,代码库必须是唯一的、唯一的和版本化的 - 这超出了代码版本化本身给我们带来的所有好处:我们的存储库是 Docker 镜像的真实来源。从存储库中,我们可以构建整个应用程序,包括必要的依赖项。因此,在我们的代码库中,我们将拥有:一个 Dockerfile、所有脚本(包括自动化脚本)、我们的自定义代码和 Drupal 配置。这是很重要的一点,因为并不是所有依赖项都会被带入存储库,而是通过包管理器(在 PHP 世界中它是 Composer)进行管理 - 这不仅包括 contrib 模块和主题,还包括也是 Drupal 的核心,因为我们不想对不属于我们直接责任的内容进行版本控制。然后所有依赖项将在我们项目的composer.json中列出,构建过程将负责获取它们。
此外,在composer.json中,建议将仅开发所需的所有内容指示为开发依赖项,因为我们希望图像尽可能小并且仅包含所需的内容。
此时,单个代码库可能会出现问题,因为不同环境中的配置会有所不同。最经典的例子是数据库:我们有不同的配置来连接到本地数据库、生产数据库或我们拥有的任何其他环境。但是,我们可以使用环境变量来管理它,并将其注入到 Docker 容器中。我们将在运行时传递一切必要的信息,以便能够使用各种方式根据我们所处的环境进行配置:如果在本地我们可能会使用 Docker Compose,在 CI 上我们将利用直接在我们的平台上注册环境变量的可能性,就这样离开了。回到数据库示例,在settings.php中,我们使用一个简单的getenv()来从环境中获取任何必要的变量。一个方便的过程不仅可以设置不同的配置,还可以根据需要启用或禁用某些服务。一个典型的例子是 Google 标签管理器:我们可能不想在本地激活它,就像我们可能不想让实习数据污染生产数据一样。所以我们可以决定是否将该变量传递给Drupal或传递不同的变量。通过这种方式,我们根据特定环境的需求专门隔离我们服务的行为。