unleashedtech/dotenv-drupal

0.3.1 2022-05-24 14:42 UTC

README

此包扩展了Symfony的symfony/dotenv组件,允许通过环境变量进行简化的Drupal配置。请参阅Symfony组件的文档,了解如何使用.env文件。请注意,如果服务器已设置了APP_ENV变量,则.env文件将被忽略。出于性能考虑,生产环境应理想地依赖于预配置的环境变量,而不是从.env文件加载的环境变量值。

安装

composer require unleashedtech/dotenv-drupal

配置Drupal

首先,您需要配置Drupal以使用此包。

Drupal设置和站点文件

Drupal通常通过各种目录中的settings.php文件进行配置。要使用此包与Drupal一起使用,需要在相关的settings.php文件顶部添加一些代码。

<?php
use UnleashedTech\Drupal\Dotenv\Dotenv;
$dotenv = $dotenv ?? new Dotenv();
$config = $dotenv->getConfig();
$databases = $dotenv->getDatabases();
$settings = $dotenv->getSettings();
条件逻辑

如果需要特定站点的条件逻辑,此逻辑仍受支持。此包将自动加载各种settings.{{environment}}.phpconfig.{{environment}}.phpdatabases.{{environment}}.php文件,如果它们存在。例如,如果您需要为测试环境设置数据库前缀,您可以创建databases.staging.php

<?php
$databases['default']['default']['prefix'] = 'foo_';

每个包含的文件仅具有相关的变量作用域(例如,config.dev.php仅具有$config)。

多站Drupal

您可以使用default设置文件为多站安装提供基本配置。

<?php
use UnleashedTech\Drupal\Dotenv\Dotenv;
$dotenv = new Dotenv();
$dotenv->setSiteName(basename(__DIR__));
require __DIR__ . '/../default/settings.php';

如果您想为每个站点手动设置数据库名称,可以通过setDatabaseName方法实现。

<?php
use UnleashedTech\Drupal\Dotenv\Dotenv;
$dotenv = new Dotenv();
$dotenv->setSiteName(basename(__DIR__));
$dotenv->setDatabaseName('foo');
require __DIR__ . '/../default/settings.php';
使用多站默认站点

如果您需要在多站安装中使用default站点,您可以通过在default/settings.php中调用DotEnv::setMultiSiteDefaultSiteAllowed方法来允许它。

<?php
use UnleashedTech\Drupal\Dotenv\Dotenv;
$dotenv = $dotenv ?? new Dotenv();
$dotenv->setMultiSiteDefaultSiteAllowed();
$config = $dotenv->getConfig();
$databases = $dotenv->getDatabases();
$settings = $dotenv->getSettings();
站点文件

此包还提供了通过sites.php配置Drupal的$sites变量的功能。变量$sites是从DOMAINSSITES环境变量中的数据构建的。您需要将以下代码添加到sites.php中。

<?php
use UnleashedTech\Drupal\Dotenv\Dotenv;
$dotenv = new Dotenv();
$sites = $dotenv->getSites();

安装总结

这就完成了!现在,Drupal将尝试从环境变量加载基本连接信息。

通过ENV变量配置Drupal

此包将根据检测到的环境提供许多默认设置和配置值。其中一些值可以通过环境变量来设置。

环境变量可以设置在.env文件中,或者通过修改服务器配置。对于生产环境,理想情况下应通过服务器配置定义环境变量。

多站安装通常需要与默认站点不同的配置。此包首先检查遵循{{ app }}__{{ site }}__{{ var }}命名约定的变量,然后再回退到{{ var }}命名约定。

您可以通过命名空间化的环境变量提供特定站点的信息。

DATABASE_URL

默认数据库连接可以通过DSN进行配置。

DATABASE_URL=driver://user:password@host:port/database

例如:

DATABASE_URL=mysql://foo:bar@localhost:3306/baz

对于多站点安装,不要在DATABASE_URL变量中指定数据库名称或凭据。

DATABASE_URL=mysql://localhost:3306

对于“earth”Drupal应用程序,具有“default”站点和“antarctica”站点

DATABASE_URL=mysql://localhost:3306

EARTH__DEFAULT__DATABASE_USER=foo
EARTH__DEFAULT__DATABASE_PASSWORD=bar

