配置文件
默认情况下,Directus 将读取位于项目 package.json
旁边的 .env
文件(通常位于项目的根文件夹中)以进行配置。 您可以在启动 Directus 之前通过设置 CONFIG_PATH
环境变量来更改此路径和文件名。 例如:
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"
{
"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"
HOST: 0.0.0.0
PORT: 8055
DB_CLIENT: pg
DB_HOST: localhost
DB_PORT: 5432
#
# etc
config.js
为您的配置使用 JavaScript 文件允许您在启动期间动态生成项目的配置。 JavaScript 配置支持两种不同的格式,一种是 Object Structure,其中键是环境变量名称:
// Object Syntax
module.exports = {
HOST: '0.0.0.0',
PORT: 8055,
DB_CLIENT: 'pg',
DB_HOST: 'localhost',
DB_PORT: 5432,
// etc
}
或者一个 功能结构 returns 与上述相同的对象格式。 该函数将 process.env
作为其参数。
// 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"
类型转换和嵌套
环境变量会根据变量的结构自动进行类型转换,例如:
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。 您可以对嵌套对象使用双下划线 (__
):
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 Prefix | Example | Output |
---|---|---|
string | string:value | "value" |
number | number:3306 | 3306 |
regex | regex:\.example\.com$ | /\.example\.com$/ |
array | array: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$/] |
json | json:{"items": ["example1", "example2"]} | {"items": ["example1", "example2"]} |
General
变量名 | 描述 | 默认值 |
---|---|---|
CONFIG_PATH | 您的配置文件所在的位置。请参阅 配置文件 | .env |
HOST | API 侦听的 IP 或主机。 | 0.0.0.0 |
PORT | 在哪个端口下运行 API。 | 8055 |
PUBLIC_URL 1 | 可以在 Web 上访问您的 API 的 URL。 | / |
LOG_LEVEL | 要记录的详细程度。 fatal 、error 、warn 、info 、debug 、trace 或silent 之一。 | info |
LOG_STYLE | 将日志呈现为人类可读(漂亮)或 JSON。 pretty 、raw 之一。 | pretty |
MAX_PAYLOAD_SIZE | 控制最大请求正文大小。接受字节数或人类可读的字符串。 | 100kb |
ROOT_REDIRECT | 导航到 / 时重定向到的位置。接受相对路径、绝对 URL 或 false 来禁用。 | ./admin |
SERVE_APP | 是否在 /admin 下服务 Admin App。 | true |
GRAPHQL_INTROSPECTION | 是否启用 GraphQL Introspection | true |
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 | 必需的。使用什么数据库客户端。 pg 或 postgres 、mysql 、oracledb 、mssql 、sqlite3 、cockroachdb 之一。 | -- |
DB_HOST | 数据库主机。 在使用 pg 、mysql 、oracledb 或 mssql 时是必需的。 | -- |
DB_PORT | 数据库端口。 在使用 pg 、mysql 、oracledb 或 mssql 时是必需的。 | -- |
DB_DATABASE | 数据库名称。 在使用 pg 、mysql 、oracledb 或 mssql 时是必需的。 | -- |
DB_USER | 数据库用户。 在使用 pg 、mysql 、oracledb 或 mssql 时是必需的。 | -- |
DB_PASSWORD | 数据库用户的密码。 **在使用 pg 、mysql 、oracledb 或 mssql 时是必需的。 | -- |
DB_FILENAME | 在哪里读/写 SQLite 数据库。 使用 sqlite3 时需要。 | -- |
DB_CONNECTION_STRING | 使用 pg 时,您可以提交连接字符串而不是单个属性。使用它会忽略任何其他连接设置。 | -- |
DB_POOL__* | 池化设置。传递给 tarn.js 库。 | -- |
DB_EXCLUDE_TABLES | 您希望 Directus 完全忽略的表的 CSV | spatial_ref_sys,sysdiagrams |
DB_CHARSET | 用于连接 MySQL/MariaDB 的字符集/排序规则 | UTF8_GENERAL_CI |
DB_VERSION | 数据库版本,以防您使用 PostgreSQL 适配器连接非标准数据库。通常不需要。 | -- |
DB_HEALTHCHECK_THRESHOLD | 以毫秒为单位的健康检查超时阈值。 | 150 |
其他数据库变量
所有 DB_*
环境变量都传递给 Knex
实例 的 connection
配置。 根据您项目的需要,您可以使用需要传递给数据库实例的任何配置来扩展 DB_*
环境变量。
安全性
变量名 | 描述 | 默认值 |
---|---|---|
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_PROXY | express'信任代理设置的设置 | 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_NAME
、REFRESH_TOKEN_COOKIE_SECURE
和 REFRESH_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_ORIGIN | Access-Control-Allow-Origin 标头的值。 使用 true 匹配 Origin 标头,或提供域或域的 CSV 以进行特定访问 | false |
CORS_METHODS | Access-Control-Allow-Methods 标头的值。 | GET,POST,PATCH,DELETE |
CORS_ALLOWED_HEADERS | Access-Control-Allow-Headers 标头的值。 | Content-Type,Authorization |
CORS_EXPOSED_HEADERS | Access-Control-Expose-Headers 标头的值。 | Content-Range |
CORS_CREDENTIALS | 是否发送 Access-Control-Allow-Credentials 标头。 | true |
CORS_MAX_AGE | Access-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 | 存储速率限制器计数的位置。 memory 、redis 或 memcache 之一。 | memory |
RATE_LIMITER_HEALTHCHECK_THRESHOLD | 以毫秒为单位的健康检查超时阈值。 | 150 |
根据使用的 RATE_LIMITER_STORE
,您还必须提供以下配置:
内存
无需额外配置。
Redis
变量名 | 描述 | 默认值 |
---|---|---|
RATE_LIMITER_REDIS | Redis 连接字符串,例如 , redis://user:password@127.0.0.1:6380/4 | --- |
或者,您可以提供单独的连接参数:
变量名 | 描述 | 默认值 |
---|---|---|
RATE_LIMITER_REDIS_HOST | Hostname of the Redis instance, e.g., "127.0.0.1" | -- |
RATE_LIMITER_REDIS_PORT | Port of the Redis instance, e.g., 6379 | -- |
RATE_LIMITER_REDIS_USERNAME | Username for your Redis instance, e.g., "default" | -- |
RATE_LIMITER_REDIS_PASSWORD | Password for your Redis instance, e.g., "yourRedisPassword" | -- |
RATE_LIMITER_REDIS_DB | Database 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_SCHEMA
和 CACHE_PERMISSIONS
。 这些加快了 Directus 的整体性能,因为我们不想内省整个数据库或检查每个请求的所有权限。 运行 Directus 负载平衡时,您需要使用共享缓存存储(如 Redis 或 Memcache),否则禁用所有缓存。
资产缓存/assets
端点的 Cache-Control
和 Last-Modified
标头与常规数据缓存分开。 Last-Modified
来自 modified_on
数据库字段。 这很有用,因为缓存资产的时间通常比缓存数据库内容的时间要长得多。 要了解更多信息,请参阅 资产。
变量名 | 描述 | 默认值 |
---|---|---|
CACHE_ENABLED | 是否启用数据缓存。 | false |
CACHE_TTL 1 | 数据缓存保留多长时间。 | 5m |
CACHE_CONTROL_S_MAXAGE | 是否不添加 s-maxage 过期标志。设置为自定义值的数字。 | 0 |
CACHE_AUTO_PURGE 2 | 在“创建”、“更新”和“删除”操作时自动清除数据缓存。 | false |
CACHE_SYSTEM_TTL 3 | CACHE_SCHEMA 和 CACHE_PERMISSIONS 保留多长时间。 | -- |
CACHE_SCHEMA 3 | 数据库模式是否被缓存。 false 、true 之一 | true |
CACHE_PERMISSIONS 3 | 是否缓存用户权限。 false 、true 之一 | true |
CACHE_NAMESPACE | 如何确定缓存数据的范围。 | directus-cache |
CACHE_STORE 4 | 在哪里存储缓存数据。 “memory”、“redis”或“memcache”。 | memory |
CACHE_STATUS_HEADER | 如果设置,则在配置的标头中返回缓存状态。 HIT ,MISS 之一。 | -- |
CACHE_VALUE_MAX_SIZE | 将被缓存的值的最大大小。接受字节数或人类可读的字符串。使用 false 无限制 | false |
CACHE_HEALTHCHECK_THRESHOLD | 以毫秒为单位的健康检查超时阈值。 | 150 |
1 CACHE_TTL
根据您项目的需要,您可能能够主动缓存您的数据,只需要大约每小时获取一次新数据。这使您可以从 Directus 实例中获得最大的性能。这对于您拥有大量(公共)读取访问权限且更新不是实时的应用程序(例如网站)非常有用。 CACHE_TTL
使用 ms
来解析该值,因此您可以使用人类可读的值(例如 2 days
、7 hrs
、 5m
)。
2 CACHE_AUTO_PURGE
允许您保持 Directus API 的实时性,同时仍然在快速后续读取时获得性能优势。
3 不受 CACHE_ENABLED
值的影响。
4 CACHE_STORE
对于较大的项目,您很可能不想依赖本地内存进行缓存。相反,您可以使用上面的 CACHE_STORE
环境变量来使用 memcache
或 redis
作为缓存存储。根据选择的 CACHE_STORE
,您还必须提供以下配置:
内存
无需额外配置。
Redis
变量名 | 描述 | 默认值 |
---|---|---|
CACHE_REDIS | Redis 连接字符串,例如, redis://user:password@127.0.0.1:6380/4 | --- |
或者,您可以提供单独的连接参数:
变量名 | 描述 | 默认值 |
---|---|---|
CACHE_REDIS_HOST | Hostname of the Redis instance, e.g., "127.0.0.1" | -- |
CACHE_REDIS_PORT | Port of the Redis instance, e.g., 6379 | -- |
CACHE_REDIS_USERNAME | Username for your Redis instance, e.g., "default" | -- |
CACHE_REDIS_PASSWORD | Password for your Redis instance, e.g., "yourRedisPassword" | -- |
CACHE_REDIS_DB | Database 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 | 使用哪个驱动程序,local 、s3 、gcs 、azure | |
STORAGE_<LOCATION>_ROOT | 在磁盘上存储文件的位置 | '' |
STORAGE_<LOCATION>_HEALTHCHECK_THRESHOLD | 以毫秒为单位的健康检查超时阈值。 | 750 |
根据您配置的驱动程序,您还必须提供以下配置:
Local (local
)
变量名 | 描述 | 默认值 |
---|---|---|
STORAGE_<LOCATION>_ROOT | Where to store the files on disk | -- |
S3 (s3
)
变量名 | 描述 | 默认值 |
---|---|---|
STORAGE_<LOCATION>_KEY | User key | -- |
STORAGE_<LOCATION>_SECRET | User secret | -- |
STORAGE_<LOCATION>_BUCKET | S3 Bucket | -- |
STORAGE_<LOCATION>_REGION | S3 Region | -- |
STORAGE_<LOCATION>_ENDPOINT | S3 Endpoint | s3.amazonaws.com |
STORAGE_<LOCATION>_ACL | S3 ACL | -- |
STORAGE_<LOCATION>_SERVER_SIDE_ENCRYPTION | S3 Server Side Encryption | -- |
STORAGE_<LOCATION>_FORCE_PATH_STYLE | S3 Force Path Style | false |
Azure (azure
)
变量名 | 描述 | 默认值 |
---|---|---|
STORAGE_<LOCATION>_CONTAINER_NAME | Azure Storage container | -- |
STORAGE_<LOCATION>_ACCOUNT_NAME | Azure Storage account name | -- |
STORAGE_<LOCATION>_ACCOUNT_KEY | Azure Storage key | -- |
STORAGE_<LOCATION>_ENDPOINT | Azure URL | https://{ACCOUNT_NAME}.blob.core.windows.net |
Google Cloud Storage (gcs
)
变量名 | 描述 | 默认值 |
---|---|---|
STORAGE_<LOCATION>_KEY_FILENAME | Path to key file on disk | -- |
STORAGE_<LOCATION>_BUCKET | Google 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_POLICY | Content-Security-Policy 标头的自定义覆盖。 有关详细信息,请参阅 helmet 的文档。 | -- |
ASSETS_INVALID_IMAGE_SENSITIVITY_LEVEL | 对无效图像的敏感程度。 请参阅 sharp.failOn option | warning |
图像转换在内存使用方面可能相当繁重。 如果您使用的系统具有 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_metadata
和 IDP_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_ID | OAuth 提供者的客户端标识符。 | -- |
AUTH_<PROVIDER>_CLIENT_SECRET | OAuth 提供程序的客户端密码。 | -- |
AUTH_<PROVIDER>_SCOPE | 要请求的权限的空格分隔列表。 | email |
AUTH_<PROVIDER>_AUTHORIZE_URL | OAuth 提供者的授权页面 URL。 | -- |
AUTH_<PROVIDER>_ACCESS_URL | OAuth 提供者的访问令牌 URL。 | -- |
AUTH_<PROVIDER>_PROFILE_URL | OAuth 提供者的用户配置文件 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 | 用户配置文件标识符键 1。 | sub 2 |
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
的用户,建议使用人类可读的标识符,例如email
。2
LDAP (ldap
)
LDAP 允许 Active Directory 用户进行身份验证和使用 Directus,而无需手动配置。 用户信息和角色将从 Active Directory 分配。
变量名 | 描述 | 默认值 |
---|---|---|
AUTH_<PROVIDER>_CLIENT_URL | LDAP 连接 URL。 | -- |
AUTH_<PROVIDER>_BIND_DN | 绑定用户 1 专有名称。 | -- |
AUTH_<PROVIDER>_BIND_PASSWORD | 绑定用户密码。 | -- |
AUTH_<PROVIDER>_USER_DN | 包含用户的目录路径。 | -- |
AUTH_<PROVIDER>_USER_ATTRIBUTE | 用于标识用户的属性。 | cn |
AUTH_<PROVIDER>_USER_SCOPE | 用户搜索范围,base 、one 、sub 2。 | one |
AUTH_<PROVIDER>_MAIL_ATTRIBUTE | 用户电子邮件属性。 | mail |
AUTH_<PROVIDER>_FIRST_NAME_ATTRIBUTE | 用户名属性。 | givenName |
AUTH_<PROVIDER>_LAST_NAME_ATTRIBUTE | 用户姓氏属性。 | sn |
AUTH_<PROVIDER>_GROUP_DN 3 | 包含组的目录路径。 | -- |
AUTH_<PROVIDER>_GROUP_ATTRIBUTE | 将用户标识为组成员的属性。 | member |
AUTH_<PROVIDER>_GROUP_SCOPE | 组搜索范围,base 、one 、sub 2。 | one |
AUTH_<PROVIDER>_DEFAULT_ROLE_ID | 用于分配已创建用户的后备 Directus 角色 ID。 | -- |
绑定用户必须具有查询用户和组的权限才能执行身份验证。 匿名绑定可以通过为 BIND_DN
和 BIND_PASSWORD
设置一个空值来实现。 1
范围定义了以下行为:2
base
:将范围限制为由关联 DN 定义的单个对象。one
:搜索关联 DN 中的所有对象。sub
:搜索关联 DN 中的所有对象和子对象。
如果指定了GROUP_DN
,则用户的角色将始终在验证到 AD 中配置的匹配组时更新,或回退到DEFAULT_ROLE_ID
。3
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
Variable | Description | Default Value |
---|---|---|
FLOWS_ENV_ALLOW_LIST | A comma-separated list of environment variables. | false |
FLOWS_EXEC_ALLOWED_MODULES | A comma-separated list of node modules. | false |
流运行脚本操作中的用法
可以使用 require()
访问允许的模块。
const axios = require('axios')
允许的环境变量可以通过传递的 data
中的 $env
或通过 process.env
访问。
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_TTL 1 | How long custom app Extensions get cached by browsers. | -- |
1EXTENSIONS_CACHE_TTL
环境变量控制自定义应用程序扩展(例如,界面、显示、布局、模块、面板)被浏览器缓存多长时间。 缓存可以加快应用程序的加载速度,因为扩展代码不需要在每次应用程序重新加载时从服务器重新获取。 另一方面,这意味着在 EXTENSIONS_CACHE_TTL 过期之前,浏览器不会考虑对应用程序扩展的代码更改。 默认情况下,不缓存扩展。 此环境变量的输入数据类型与 CACHE_TTL
相同。
Messenger
变量名 | 描述 | 默认值 |
---|---|---|
MESSENGER_STORE | memory 、redis 1 之一 | memory |
MESSENGER_NAMESPACE | 如何在 Redis 中定义通道范围 | directus |
MESSENGER_REDIS | Redis connection string, e.g., redis://user:password@127.0.0.1:6380/4 | --- |
或者,您可以提供单独的连接参数:
Variable | Description | Default Value |
---|---|---|
MESSENGER_REDIS_HOST | Hostname of the Redis instance, e.g., "127.0.0.1" | -- |
MESSENGER_REDIS_PORT | Port of the Redis instance, e.g., 6379 | -- |
MESSENGER_REDIS_USERNAME | Username for your Redis instance, e.g., "default" | -- |
MESSENGER_REDIS_PASSWORD | Password for your Redis instance, e.g., "yourRedisPassword" | -- |
MESSENGER_REDIS_DB | Database of your Redis instance to connect, e.g., 1 | -- |
redis
应该用于 Directus 的负载平衡安装1
变量名 | 描述 | 默认值 |
---|---|---|
EMAIL_VERIFY_SETUP | 检查电子邮件设置是否正确配置。 | true |
EMAIL_FROM | 发送电子邮件的电子邮件地址。 | no-reply@directus.io |
EMAIL_TRANSPORT | 使用什么来发送电子邮件。 sendmail 、smtp 、mailgun 、sendgrid 、ses 之一。 | sendmail |
根据使用的 EMAIL_TRANSPORT
,您还必须提供以下配置:
Sendmail (sendmail
)
变量名 | 描述 | 默认值 |
---|---|---|
EMAIL_SENDMAIL_NEW_LINE | 在 sendmail 中使用什么新的线条样式。 | unix |
EMAIL_SENDMAIL_PATH | 您的 sendmail 可执行文件的路径。 | /usr/sbin/sendmail |
SMTP (smtp
)
变量名 | 描述 | 默认值 |
---|---|---|
EMAIL_SMTP_NAME | SMTP HostName | -- |
EMAIL_SMTP_HOST | SMTP Host | -- |
EMAIL_SMTP_PORT | SMTP Port | -- |
EMAIL_SMTP_USER | SMTP User | -- |
EMAIL_SMTP_PASSWORD | SMTP Password | -- |
EMAIL_SMTP_POOL | Use SMTP pooling | -- |
EMAIL_SMTP_SECURE | Enable TLS | -- |
EMAIL_SMTP_IGNORE_TLS | Ignore TLS | -- |
Mailgun (mailgun
)
变量名 | 描述 | 默认值 |
---|---|---|
EMAIL_MAILGUN_API_KEY | Your Mailgun API key. | -- |
EMAIL_MAILGUN_DOMAIN | 您的 Mailgun 帐户中的域名 | -- |
EMAIL_MAILGUN_HOST | 允许您指定自定义主机。 | api.mailgun.net |
SendGrid (sendgrid
)
变量名 | 描述 | 默认值 |
---|---|---|
EMAIL_SENDGRID_API_KEY | Your SendGrid API key. | -- |
AWS SES (ses
)
变量名 | 描述 | 默认值 |
---|---|---|
EMAIL_SES_CREDENTIALS__ACCESS_KEY_ID | Your AWS SES access key. ID. | -- |
EMAIL_SES_CREDENTIALS__SECRET_ACCESS_KEY | Your AWS SES secret key. | -- |
EMAIL_SES_REGION | Your 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 |