環境變數提供了一種強大的方式來設定 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 及其元件使用的網路介面和連接埠。
| Variable | Purpose | Default |
|---|---|---|
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 和安全策略。
| Variable | Purpose | Default / Notes |
|---|---|---|
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 | 停用密碼金鑰使用者驗證。設為 1 停用。 | 0(啟用) |
資料庫與儲存
設定資料庫連線和快取機制。
| Variable | Purpose | Default / Notes |
|---|---|---|
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 的行為。
| Variable | Purpose | Default |
|---|---|---|
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 |
日誌與除錯
控制日誌級別、位置並啟用除錯模式。
| Variable | Purpose | Default / Values |
|---|---|---|
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 |
效能與限制
調整效能參數並設定操作限制。
| Variable | Purpose | Default |
|---|---|---|
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 如何處理網域、憑證和路由。
| Variable | Purpose | Default / Values |
|---|---|---|
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 互動的外部服務端點。
| Variable | Purpose | Default |
|---|---|---|
ABT_NODE_WEB_WALLET_URL | 網路錢包服務的 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 |
開發與測試
主要用於開發、測試和除錯目的的變數。
| Variable | Purpose | Default / Notes |
|---|---|---|
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 |
系統產生的變數
這些變數在執行時由系統自動設定。您不應手動設定它們,因為它們的值來自系統的狀態和上下文。
| Variable | Purpose |
|---|---|
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 歷史記錄或純文字檔案中洩露密鑰。