配置选项 Config-Options

环境变量用于 Directus 项目中的所有配置。 这些变量可以通过多种方式定义,我们将在下面介绍。

配置文件

默认情况下,Directus 将读取位于项目 package.json 旁边的 .env 文件(通常位于项目的根文件夹中)以进行配置。 您可以在启动 Directus 之前通过设置 CONFIG_PATH 环境变量来更改此路径和文件名。 例如:

bash
CONFIG_PATH="/path/to/config.js" npx directus start

如果您更喜欢使用配置文件而不是环境变量,您还可以使用 CONFIG_PATH 环境变量来指示 Directus 使用本地配置文件而不是环境变量。 配置文件可以是以下格式之一:

.env

如果配置路径没有文件扩展名,或者文件扩展名不是其他支持的格式之一,Directus 将尝试将文件配置路径读取为环境变量。 它具有以下结构:

HOST="0.0.0.0"
PORT=8055

DB_CLIENT="pg"
DB_HOST="localhost"
DB_PORT=5432

etc

config.json

如果您更喜欢使用单个 JSON 文件进行配置,请使用环境变量作为键创建 JSON 文件,例如:

CONFIG_PATH="/path/to/config.json"
json
{
  "HOST": "0.0.0.0",
  "PORT": 8055,

  "DB_CLIENT": "pg",
  "DB_HOST": "localhost",
  "DB_PORT": 5432

  // etc
}

config.yaml

与 JSON 类似,您可以在配置中使用 .yaml(或 .yml)文件:

CONFIG_PATH="/path/to/config.yaml"
yaml
HOST: 0.0.0.0
PORT: 8055

DB_CLIENT: pg
DB_HOST: localhost
DB_PORT: 5432
#
# etc

config.js

为您的配置使用 JavaScript 文件允许您在启动期间动态生成项目的配置。 JavaScript 配置支持两种不同的格式,一种是 Object Structure,其中键是环境变量名称:

js
// Object Syntax

module.exports = {
  HOST: '0.0.0.0',
  PORT: 8055,

  DB_CLIENT: 'pg',
  DB_HOST: 'localhost',
  DB_PORT: 5432,

  // etc
}

或者一个 功能结构 returns 与上述相同的对象格式。 该函数将 process.env 作为其参数。

js
// Function Syntax

module.exports = function (env) {
  return {
    HOST: '0.0.0.0',
    PORT: 8055,

    DB_CLIENT: 'pg',
    DB_HOST: 'localhost',
    DB_PORT: 5432,

    // etc
  }
}

环境变量文件

通过将 _FILE 附加到环境变量名称,可以从文件中导入任何环境变量值。 这在与 Docker Secrets 结合使用时特别有用,因此您可以将敏感数据排除在撰写文件之外。 例如:

DB_PASSWORD_FILE="/run/secrets/db_password"

类型转换和嵌套

环境变量会根据变量的结构自动进行类型转换,例如:

json
PUBLIC_URL="https://example.com"
// "https://example.com"

DB_HOST="3306"
// 3306

CORS_ENABLED="false"
// false

STORAGE_LOCATIONS="s3,local,example"
// ["s3", "local", "example"]

在环境变量被转换为第三方库使用的配置对象的情况下,例如在 DB_*RATE_LIMITER_REDIS_* 中,环境变量将被转换为 camelCase。 您可以对嵌套对象使用双下划线 (__):

json
DB_CLIENT="pg"
DB_CONNECTION_STRING="postgresql://postgres:example@127.0.0.1"
DB_SSL__REJECT_UNAUTHORIZED="false"

{
 client: "pg",
 connectionString: "postgresql://postgres:example@127.0.0.1",
 ssl: {
  rejectUnauthorized: false
 }
}

环境语法前缀

Directus 将尝试根据上下文线索自动键入转换环境变量。 如果您对给定类型有特定需求,您可以通过在值前加上“{type}:”来告诉 Directus 为给定值使用什么类型。 有以下类型可用:

Syntax PrefixExampleOutput
stringstring:value"value"
numbernumber:33063306
regexregex:\.example\.com$/\.example\.com$/
arrayarray:https://example.com,https://example2.com
array:string:https://example.com,regex:\.example3\.com$
["https://example.com", "https://example2.com"]
["https://example.com", "https://example2.com", /\.example3\.com$/]
jsonjson:{"items": ["example1", "example2"]}{"items": ["example1", "example2"]}

General

变量名描述默认值
CONFIG_PATH您的配置文件所在的位置。请参阅 配置文件.env
HOSTAPI 侦听的 IP 或主机。0.0.0.0
PORT在哪个端口下运行 API。8055
PUBLIC_URL1可以在 Web 上访问您的 API 的 URL。/
LOG_LEVEL要记录的详细程度。 fatalerrorwarninfodebugtracesilent之一。info
LOG_STYLE将日志呈现为人类可读(漂亮)或 JSON。 prettyraw 之一。pretty
MAX_PAYLOAD_SIZE控制最大请求正文大小。接受字节数或人类可读的字符串。100kb
ROOT_REDIRECT导航到 / 时重定向到的位置。接受相对路径、绝对 URL 或 false 来禁用。./admin
SERVE_APP是否在 /admin 下服务 Admin App。true
GRAPHQL_INTROSPECTION是否启用 GraphQL Introspectiontrue
MAX_RELATIONAL_DEPTH过滤/查询关系字段时的最大深度,最小值为 2。10
ROBOTS_TXT/robots.txt 端点应该返回什么User-agent: *\nDisallow: /
1 PUBLIC_URL 值用于 OAuth 重定向、忘记密码电子邮件和需要在 Internet 上公开提供的徽标等内容。

