环境变量提供了一种强大的方式来配置 Blocklet Server 及其运行的 blocklet。它们会覆盖配置文件中的默认设置和值,使其成为在不同环境(如开发、预演和生产)中定制设置的理想选择。
配置优先级
Blocklet Server 按特定的优先顺序应用设置,后面的来源会覆盖前面的来源:
默认值
服务器内置的默认设置。
配置文件
在
config.yml文件中定义的设置。环境变量
最高优先级。您设置的任何
ABT_NODE_*变量都将优先于其他来源。
Blocklet 特定环境
单个 blocklet 可以在其 blocklet.yml 清单文件中定义自己所需的环境变量。当您在开发模式下运行 blocklet 时(例如,使用 blocklet dev),可以通过在 blocklet 的根目录中创建 .env 文件来提供这些变量。
Blocklet Server 使用 dotenv-flow 来加载这些文件,这意味着您可以使用 .env、.env.development 和 .env.local 等级联文件来管理特定于环境的配置。如果在启动 blocklet 时缺少任何必需的变量,CLI 将提示您输入它们。
Blocklet Server 环境变量
所有控制核心 Blocklet Server 守护进程的环境变量都以 ABT_NODE_ 为前缀。以下各节按类别提供了这些变量的全面参考。
网络和端口
这些变量配置 Blocklet Server 及其组件使用的网络接口和端口。
| 变量 | 用途 | 默认值 |
|---|---|---|
ABT_NODE_PORT | Blocklet Server 守护进程监听的主端口。 | 8089 |
ABT_NODE_SERVICE_PORT | 用于内部服务通信的端口。 | 40404 |
ABT_NODE_BLOCKLET_PORT | blocklet 应用程序的起始端口。 | 8090 |
ABT_NODE_HTTP_PORT | 网关/路由器的 HTTP 端口。 | 80 |
ABT_NODE_HTTPS_PORT | 网关/路由器的 HTTPS 端口。 | 443 |
ABT_NODE_ROUTER_HTTP_PORT | 专用于路由器提供程序的 HTTP 端口。 | 与 ABT_NODE_HTTP_PORT 相同 |
ABT_NODE_ROUTER_HTTPS_PORT | 专用于路由器提供程序的 HTTPS 端口。 | 与 ABT_NODE_HTTPS_PORT 相同 |
ABT_NODE_UPDATER_PORT | 更新器服务的端口。 | 40405 |
ABT_NODE_EVENT_PORT | 事件中心通信的端口。 | 40407 |
ABT_NODE_HOST | 服务器绑定的主机地址。 | 0.0.0.0 |
身份验证和安全
管理访问控制、会话、DID 和安全策略。
| 变量 | 用途 | 默认值 / 说明 |
|---|---|---|
ABT_NODE_DID | 服务器实例的去中心化身份标识。 | 系统生成 |
ABT_NODE_PK | 服务器 DID 的公钥。 | 系统生成 |
ABT_NODE_SK | 服务器 DID 的密钥。 | 系统生成(请妥善保管) |
ABT_NODE_SESSION_SECRET | 会话加密的密钥。 | 系统生成 |
ABT_NODE_TOKEN_SECRET | JWT 令牌签名的密钥。 | 系统生成 |
ABT_NODE_SESSION_TTL | 会话的生存时间(秒)。 | 3600(1 小时) |
ABT_NODE_SESSION_CACHE_TTL | 会话缓存的生存时间(秒)。 | 300(5 分钟) |
ABT_NODE_ADMIN_PATH | 管理仪表板的路径前缀。 | /.well-known/service/admin |
ABT_NODE_IP_WHITELIST | 允许访问管理后台的 IP 地址逗号分隔列表。 | 无(允许所有 IP) |
ABT_NODE_DOMAIN_WHITELIST | 允许 CORS 的域名逗号分隔列表。 | 无 |
ABT_NODE_DOMAIN_BLACKLIST | 要阻止的域名逗号分隔列表。 | 无 |
ABT_NODE_DOMAIN_WHITELIST_HEADERS | 在 CORS 白名单响应中包含的额外标头。 | 无 |
ABT_NODE_NO_PASSKEY_USER_VERIFY | 禁用 passkey 用户验证。设置为 1 禁用。 | 0(启用) |
数据库和存储
配置数据库连接和缓存机制。
| 变量 | 用途 | 默认值 / 说明 |
|---|---|---|
ABT_NODE_POSTGRES_URL | PostgreSQL 连接 URL。 | 如果未指定,则使用 SQLite。 |
ABT_NODE_CACHE_SQLITE_PATH | SQLite 缓存数据库文件的路径。 | {DATA_DIR}/core/db-cache.db |
ABT_NODE_CACHE_REDIS_URL | 用于缓存的 Redis 连接 URL。 | 无(使用内存缓存) |
ABT_NODE_SQLITE_LARGE_CACHE | 为 SQLite 启用大缓存。设置为 1 启用。 | 0(禁用) |
ABT_NODE_NO_CACHE | 完全禁用缓存。设置为 1 禁用。 | 0(启用) |
ABT_NODE_IGNORE_USE_POSTGRES | 即使配置了 PostgreSQL 也强制使用 SQLite。设置为 1。 | 0 |
ABT_NODE_IGNORE_RESTART_POSTGRES | 启动时跳过重启 PostgreSQL。设置为 1。 | 0 |
Docker 配置
自定义在 Docker 容器中运行的 blocklet 的行为。
| 变量 | 用途 | 默认值 |
|---|---|---|
ABT_NODE_NOT_ALLOW_DOCKER | 完全禁用 Docker 支持。设置为 1 禁用。 | 0(启用) |
ABT_NODE_DOCKER_MEMORY | Docker 容器的默认内存限制。 | 512m |
ABT_NODE_DOCKER_CPUS | Docker 容器的默认 CPU 限制。 | 1 |
ABT_NODE_DOCKER_DISK_SIZE | Docker 容器的默认磁盘大小限制。 | 10g |
ABT_NODE_SKIP_DOCKER_CHOWN | 在 Docker 容器中跳过 chown 操作。设置为 1 跳过。 | 0 |
ABT_NODE_TEST_DOCKER | 启用 Docker 测试模式。设置为 1 启用。 | 0 |
日志和调试
控制日志级别、位置并启用调试模式。
| 变量 | 用途 | 默认值 / 可选值 |
|---|---|---|
ABT_NODE_LOG_DIR | 日志文件的目录。 | {DATA_DIR}/logs/_abtnode |
ABT_NODE_LOG_NAME | 日志文件的名称。 | daemon |
ABT_NODE_LOG_LEVEL | 日志级别。 | info(可选值:error, warn, info, debug) |
ABT_NODE_DEBUG_AS_SERVERLESS | 启用无服务器调试模式。设置为 1 启用。 | 0 |
ABT_NODE_DEV_MODE | 启用开发模式并提供额外的调试信息。设置为 1 启用。 | 0 |
性能和限制
调整性能参数并设置操作限制。
| 变量 | 用途 | 默认值 |
|---|---|---|
ABT_NODE_MAX_CLUSTER_SIZE | 集群实例的最大数量。 | 4 |
ABT_NODE_JOB_BACKOFF_SECONDS | 作业调度的退避时间(秒)。 | 600(10 分钟) |
ABT_NODE_BLACKLIST_REFRESH_INTERVAL | 刷新黑名单的间隔(分钟)。 | 2 |
ABT_NODE_EMAIL_RATE_LIMIT | 电子邮件操作的速率限制(每分钟)。 | 10 |
ABT_NODE_EMAIL_VERIFY_RATE_LIMIT | 电子邮件验证的速率限制(每分钟)。 | 5 |
ABT_NODE_ENSURE_RUNNING_CHECK_INTERVAL | 检查正在运行的 blocklet 的间隔(毫秒)。 | 30000(30 秒) |
ABT_NODE_ENSURE_RUNNING_HIGH_LOAD_CPU | 高负载检测的 CPU 阈值(%)。 | 80 |
ABT_NODE_ENSURE_RUNNING_HIGH_LOAD_MEMORY | 高负载检测的内存阈值(%)。 | 80 |
ABT_NODE_ENSURE_RUNNING_HIGH_LOAD_DISK | 高负载检测的磁盘阈值(%)。 | 90 |
ABT_NODE_ENABLE_ENSURE_BLOCKLET_RUNNING | 启用自动确保 blocklet 运行。设置为 0 禁用。 | 1 |
域和路由
配置 Blocklet Server 如何处理域、证书和路由。
| 变量 | 用途 | 默认值 / 可选值 |
|---|---|---|
ABT_NODE_DID_DOMAIN | 用于基于 DID 路由的域。 | 自动检测 |
ABT_NODE_SLP_DOMAIN | 用于 SLP(服务定位协议)的域。 | 自动检测 |
ABT_NODE_DASHBOARD_DOMAIN | 管理仪表板的域。 | 自动检测 |
ABT_NODE_WILDCARD_CERT_HOST | 下载通配符证书的主机。 | https://releases.arcblock.io/certs |
ABT_NODE_ENABLE_SLP_DOMAIN | 启用 SLP 域支持。设置为 1 启用。 | 0 |
ABT_NODE_ENABLE_IPV6 | 启用 IPv6 支持。设置为 1 启用。 | 0 |
ABT_NODE_FORCE_INTRANET | 强制内网模式。设置为 1 启用。 | 0 |
ABT_NODE_ROUTER_PROVIDER | 路由器提供程序实现。 | nginx(可选值:nginx, nodejs) |
ABT_NODE_ROUTER_CONFIG | 附加路由器配置文件的路径。 | 无 |
外部服务
配置 Blocklet Server 与之交互的外部服务的端点。
| 变量 | 用途 | 默认值 |
|---|---|---|
ABT_NODE_WEB_WALLET_URL | Web 钱包服务的 URL。 | https://web.abtnetwork.io |
ABT_NODE_DID_REGISTRY | DID 注册中心端点。 | https://registry.arcblock.io |
ABT_NODE_LAUNCHER_DID | 启动器服务的 DID。 | 自动配置 |
ABT_NODE_BLOCKLET_LAUNCHER_URL | 节点注册的地址。 | 自动检测 |
ABT_NODE_EVENT_HOSTNAME | 事件中心的主机名。 | localhost |
开发和测试
主要用于开发、测试和调试目的的变量。
| 变量 | 用途 | 默认值 / 说明 |
|---|---|---|
ABT_NODE_SKIP_VERSION_CHECK | 跳过版本兼容性检查。设置为 1 跳过。 | 0 |
ABT_NODE_TEST_DNS_SERVER | 用于测试的 DNS 服务器。 | 无 |
ABT_NODE_TEST_MIN_CONSECUTIVE_TIME | 测试运行的最小连续时间(毫秒)。 | 1000 |
ABT_NODE_MOCK_DID_NAMES | 用于测试的模拟 DID 名称(逗号分隔)。 | 无 |
ABT_NODE_FAKE_DISK_INFO | 使用伪造的磁盘信息进行测试。设置为 1 启用。 | 0 |
系统生成的变量
这些变量由系统在运行时自动设置。您不应手动配置它们,因为它们的值源自系统的状态和上下文。
| 变量 | 用途 |
|---|---|
ABT_NODE_BINARY_NAME | CLI 二进制文件的名称。 |
ABT_NODE_COMMAND_NAME | 正在执行的 CLI 命令的名称。 |
ABT_NODE_PACKAGE_NAME | 服务器的 NPM 包名。 |
ABT_NODE_VERSION | Blocklet Server 的版本。 |
ABT_NODE_RESTART_RUNNING_COMPONENT | 指示组件重启状态的标志。 |
ABT_NODE_OWNER_NFT_HOLDER | 所有权的 NFT 持有者信息。 |
ABT_NODE_OWNER_NFT_ISSUER | 所有权的 NFT 发行者信息。 |
ABT_NODE_BLOCKLET_MODE | 当前的 blocklet 模式。 |
ABT_NODE_KERNEL_MODE | 当前的内核模式。 |
安全注意事项
在配置 Blocklet Server 时,请牢记以下安全最佳实践:
- 保护密钥:始终为
ABT_NODE_SESSION_SECRET和ABT_NODE_SK等密钥使用强随机生成的值。 - 限制访问:仅授权用户可以访问数据目录和任何配置文件。
- 使用管理工具:对于生产部署,考虑使用专用工具管理环境变量,以避免在 shell 历史记录或纯文本文件中暴露密钥。