EARTH__ANTARCTICA__DATABASE_USER=baz
EARTH__ANTARCTICA__DATABASE_PASSWORD=qux

默认的Drupal应用程序名称为“default”。在大多数用例中,您可能需要在默认的settings.php文件中设置Drupal应用程序名称,如下所示

<?php
use UnleashedTech\Drupal\Dotenv\Dotenv;
$dotenv = $dotenv ?? new Dotenv();
$dotenv->setAppName('earth');
// ...

可以通过定义一个{{ app }}__{{ site }}__DATABASE_NAME环境变量来覆盖站点的数据库名称

EARTH__ANTARCTICA__DATABASE_NAME=ant

FILE_PUBLIC_PATH

允许您覆盖默认的$settings['file_public_path']

FILE_PUBLIC_PATH=sites/all/files

Drupal期望此路径相对于DRUPAL_ROOT是相对的。

FILE_PRIVATE_PATH

允许您覆盖默认的$settings['file_private_path']

FILE_PRIVATE_PATH=/private

FILE_TEMP_PATH

允许您覆盖默认的$settings['file_temp_path']

FILE_TEMP_PATH=/tmp

CONFIG_SYNC_PATH

允许您覆盖默认的$settings['config_sync_path']

CONFIG_SYNC_PATH=/sync

DOMAINS

给定环境的所用域名的CSV列表

DOMAINS=foo.example,bar.example,baz.example

MAILGUN_URL

Drupal应使用以通过Mailgun API进行认证的信息。

DSN中的“用户”是API密钥。

美国URL示例
MAILGUN_URL=https://key-1234567890abcdefghijklmnopqrstu@api.mailgun.net
欧洲URL示例
MAILGUN_URL=https://key-1234567890abcdefghijklmnopqrstu@api.eu.mailgun.net

PUBLIC

一个字符串,允许启用/禁用Shield模块的认证功能。

如果为true,则Shield将不会被启用。

如果为false,则用户名将是应用程序名称,密码将是站点名称

注意:请确保在Drupal中勾选了“启用Shield”复选框,并且已提交配置。

SITES

给定环境的Drupal“站点”(例如“子域”)的CSV列表

SITES=foo,bar,baz,qux

SALT

用于“一次性登录链接、取消链接、表单令牌等”的字符串

最佳实践问题

使用drush eval "var_dump(Drupal\Component\Utility\Crypt::randomBytesBase64(55))"生成。

SALT=generatedSaltValue

SOLR_URL

默认的Solr连接可以通过DSN进行配置。

SOLR_URL=http://localhost

此软件包假设了几个可以由SOLR_URL DSN覆盖的内容。上面的示例DSN自动展开为:

SOLR_URL=http://default@localhost:8983#default

在上面的展开示例中,user是Solr核心的名称,而fragment是Drupal连接的机器名称。考虑将Solr核心和Drupal Solr服务器机器名称更改为default,以便使用更短的DSN。

目前支持简化一个Solr核心的环境依赖配置。

TRUSTED_HOST_PATTERNS

可选。指定可信主机模式的CSV列表。

默认情况下,每个模式都会添加起始(^)和结束($)字符。

后备功能

如果未设置TRUSTED_HOST_PATTERNS变量,则此软件包将根据DOMAINSSITES变量的值填充Drupal的trusted_host_patterns数组。

示例

如果将DOMAINS设置为foo.example,bar.example,则Drupal的trusted_host_patterns设置数组将具有以下值

  • ^foo\.example$
  • ^www\.foo\.example$
  • ^bar\.example$
  • ^www\.bar\.example$

如果将DOMAINS设置为foo.exampleSITES设置为bar,baz,qux,则Drupal的trusted_host_patterns设置数组将具有以下值

  • ^bar\.foo\.example$
  • ^baz\.foo\.example$
  • ^qux\.foo\.example$

术语

应用程序名称

Drupal应用程序的机器名称(例如:"default" 或 "earth")。

站点名称

Drupal应用程序站点的站点名称(例如:"default" 或 "antarctica")。

配置结论

使用这些少数环境变量,您将以类似Symfony配置的方式快速配置Drupal。预计很快将支持更多常见Drupal功能。请考虑提交一个Pull Request,说明您希望此包支持的功能。