其他记录器变量
所有 LOGGER_* 环境变量都传递给 Pino 实例options 配置。 所有 LOGGER_HTTP* 环境变量都传递给 Pino-http 实例options 配置。 根据您项目的需要,您可以使用需要传递给记录器实例的任何配置来扩展“LOGGER_*”环境变量。 如果添加了 LOGGER_LEVELS 键,这些值将传递给记录器 frontmatter,如所述此处例如。 添加 LEVELS 值的格式为:LOGGER_LEVELS="trace:DEBUG,debug:DEBUG,info:INFO,warn:WARNING,error:ERROR,fatal:CRITICAL"

服务器

变量名描述默认值
SERVER_KEEP_ALIVE_TIMEOUT销毁套接字的超时时间(以毫秒为单位)server.keepAliveTimeout
SERVER_HEADERS_TIMEOUT解析 HTTP 标头的超时时间(以毫秒为单位)server.headersTimeout

其他服务器变量
所有 SERVER_* 环境变量都与从 http.Server 创建的 server 实例属性合并 。 这允许在代理、负载均衡器等后面配置服务器。注意不要覆盖此实例的方法,否则可能会导致意外行为。

数据库

变量名描述默认值
DB_CLIENT必需的。使用什么数据库客户端。 pgpostgresmysqloracledbmssqlsqlite3cockroachdb 之一。--
DB_HOST数据库主机。 在使用 pgmysqloracledbmssql 时是必需的。--
DB_PORT数据库端口。 在使用 pgmysqloracledbmssql 时是必需的。--
DB_DATABASE数据库名称。 在使用 pgmysqloracledbmssql 时是必需的。--
DB_USER数据库用户。 在使用 pgmysqloracledbmssql 时是必需的。--
DB_PASSWORD数据库用户的密码。 **在使用 pgmysqloracledbmssql 时是必需的。--
DB_FILENAME在哪里读/写 SQLite 数据库。 使用 sqlite3 时需要。--
DB_CONNECTION_STRING使用 pg 时,您可以提交连接字符串而不是单个属性。使用它会忽略任何其他连接设置。--
DB_POOL__*池化设置。传递给 tarn.js 库。--
DB_EXCLUDE_TABLES您希望 Directus 完全忽略的表的 CSVspatial_ref_sys,sysdiagrams
DB_CHARSET用于连接 MySQL/MariaDB 的字符集/排序规则UTF8_GENERAL_CI
DB_VERSION数据库版本,以防您使用 PostgreSQL 适配器连接非标准数据库。通常不需要。--
DB_HEALTHCHECK_THRESHOLD以毫秒为单位的健康检查超时阈值。150

其他数据库变量
所有 DB_* 环境变量都传递给 Knex 实例connection 配置。 根据您项目的需要,您可以使用需要传递给数据库实例的任何配置来扩展 DB_* 环境变量。

数据池
所有的 DB_POOL__ 前缀选项都通过 Knex 传递给 tarn.js

安全性

变量名描述默认值
KEY项目的唯一标识符。--
SECRET项目的秘密字符串。--
ACCESS_TOKEN_TTL访问令牌有效的持续时间。15m
REFRESH_TOKEN_TTL刷新令牌的有效期,以及用户登录应用程序的时长。7d
REFRESH_TOKEN_COOKIE_DOMAIN用于刷新 cookie 的域。对开发模式很有用。--
REFRESH_TOKEN_COOKIE_SECURE是否在 cookie 模式下对刷新令牌使用安全 cookie。false
REFRESH_TOKEN_COOKIE_SAME_SITE处于 cookie 模式时,刷新令牌 cookie 中的 sameSite 的值。lax
REFRESH_TOKEN_COOKIE_NAME刷新令牌 cookie 的名称。directus_refresh_token
LOGIN_STALL_TIME登录请求将被暂停的持续时间(以毫秒为单位),它应该大于使用无效密码的登录请求所花费的时间500
PASSWORD_RESET_URL_ALLOW_LIST可以使用的 URL 列表 as reset_url in /password/request--
USER_INVITE_URL_ALLOW_LIST可以使用的 URL 列表 as invite_url in /users/invite--
IP_TRUST_PROXYexpress'信任代理设置的设置true
IP_CUSTOM_HEADER用于 IP 地址的自定义请求标头false
ASSETS_CONTENT_SECURITY_POLICY/assets 端点的 Content-Security-Policy 标头的自定义覆盖。有关详细信息,请参阅 helmet 的文档 on helmet.contentSecurityPolicy()--
IMPORT_IP_DENY_LIST拒绝从这些 IP 地址导入文件。对任何本地 IP 地址使用“0.0.0.0”0.0.0.0
CONTENT_SECURITY_POLICY_*Content-Security-Policy 标头的自定义覆盖。有关详细信息,请参阅 helmet 的文档 on helmet.contentSecurityPolicy()--
HSTS_ENABLED启用 Strict-Transport-Security 策略标头。false
HSTS_*Strict-Transport-Security 标头的自定义覆盖。有关详细信息,请参阅 helmet 的文档--
FLOWS_EXEC_ALLOWED_MODULES允许在流中的_run script_ 操作中使用的节点模块的 CSV 白名单--

Cookie 严格性
浏览器对第三方 cookie 非常严格。 如果您在不同域上运行项目和 API 时遇到意外问题,请确保验证您的 REFRESH_TOKEN_COOKIE_NAMEREFRESH_TOKEN_COOKIE_SECUREREFRESH_TOKEN_COOKIE_SAME_SITE 的配置。

散列

变量名描述默认值
HASH_MEMORY_COST生成哈希时使用多少内存,以 KiB 为单位。4096 (4 MiB)
HASH_LENGTH哈希函数输出的长度(以字节为单位)。32
HASH_TIME_COST散列函数使用的遍数(迭代)。 它以计算所需的时间为代价来增加哈希强度。3
HASH_PARALLELISM计算哈希的线程数量。 每个线程都有一个大小为“HASH_MEMORY_COST”的内存池。1 (single thread)
HASH_TYPE散列函数的变体(0:argon2d,1:argon2i,或2:argon2id)。2 (argon2id)
HASH_ASSOCIATED_DATA一个额外的和可选的非秘密值。 该值将包含在摘要的参数部分中的 Base64 编码中。--

Directus 将 Argon2 的散列函数用于三个目的:1) 散列用户密码,2) 为集合中的 Hash 字段类型生成散列,以及 3) 生成散列 API 端点

所有 HASH_* 环境变量参数都传递给 argon2.hash 函数。 请参阅 node-argon2 库选项页面 以供参考。

内存使用
修改 HASH_MEMORY_COST 和/或 HASH_PARALLELISM 会影响计算哈希时直接使用的内存量; 每个线程获得“HASH_MEMORY_COST”内存量,因此总额外内存将是这两个值的乘积。 这可能会导致内存不足错误,尤其是在容器化环境中运行时。

跨域

变量名描述默认值
CORS_ENABLED是否启用 CORS 标头。false
CORS_ORIGINAccess-Control-Allow-Origin 标头的值。 使用 true 匹配 Origin 标头,或提供域或域的 CSV 以进行特定访问false
CORS_METHODSAccess-Control-Allow-Methods 标头的值。GET,POST,PATCH,DELETE
CORS_ALLOWED_HEADERSAccess-Control-Allow-Headers 标头的值。Content-Type,Authorization
CORS_EXPOSED_HEADERSAccess-Control-Expose-Headers 标头的值。Content-Range
CORS_CREDENTIALS是否发送 Access-Control-Allow-Credentials 标头。true
CORS_MAX_AGEAccess-Control-Max-Age 标头的值。18000

更多细节
有关每个配置变量的更多详细信息,请参阅 CORS 包文档.

Rate Limiting

您可以使用内置的速率限制器来防止用户过多地访问 API。 简单地启用速率限制器将设置默认最大值为每秒 50 个请求,在内存中进行跟踪。 一旦您在负载均衡器下运行了多个 Directus 副本,或者您的用户群增长如此之快以至于内存不再是存储速率限制器信息的可行位置,您可以使用外部“memcache”或“redis”实例来存储 速率限制器数据。

变量名描述默认值
RATE_LIMITER_ENABLED是否对 API 启用速率限制。false
RATE_LIMITER_POINTS每个持续时间允许的命中数。50
RATE_LIMITER_DURATION计算点的时间窗口(以秒为单位)。1
RATE_LIMITER_STORE存储速率限制器计数的位置。 memoryredismemcache 之一。memory
RATE_LIMITER_HEALTHCHECK_THRESHOLD以毫秒为单位的健康检查超时阈值。150

根据使用的 RATE_LIMITER_STORE,您还必须提供以下配置:

内存

无需额外配置。

Redis

变量名描述默认值
RATE_LIMITER_REDISRedis 连接字符串,例如 , redis://user:password@127.0.0.1:6380/4---

或者,您可以提供单独的连接参数:

变量名描述默认值
RATE_LIMITER_REDIS_HOSTHostname of the Redis instance, e.g., "127.0.0.1"--
RATE_LIMITER_REDIS_PORTPort of the Redis instance, e.g., 6379--
RATE_LIMITER_REDIS_USERNAMEUsername for your Redis instance, e.g., "default"--
RATE_LIMITER_REDIS_PASSWORDPassword for your Redis instance, e.g., "yourRedisPassword"--
RATE_LIMITER_REDIS_DBDatabase of your Redis instance to connect, e.g., 1--

Memcache

变量名描述默认值
RATE_LIMITER_MEMCACHE您的内存缓存实例的位置。 您可以使用 array: 语法,例如,array:<instance-1>,<instance-2> 用于多个 memcache 实例。---

或者,您可以提供单独的连接参数:aAdditional Rate Limiter 变量名s
所有 RATE_LIMITER_* 变量都直接传递给 rate-limiter-flexible 实例。 根据您项目的需要,您可以扩展上述环境变量以配置任何 rate-limiter-flexible 选项

Example: Basic

// 10 requests per 5 seconds

RATE_LIMITER_POINTS="10"
RATE_LIMITER_DURATION="5"

Example: Redis

RATE_LIMITER_ENABLED="true"

RATE_LIMITER_POINTS="10"
RATE_LIMITER_DURATION="5"

RATE_LIMITER_STORE="redis"

RATE_LIMITER_REDIS="redis://@127.0.0.1"

# If you are using Redis ACL
RATE_LIMITER_REDIS_USERNAME="default"
RATE_LIMITER_REDIS_PASSWORD="yourRedisPassword"
RATE_LIMITER_REDIS_HOST="127.0.0.1"
RATE_LIMITER_REDIS_PORT=6379
RATE_LIMITER_REDIS_DB=0

Cache

Directus 有一个内置的数据缓存选项。 启用此功能会将请求的输出(基于当前用户和使用的确切查询参数)缓存到配置的缓存存储位置。 这极大地提高了 API 性能,因为后续请求直接从此缓存中提供。 启用缓存还将使 Directus 返回准确的缓存控制标头。 根据您的设置,这将通过在中间人服务器(如 CDN)甚至浏览器中缓存请求来进一步提高性能。

内部缓存
除了数据缓存,Directus 还做一些内部缓存。 注意默认启用的 CACHE_SCHEMACACHE_PERMISSIONS。 这些加快了 Directus 的整体性能,因为我们不想内省整个数据库或检查每个请求的所有权限。 运行 Directus 负载平衡时,您需要使用共享缓存存储(如 RedisMemcache),否则禁用所有缓存。

资产缓存
/assets 端点的 Cache-ControlLast-Modified 标头与常规数据缓存分开。 Last-Modified 来自 modified_on 数据库字段。 这很有用,因为缓存资产的时间通常比缓存数据库内容的时间要长得多。 要了解更多信息,请参阅 资产

变量名描述默认值
CACHE_ENABLED是否启用数据缓存。false
CACHE_TTL1数据缓存保留多长时间。5m
CACHE_CONTROL_S_MAXAGE是否不添加 s-maxage 过期标志。设置为自定义值的数字。0
CACHE_AUTO_PURGE2在“创建”、“更新”和“删除”操作时自动清除数据缓存。false
CACHE_SYSTEM_TTL3CACHE_SCHEMACACHE_PERMISSIONS 保留多长时间。--
CACHE_SCHEMA3数据库模式是否被缓存。 falsetrue 之一true
CACHE_PERMISSIONS3是否缓存用户权限。 falsetrue 之一true
CACHE_NAMESPACE如何确定缓存数据的范围。directus-cache
CACHE_STORE4在哪里存储缓存数据。 “memory”、“redis”或“memcache”。memory
CACHE_STATUS_HEADER如果设置,则在配置的标头中返回缓存状态。 HITMISS 之一。--
CACHE_VALUE_MAX_SIZE将被缓存的值的最大大小。接受字节数或人类可读的字符串。使用 false 无限制false
CACHE_HEALTHCHECK_THRESHOLD以毫秒为单位的健康检查超时阈值。150

1 CACHE_TTL 根据您项目的需要,您可能能够主动缓存您的数据,只需要大约每小时获取一次新数据。这使您可以从 Directus 实例中获得最大的性能。这对于您拥有大量(公共)读取访问权限且更新不是实时的应用程序(例如网站)非常有用。 CACHE_TTL 使用 ms 来解析该值,因此您可以使用人类可读的值(例如 2 days7 hrs 5m)。

2 CACHE_AUTO_PURGE 允许您保持 Directus API 的实时性,同时仍然在快速后续读取时获得性能优势。

3 不受 CACHE_ENABLED 值的影响。

4 CACHE_STORE 对于较大的项目,您很可能不想依赖本地内存进行缓存。相反,您可以使用上面的 CACHE_STORE 环境变量来使用 memcacheredis 作为缓存存储。根据选择的 CACHE_STORE,您还必须提供以下配置:

内存

无需额外配置。

Redis

变量名描述默认值
CACHE_REDISRedis 连接字符串,例如, redis://user:password@127.0.0.1:6380/4---

或者,您可以提供单独的连接参数:

变量名描述默认值
CACHE_REDIS_HOSTHostname of the Redis instance, e.g., "127.0.0.1"--
CACHE_REDIS_PORTPort of the Redis instance, e.g., 6379--
CACHE_REDIS_USERNAMEUsername for your Redis instance, e.g., "default"--
CACHE_REDIS_PASSWORDPassword for your Redis instance, e.g., "yourRedisPassword"--
CACHE_REDIS_DBDatabase of your Redis instance to connect, e.g., 1--

Memcache

变量名描述默认值
CACHE_MEMCACHE您的内存缓存实例的位置。 您可以使用 array: 语法,例如,array:<instance-1>,<instance-2> 用于多个 memcache 实例。---

文件存储

默认情况下,Directus 将所有上传的文件本地存储在磁盘上。 但是,您也可以将 Directus 配置为使用 S3、Google Cloud Storage 或 Azure。 您还可以同时配置_多个_存储适配器。 这使您可以逐个文件选择上传文件的位置。 在 Admin App 中,文件将自动上传到第一个配置的存储位置(在本例中为“本地”)。 使用的存储位置保存在 directus_files 中的 storage 下。

文件存储默认
如果您没有为存储适配器提供任何配置,则将使用此默认值:

STORAGE_LOCATIONS="local"
STORAGE_LOCAL_ROOT="./uploads"

区分大小写
指定附加配置值时,您指定的位置值应大写。 例如,这将不起作用:

STORAGE_LOCATIONS="s3"
STORAGE_s3_DRIVER="s3" # Will not work, lowercase "s3" ❌

but this will work:

STORAGE_LOCATIONS="s3"
STORAGE_S3_DRIVER="s3" # Will work, "s3" is uppercased ✅
变量名描述默认值
STORAGE_LOCATIONS要使用的存储位置的 CSV(例如,local、digitalocean、amazon)。 您可以为这些键使用任何您喜欢的名称。local

对于列出的每个存储位置,您必须提供以下配置:

变量名描述默认值
STORAGE_<LOCATION>_DRIVER使用哪个驱动程序,locals3gcsazure
STORAGE_<LOCATION>_ROOT在磁盘上存储文件的位置''
STORAGE_<LOCATION>_HEALTHCHECK_THRESHOLD以毫秒为单位的健康检查超时阈值。750

根据您配置的驱动程序,您还必须提供以下配置:

Local (local)

变量名描述默认值
STORAGE_<LOCATION>_ROOTWhere to store the files on disk--

S3 (s3)

变量名描述默认值
STORAGE_<LOCATION>_KEYUser key--
STORAGE_<LOCATION>_SECRETUser secret--
STORAGE_<LOCATION>_BUCKETS3 Bucket--
STORAGE_<LOCATION>_REGIONS3 Region--
STORAGE_<LOCATION>_ENDPOINTS3 Endpoints3.amazonaws.com
STORAGE_<LOCATION>_ACLS3 ACL--
STORAGE_<LOCATION>_SERVER_SIDE_ENCRYPTIONS3 Server Side Encryption--
STORAGE_<LOCATION>_FORCE_PATH_STYLES3 Force Path Stylefalse

Azure (azure)

变量名描述默认值
STORAGE_<LOCATION>_CONTAINER_NAMEAzure Storage container--
STORAGE_<LOCATION>_ACCOUNT_NAMEAzure Storage account name--
STORAGE_<LOCATION>_ACCOUNT_KEYAzure Storage key--
STORAGE_<LOCATION>_ENDPOINTAzure URLhttps://{ACCOUNT_NAME}.blob.core.windows.net

Google Cloud Storage (gcs)

变量名描述默认值
STORAGE_<LOCATION>_KEY_FILENAMEPath to key file on disk--
STORAGE_<LOCATION>_BUCKETGoogle Cloud Storage bucket--

Example: 多个存储适配器

下面展示了存储位置名称的 CSV,每个名称都有一个配置块:

STORAGE_LOCATIONS="local,aws"

STORAGE_LOCAL_DRIVER="local"
STORAGE_LOCAL_ROOT="local"

STORAGE_AWS_KEY="tp15c...510vk"
STORAGE_AWS_SECRET="yk29b...b932n"
STORAGE_AWS_REGION="us-east-2"
STORAGE_AWS_BUCKET="my-files"

Metadata

上传图像时,Directus 会保留可用 EXIF 元数据中的 描述、标题和标签。 出于安全目的,必须配置额外元数据的收集:

变量名描述默认值
FILE_METADATA_ALLOW_LIST在文件上传期间收集的元数据键的逗号分隔列表。 对所有1 使用 *ifd0.Make,ifd0.Model,exif.FNumber,exif.ExposureTime,exif.FocalLength,exif.ISO

1:当文件具有异常大的元数据集时,提取所有元数据可能会导致内存问题

Assets

变量名描述默认值
ASSETS_CACHE_TTL资产将在浏览器中缓存多长时间。 设置 Cache-Control 标头的 max-age 值。30d
ASSETS_TRANSFORM_MAX_CONCURRENT可以同时进行多少文件转换4
ASSETS_TRANSFORM_IMAGE_MAX_DIMENSION允许转换的最大像素尺寸(宽度/高度)6000
ASSETS_TRANSFORM_TIMEOUT尝试转换资产所花费的最大时间7500ms
ASSETS_TRANSFORM_MAX_OPERATIONS允许处理的最大变换操作数(不包括已保存的预设)5
ASSETS_CONTENT_SECURITY_POLICYContent-Security-Policy 标头的自定义覆盖。 有关详细信息,请参阅 helmet 的文档--
ASSETS_INVALID_IMAGE_SENSITIVITY_LEVEL对无效图像的敏感程度。 请参阅 sharp.failOn optionwarning

图像转换在内存使用方面可能相当繁重。 如果您使用的系统具有 1GB 或更少的可用内存,我们建议降低允许的并发转换,以防止您的服务器溢出。

Authentiaction

变量名描述默认值
AUTH_PROVIDERS以逗号分隔的身份验证提供程序列表。--
AUTH_DISABLE_DEFAULT禁用默认身份验证提供程序false

对于您列出的每个身份验证提供程序,您还必须提供以下配置:

变量名描述默认值
AUTH_<PROVIDER>_DRIVER要使用哪个驱动程序,无论是 local, oauth2, openid, ldap, saml--

根据身份验证驱动程序,您可能还需要指定其他变量。 请参阅下面的配置详细信息。

SAML

SAML 是一个开放标准、基于 XML 的身份验证框架,用于在两个实体之间进行身份验证和授权,无需密码。

  • 服务提供者 (SP) 同意信任身份提供者对用户进行身份验证。
  • 身份提供者 (IdP) 对用户进行身份验证并向服务提供者提供指示用户已通过身份验证的身份验证断言。
Variable描述默认值
AUTH_<PROVIDER>_SP_metadata包含服务提供者的 XML 元数据或远程 URL 的 URL 的字符串--
AUTH_<PROVIDER>_IDP_metadata身份提供者的字符串容器 XML 元数据或远程 URL 的 URL--
AUTH_<PROVIDER>_ALLOW_PUBLIC_REGISTRATION自动创建用于验证用户的帐户。false
AUTH_<PROVIDER>_DEFAULT_ROLE_ID用于分配已创建用户的 Directus 角色 ID。--
AUTH_<PROVIDER>_IDENTIFIER_KEY用户配置文件标识符键 1。 将默认为“EMAIL_KEY”。--
AUTH_<PROVIDER>_EMAIL_KEY用户配置文件电子邮件密钥。email

1 进行身份验证时,Directus 会将来自外部用户配置文件的标识符值匹配到 Directus 用户“外部标识符”。

SP_metadataIDP_metadata 变量应该分别设置为服务提供者和身份提供者提供的 XML 元数据,或者可以设置为启动时获取的 URL。

多个提供者
Directus 用户只能使用他们创建时使用的身份验证提供程序进行身份验证。 无法为同一用户向多个提供者进行身份验证。

本地(local)

默认 Directus 电子邮件/密码身份验证流程。

无需额外配置。

SSO (oauth2 and openid)

Directus 的 SSO 集成提供了强大的替代方法来验证您的项目。 Directus 将要求您登录外部服务,并返回通过与该服务链接的 Directus 帐户进行的身份验证。

例如,您可以通过在 GitHub 中创建 OAuth 2.0 应用程序 并在 Directus 中添加以下配置,使用 GitHub 帐户登录 Directus:

AUTH_PROVIDERS="github"

AUTH_GITHUB_DRIVER="oauth2"
AUTH_GITHUB_CLIENT_ID="99d3...c3c4"
AUTH_GITHUB_CLIENT_SECRET="34ae...f963"
AUTH_GITHUB_AUTHORIZE_URL="https://github.com/login/oauth/authorize"
AUTH_GITHUB_ACCESS_URL="https://github.com/login/oauth/access_token"
AUTH_GITHUB_PROFILE_URL="https://api.github.com/user"

更多示例 SSO 配置 可以在这里找到.

这些流依赖 PUBLIC_URL 变量进行重定向。 确保变量配置正确。

OAuth 2.0

变量名描述默认值
AUTH_<PROVIDER>_CLIENT_IDOAuth 提供者的客户端标识符。--
AUTH_<PROVIDER>_CLIENT_SECRETOAuth 提供程序的客户端密码。--
AUTH_<PROVIDER>_SCOPE要请求的权限的空格分隔列表。email
AUTH_<PROVIDER>_AUTHORIZE_URLOAuth 提供者的授权页面 URL。--
AUTH_<PROVIDER>_ACCESS_URLOAuth 提供者的访问令牌 URL。--
AUTH_<PROVIDER>_PROFILE_URLOAuth 提供者的用户配置文件 URL。--
AUTH_<PROVIDER>_IDENTIFIER_KEY用户配置文件标识符键 1。将默认为“EMAIL_KEY”。--
AUTH_<PROVIDER>_EMAIL_KEY用户配置文件电子邮件密钥。email
AUTH_<PROVIDER>_FIRST_NAME_KEY用户配置文件名键。--
AUTH_<PROVIDER>_LAST_NAME_KEY用户配置文件姓氏键。--
AUTH_<PROVIDER>_ALLOW_PUBLIC_REGISTRATION自动创建用于验证用户的帐户。false
AUTH_<PROVIDER>_DEFAULT_ROLE_ID用于分配已创建用户的 Directus 角色 ID。--
AUTH_<PROVIDER>_ICON与登录链接一起显示的 SVG 图标。 在此处查看选项account_circle
AUTH_<PROVIDER>_PARAMS应用于授权 URL 的自定义查询参数。--

1 进行身份验证时,Directus 会将来自外部用户配置文件的标识符值匹配到 Directus 用户“外部标识符”。

OpenID

OpenID 是基于 OAuth 2.0 构建的身份验证协议,应尽可能优先于标准 OAuth 2.0。

变量名描述默认值
AUTH_<PROVIDER>_CLIENT_ID外部服务的客户端标识符。--
AUTH_<PROVIDER>_CLIENT_SECRET外部服务的客户端密码。--
AUTH_<PROVIDER>_SCOPE要请求的权限的空格分隔列表。openid profile email
AUTH_<PROVIDER>_ISSUER_URL外部服务的 OpenID .well-known 发现文档 URL。--
AUTH_<PROVIDER>_IDENTIFIER_KEY用户配置文件标识符键 1sub2
AUTH_<PROVIDER>_ALLOW_PUBLIC_REGISTRATION自动创建用于验证用户的帐户。false
AUTH_<PROVIDER>_REQUIRE_VERIFIED_EMAIL要求创建的用户拥有经过验证的电子邮件地址。false
AUTH_<PROVIDER>_DEFAULT_ROLE_ID用于分配已创建用户的 Directus 角色 ID。--
AUTH_<PROVIDER>_ICON与登录链接一起显示的 SVG 图标。 在此处查看选项account_circle
AUTH_<PROVIDER>_PARAMS应用于授权 URL 的自定义查询参数。--

进行身份验证时,Directus 会将来自外部用户配置文件的标识符值匹配到 Directus 用户“外部标识符”。1

sub 表示由 OpenID 提供者定义的唯一用户标识符。 对于不依赖PUBLIC_REGISTRATION的用户,建议使用人类可读的标识符,例如email2

LDAP (ldap)

LDAP 允许 Active Directory 用户进行身份验证和使用 Directus,而无需手动配置。 用户信息和角色将从 Active Directory 分配。

变量名描述默认值
AUTH_<PROVIDER>_CLIENT_URLLDAP 连接 URL。--
AUTH_<PROVIDER>_BIND_DN绑定用户 1 专有名称。--
AUTH_<PROVIDER>_BIND_PASSWORD绑定用户密码。--
AUTH_<PROVIDER>_USER_DN包含用户的目录路径。--
AUTH_<PROVIDER>_USER_ATTRIBUTE用于标识用户的属性。cn
AUTH_<PROVIDER>_USER_SCOPE用户搜索范围,baseonesub2one
AUTH_<PROVIDER>_MAIL_ATTRIBUTE用户电子邮件属性。mail
AUTH_<PROVIDER>_FIRST_NAME_ATTRIBUTE用户名属性。givenName
AUTH_<PROVIDER>_LAST_NAME_ATTRIBUTE用户姓氏属性。sn
AUTH_<PROVIDER>_GROUP_DN3包含组的目录路径。--
AUTH_<PROVIDER>_GROUP_ATTRIBUTE将用户标识为组成员的属性。member
AUTH_<PROVIDER>_GROUP_SCOPE组搜索范围,baseonesub2one
AUTH_<PROVIDER>_DEFAULT_ROLE_ID用于分配已创建用户的后备 Directus 角色 ID。--

绑定用户必须具有查询用户和组的权限才能执行身份验证。 匿名绑定可以通过为 BIND_DNBIND_PASSWORD 设置一个空值来实现。 1

范围定义了以下行为:2

  • base:将范围限制为由关联 DN 定义的单个对象。
  • one:搜索关联 DN 中的所有对象。
  • sub:搜索关联 DN 中的所有对象和子对象。
    如果指定了 GROUP_DN,则用户的角色将始终在验证到 AD 中配置的匹配组时更新,或回退到 DEFAULT_ROLE_ID3

Example: LDAP

AUTH_PROVIDERS="ldap"

AUTH_LDAP_DRIVER="ldap"
AUTH_LDAP_CLIENT_URL="ldap://ldap.directus.io"
AUTH_LDAP_BIND_DN="CN=Bind User,OU=Users,DC=ldap,DC=directus,DC=io"
AUTH_LDAP_BIND_PASSWORD="p455w0rd"
AUTH_LDAP_USER_DN="OU=Users,DC=ldap,DC=directus,DC=io"
AUTH_LDAP_GROUP_DN="OU=Groups,DC=ldap,DC=directus,DC=io"

Example: 多个身份验证提供程序

您可以配置多个提供程序来处理 Directus 中的身份验证。 这允许登录时使用不同的选项。为此,请提供以逗号分隔的提供程序名称列表,以及每个提供程序的配置块:

AUTH_PROVIDERS="google,facebook"

AUTH_GOOGLE_DRIVER="openid"
AUTH_GOOGLE_CLIENT_ID="830d...29sd"
AUTH_GOOGLE_CLIENT_SECRET="la23...4k2l"
AUTH_GOOGLE_ISSUER_URL="https://accounts.google.com/.well-known/openid-configuration"
AUTH_GOOGLE_IDENTIFIER_KEY="email"
AUTH_GOOGLE_ICON="google"

AUTH_FACEBOOK_DRIVER="oauth2"
AUTH_FACEBOOK_CLIENT_ID="830d...29sd"
AUTH_FACEBOOK_CLIENT_SECRET="jd8x...685z"
AUTH_FACEBOOK_AUTHORIZE_URL="https://www.facebook.com/dialog/oauth"
AUTH_FACEBOOK_ACCESS_URL="https://graph.facebook.com/oauth/access_token"
AUTH_FACEBOOK_PROFILE_URL="https://graph.facebook.com/me?fields=email"
AUTH_FACEBOOK_ICON="facebook"

Flows

VariableDescriptionDefault Value
FLOWS_ENV_ALLOW_LISTA comma-separated list of environment variables.false
FLOWS_EXEC_ALLOWED_MODULESA comma-separated list of node modules.false

流运行脚本操作中的用法
可以使用 require() 访问允许的模块。

js
const axios = require('axios')

允许的环境变量可以通过传递的 data 中的 $env 或通过 process.env 访问。

js
const publicUrl = data.$env.PUBLIC_URL
// OR
const publicUrl = data.$env.PUBLIC_URL
// OR
const publicUrl = process.env.PUBLIC_URL

Extensions

变量名描述默认值
EXTENSIONS_PATH本地扩展文件夹的路径。./extensions
EXTENSIONS_AUTO_RELOAD更改后自动重新加载扩展。false
EXTENSIONS_CACHE_TTL1How long custom app Extensions get cached by browsers.--

1EXTENSIONS_CACHE_TTL 环境变量控制自定义应用程序扩展(例如,界面、显示、布局、模块、面板)被浏览器缓存多长时间。 缓存可以加快应用程序的加载速度,因为扩展代码不需要在每次应用程序重新加载时从服务器重新获取。 另一方面,这意味着在 EXTENSIONS_CACHE_TTL 过期之前,浏览器不会考虑对应用程序扩展的代码更改。 默认情况下,不缓存扩展。 此环境变量的输入数据类型与 CACHE_TTL 相同。

Messenger

变量名描述默认值
MESSENGER_STOREmemoryredis1 之一memory
MESSENGER_NAMESPACE如何在 Redis 中定义通道范围directus
MESSENGER_REDISRedis connection string, e.g., redis://user:password@127.0.0.1:6380/4---

或者,您可以提供单独的连接参数:

VariableDescriptionDefault Value
MESSENGER_REDIS_HOSTHostname of the Redis instance, e.g., "127.0.0.1"--
MESSENGER_REDIS_PORTPort of the Redis instance, e.g., 6379--
MESSENGER_REDIS_USERNAMEUsername for your Redis instance, e.g., "default"--
MESSENGER_REDIS_PASSWORDPassword for your Redis instance, e.g., "yourRedisPassword"--
MESSENGER_REDIS_DBDatabase of your Redis instance to connect, e.g., 1--

redis 应该用于 Directus 的负载平衡安装1

Email

变量名描述默认值
EMAIL_VERIFY_SETUP检查电子邮件设置是否正确配置。true
EMAIL_FROM发送电子邮件的电子邮件地址。no-reply@directus.io
EMAIL_TRANSPORT使用什么来发送电子邮件。 sendmailsmtpmailgunsendgridses 之一。sendmail

根据使用的 EMAIL_TRANSPORT,您还必须提供以下配置:

Sendmail (sendmail)

变量名描述默认值
EMAIL_SENDMAIL_NEW_LINE在 sendmail 中使用什么新的线条样式。unix
EMAIL_SENDMAIL_PATH您的 sendmail 可执行文件的路径。/usr/sbin/sendmail

SMTP (smtp)

变量名描述默认值
EMAIL_SMTP_NAMESMTP HostName--
EMAIL_SMTP_HOSTSMTP Host--
EMAIL_SMTP_PORTSMTP Port--
EMAIL_SMTP_USERSMTP User--
EMAIL_SMTP_PASSWORDSMTP Password--
EMAIL_SMTP_POOLUse SMTP pooling--
EMAIL_SMTP_SECUREEnable TLS--
EMAIL_SMTP_IGNORE_TLSIgnore TLS--

Mailgun (mailgun)

变量名描述默认值
EMAIL_MAILGUN_API_KEYYour Mailgun API key.--
EMAIL_MAILGUN_DOMAIN您的 Mailgun 帐户中的域名--
EMAIL_MAILGUN_HOST允许您指定自定义主机。api.mailgun.net

SendGrid (sendgrid)

变量名描述默认值
EMAIL_SENDGRID_API_KEYYour SendGrid API key.--

AWS SES (ses)

变量名描述默认值
EMAIL_SES_CREDENTIALS__ACCESS_KEY_IDYour AWS SES access key. ID.--
EMAIL_SES_CREDENTIALS__SECRET_ACCESS_KEYYour AWS SES secret key.--
EMAIL_SES_REGIONYour AWS SES region.--

管理员帐户

如果您依赖 Docker 和/或 directus bootstrap CLI 命令,可以传递以下两个环境变量来自动配置第一个用户:

变量名描述默认值
ADMIN_EMAIL使用directus bootstrap时自动创建的第一个用户的电子邮件地址。--
ADMIN_PASSWORD使用directus bootstrap时自动创建的第一个用户的密码。--

遥测

为了更准确地衡量安装频率、版本碎片和用户群的总体规模,Directus 收集了关于您的环境的少量匿名数据。 您可以使用以下环境变量轻松选择退出:

变量名描述默认值
TELEMETRY允许 Directus 收集有关您的环境的匿名数据。true

限制和优化

允许您配置硬技术限制,以防止滥用并针对您的特定服务器环境进行优化。

变量名描述默认值
RELATIONAL_BATCH_SIZE构建嵌套关系数据集时一次读入内存的行数25000
EXPORT_BATCH_SIZE构建导出时一次读入内存的行数5000