Bitcart 0.10.3.0 配置参数详解
详解 Bitcart 0.10.3.0 双配置体系与优先级规则,按分类给出全部核心参数默认值,LOG_LEVEL/BTC_NETWORK/BTC_DEBUG 等关键参数附真实服务器实测回显与生产配置模板。
Bitcart 0.10.3.0 配置参数详解
目标:讲清 Bitcart 0.10.3.0 的配置读取机制(API 与 daemon 双体系、优先级规则、生效方式),按分类给出全部核心参数的环境变量名、默认值与说明,关键参数均附真实服务器实测验证回显,并提供生产配置模板。
一、配置体系总览
Bitcart 的配置分为两个独立体系,都从 Bitcart 仓库根目录下的 conf/.env 文件读取:
| 体系 | 消费进程 | 读取实现 | 参数命名规则 |
|---|---|---|---|
| API / worker 体系 | Merchants API、后台 worker | pydantic-settings(env_file="conf/.env") | 环境变量名即参数名(如 DB_PASSWORD),与内部属性名可能不同 |
| daemon 体系 | 各币种守护进程(btc.py 等) | python-decouple(AutoConfig(search_path="conf")) | 币种前缀 + 参数名(如 BTC_NETWORK、LTC_NETWORK) |
优先级规则(从高到低,已实测验证,见 2.3 节):
进程环境变量(systemd Environment= / export) > conf/.env > 代码内默认值
生效方式:conf/.env 是进程启动时一次性读取的静态文件,修改后必须重启对应服务(systemctl restart <服务名>)才会生效。
二、查看与修改配置(实测)
2.1 查看当前配置
cat /opt/bitcart/bitcart/conf/.env
实测输出(最小安装配置):
DB_PASSWORD=q1w2e3r4
BITCART_CRYPTOS=btc
查看 systemd 层注入的环境变量(优先级高于 conf/.env):
systemctl show bitcart-api --property=Environment
实测输出:
Environment=BITCART_API_WORKERS=2
2.2 修改配置的标准步骤
- 编辑
conf/.env(每行一个KEY=VALUE); - 重启消费该参数的服务:API/worker 参数重启
bitcart-api、bitcart-worker;daemon 参数重启对应的bitcart-<coin>-daemon; - 用可观测端点验证(如
/cryptos、daemongetinfo)。
2.3 优先级实测:环境变量 > conf/.env
在 conf/.env 中追加 BITCART_API_WORKERS=3(单元文件中已通过 Environment=BITCART_API_WORKERS=2 设为 2),重启 API 后统计 gunicorn 实际拉起的 worker 数:
printf "BITCART_API_WORKERS=3\n" >> /opt/bitcart/bitcart/conf/.env
systemctl restart bitcart-api
journalctl -u bitcart-api --since "-2 min" --no-pager | grep -cE "Booting worker with pid"
实测输出:
2
worker 数为 2(单元文件的值)而非 3(conf/.env 的值),证实进程环境变量优先。测试完成后应从 conf/.env 移除该行,避免误导后续维护。
该机制的反向用法:需要在 systemd 层固定某个参数时,写入单元文件的
Environment=并systemctl daemon-reload;只在 conf/.env 修改时,务必确认没有同名环境变量遮蔽。
三、API / worker 参数详解
以下参数均来自 0.10.3.0 源码 api/settings.py,默认值为代码缺省值。「环境变量名」即写入 conf/.env 或单元文件时使用的名字。
3.1 环境与调试
| 环境变量名 | 默认值 | 说明 |
|---|---|---|
BITCART_ENV | development | 运行环境:development / testing / sandbox / production。生产环境建议显式设为 production |
DEBUG | false | 调试模式。开启后追加 sqlalchemy.engine 调试日志器 |
LOG_LEVEL | DEBUG | 日志级别(DEBUG/INFO/WARNING/ERROR)。注意生效位置见 3.6 节日志体系 |
IN_DOCKER | false | Docker 环境标记,compose 部署自动设置,手动部署无需配置 |
3.2 数据库(PostgreSQL)
| 环境变量名 | 默认值 | 说明 |
|---|---|---|
DB_USER | postgres | 数据库用户 |
DB_PASSWORD | (空) | 数据库密码,必配项 |
DB_HOST | 127.0.0.1 | 数据库地址 |
DB_PORT | 5432 | 数据库端口 |
DB_DATABASE | bitcart | 数据库名(testing 环境自动追加 _test 后缀) |
DB_POOL_SIZE | 5 | 连接池大小 |
DB_POOL_RECYCLE_SECONDS | 600 | 连接回收周期(秒) |
3.3 Redis
| 环境变量名 | 默认值 | 说明 |
|---|---|---|
REDIS_HOST | 127.0.0.1 | Redis 地址 |
REDIS_PORT | 6379 | Redis 端口 |
REDIS_DB | 0 | Redis 逻辑库编号 |
Redis 是 API 的硬依赖(缓存与进程间通信),连接失败会导致 API 全部路由返回 500(实测排障见安装指南 6.5 节)。
3.4 币种与汇率
| 环境变量名 | 默认值 | 说明 |
|---|---|---|
BITCART_CRYPTOS | btc | 启用的币种列表,逗号分隔(如 btc,ltc,eth)。每个币种需有对应 daemon 运行 |
COINGECKO_API_KEY | (空) | CoinGecko 汇率服务 API Key,可选 |
3.5 网络与域名
| 环境变量名 | 默认值 | 说明 |
|---|---|---|
BITCART_HOST | localhost:8000 | 对外 API 域名(用于生成回调/收银链接) |
BITCART_ADMIN_HOST | localhost:3000 | Admin 面板域名 |
BITCART_ADMIN_ROOTPATH | / | Admin 面板路径前缀 |
BITCART_REVERSEPROXY | nginx-https | 反代方式标记(nginx-https / nginx / 空),手动部署主要影响行为判定 |
BITCART_HTTPS_ENABLED | false | 是否启用 HTTPS(影响外链协议) |
BITCART_BACKEND_ROOTPATH | (空) | API 路径前缀(反代子路径部署时使用) |
3.6 日志体系与 LOG_FILE 的生效范围(重要实测发现)
API 的日志架构在源码手动部署(gunicorn 托管)下与直觉不同,以下均为实测结论:
- 应用日志不走 stdout。gunicorn 模式下 API 应用日志通过 msgpack socket 发送给 logserver 进程(默认
localhost的日志端口;Docker 部署中为worker容器),journalctl -u bitcart-api只能看到 gunicorn/uvicorn 的生命周期日志(启动、worker 拉起、未处理异常堆栈):
Oct 22 17:57:38 bitcart-native gunicorn[10676]: [2026-10-22 17:57:38 +0000] [10676] [INFO] Booting worker with pid: 10676
Oct 22 17:57:39 bitcart-native gunicorn[10676]: 2026-10-22 17:57:39.912219 UTC [info] Application startup complete. [uvicorn.error]
LOG_FILE仅在 logserver 模式生效。实测在 conf/.env 配置LOG_FILE=bitcart.log后重启 API,仓库data/logs/目录并未生成(文件日志处理器只在 logserver 运行模式中挂载)。因此不要依赖 LOG_FILE 做手动部署的日志收集。- 手动部署下排查 API 行为的可用途径:
journalctl -u bitcart-api(生命周期与异常堆栈)、/cryptos等端点验证、以及BITCART_OTEL_ENABLED=true接入 OpenTelemetry 收集器(需安装 otel 依赖组并自备 collector)。
3.7 目录与数据
| 环境变量名 | 默认值 | 说明 |
|---|---|---|
BITCART_DATADIR | data | 数据根目录(相对仓库目录,自动创建) |
BITCART_BACKUPS_DIR | data/backups | 备份存放目录 |
BITCART_BACKEND_PLUGINS_DIR | modules | 后端插件目录 |
BITCART_ADMIN_PLUGINS_DIR | data/admin_plugins | Admin 插件目录 |
BITCART_STORE_PLUGINS_DIR | data/store_plugins | Store 插件目录 |
BITCART_DOCKER_PLUGINS_DIR | data/docker_plugins | Docker 插件目录 |
BITCART_STATIC_DIR | static | 静态资源目录 |
实测确认 data/ 下会自动创建 files/、images/、admin_plugins/、store_plugins/、docker_plugins/、backups/ 等子目录。
3.8 API 元数据与服务参数
| 环境变量名 | 默认值 | 说明 |
|---|---|---|
API_TITLE | Bitcart | API 文档标题 |
OPENAPI_PATH | (空) | OpenAPI 文档路径覆盖 |
BITCART_API_WORKERS | CPU 核数 × 2 + 1 | gunicorn worker 数(gunicorn.conf.py 内置公式),小内存服务器建议显式调低(安装指南单元文件中设为 2) |
3.9 许可、更新与监控
| 环境变量名 | 默认值 | 说明 |
|---|---|---|
LICENSE_SERVER_URL | https://licensing.bitcart.ai | 许可证校验服务地址 |
UPDATE_URL | (空) | 自定义更新检查地址 |
BITCART_OTEL_ENABLED | false | OpenTelemetry 日志/追踪上报开关 |
BITCART_PROMETHEUS_METRICS_ENABLED | false | Prometheus 指标端点开关 |
SENTRY_DSN | (空) | Sentry 错误上报地址 |
四、daemon 参数详解(币种前缀体系)
daemon 体系从 conf/ 目录读取参数,每个币种同构,环境变量名为 {币种大写代号}_{参数名}。同时 daemon 支持一组无前缀的通用变量(在 daemon 进程层面读取)。
4.1 通用参数
| 环境变量名 | 默认值 | 说明 |
|---|---|---|
HOST | 127.0.0.1(Docker 内为 0.0.0.0) | daemon RPC 监听地址 |
PORT | 见 4.2 端口表 | daemon RPC 监听端口 |
LOGIN | electrum | RPC 用户名 |
PASSWORD | electrumz | RPC 密码。生产环境务必修改,修改方式为设置 {COIN}_LOGIN / {COIN}_PASSWORD |
DATA_PATH | ~/.electrum(BTC) | 钱包与链数据目录 |
NETWORK | mainnet | 网络(经币种前缀使用:BTC_NETWORK) |
DEBUG | false | 调试日志(经币种前缀使用:BTC_DEBUG) |
EXPERIMENTAL_NOSYNC | false | 跳过同步检查(实验性) |
FIAT_CURRENCY | USD | 默认法币 |
POLLING_CAP | 100 | 轮询上限 |
4.2 各币种默认端口
daemon RPC 默认端口(0.10.3.0 源码 daemons/ 目录定义,API 依赖该端口表连接各 daemon):
| 币种 | 代号 | 默认端口 |
|---|---|---|
| Bitcoin | btc | 5000 |
| Litecoin | ltc | 5001 |
| Ethereum | eth | 5002 |
| Bitcoin Cash | bch | 5004 |
| Ergon | xrg | 5005 |
| BNB Smart Chain | bnb | 5006 |
| Polygon | matic | 5008 |
| Tron | trx | 5009 |
| Groestlcoin | grs | 5010 |
| Monero | xmr | 5011 |
4.3 BTC_NETWORK 实测:切换 testnet
在 conf/.env 加入 BTC_NETWORK=testnet 并重启 daemon:
printf "DB_PASSWORD=q1w2e3r4\nBITCART_CRYPTOS=btc\nBTC_NETWORK=testnet\n" > /opt/bitcart/bitcart/conf/.env
systemctl restart bitcart-btc-daemon
sleep 8
curl -s -X POST http://127.0.0.1:5000 \
-H "Content-Type: application/json" \
-H "Authorization: Basic $(printf "electrum:electrumz" | base64)" \
-d '{"jsonrpc":"2.0","id":0,"method":"getinfo","params":[]}'
实测输出:
{"jsonrpc": "2.0", "result": {"network": "testnet", "path": "/home/bitcart/.electrum/testnet", "server": "blackie.c3-soft.com", "blockchain_height": 4431167, "server_height": 5196093, "spv_nodes": 3, "connected": true, "auto_connect": true, "version": "4.6.0b1", "fee_estimates": {"1008": 1002, "144": 1002, "25": 1002, "10": 1002, "5": 1002, "2": 1002}, "synchronized": true, "total_wallets": 0}, "id": 0}
三个关键变化:network 变为 testnet;数据目录自动隔离为 /home/bitcart/.electrum/testnet(与 mainnet 数据互不影响);连接的服务器切换为 testnet Electrum 服务器池(spv_nodes: 3)。
移除 BTC_NETWORK 恢复 mainnet 后实测:
{"jsonrpc": "2.0", "result": {"network": "mainnet", "path": "/home/bitcart/.electrum", "server": "bitcoin.lu.ke", "blockchain_height": 972640, "server_height": 972640, "spv_nodes": 6, "connected": true, ...}}
4.4 BTC_DEBUG 实测:daemon 调试日志
在 conf/.env 加入 BTC_DEBUG=true 并重启 daemon 后,journalctl 中出现 Electrum 内核的详细日志(正常模式下仅启动/错误行):
2026-10-22 17:58:18.091187 UTC [info] fee_estimates {1008: 100, 144: 136, 25: 143, 10: 983, 5: 1812, 2: 2231} [electrum.network.Network]
2026-10-22 17:58:18.420459 UTC [info] set blockchain with height 972640 [electrum.interface.Interface.[ecdsa.net:110]]
2026-10-22 17:58:19.837222 UTC [info] fee_histogram 14 [electrum.network.Network]
排查 daemon 连接问题时开启,平时保持关闭以减少日志量。
4.5 daemon RPC 认证
daemon 的 JSON-RPC 端口受 Basic 认证保护,默认凭据 electrum:electrumz。生产环境应通过 {COIN}_LOGIN / {COIN}_PASSWORD 覆盖,并在 API 侧(conf/.env 对应币种凭据)同步修改。本地验证示例:
curl -s -X POST http://127.0.0.1:5000 \
-H "Content-Type: application/json" \
-H "Authorization: Basic $(printf "electrum:electrumz" | base64)" \
-d '{"jsonrpc":"2.0","id":0,"method":"getinfo","params":[]}'
凭据错误时 daemon 返回 Unauthorized。
五、生产配置模板
以下为手动部署(Ubuntu 22.04,路线见安装指南)的生产配置模板,写入 /opt/bitcart/bitcart/conf/.env:
# ===== 必配 =====
DB_PASSWORD=<强密码>
BITCART_CRYPTOS=btc
# ===== 环境与日志 =====
BITCART_ENV=production
LOG_LEVEL=INFO
# ===== 数据库 / Redis(默认本机时可省略,集中部署时必须显式) =====
# DB_HOST=127.0.0.1
# DB_PORT=5432
# DB_USER=postgres
# DB_DATABASE=bitcart
# DB_POOL_SIZE=5
# REDIS_HOST=127.0.0.1
# REDIS_PORT=6379
# ===== 对外域名(与反代配置一致) =====
BITCART_HOST=bitcart.example.com
BITCART_HTTPS_ENABLED=true
BITCART_REVERSEPROXY=nginx-https
# ===== daemon 侧(每币种同构,按需启用) =====
BTC_LOGIN=<自定义RPC用户>
BTC_PASSWORD=<自定义RPC密码>
# BTC_NETWORK=mainnet
# BTC_DEBUG=false
配套建议:
BITCART_API_WORKERS通过 systemd 单元Environment=设置(优先级最高),小内存服务器设 2;- daemon RPC 监听
127.0.0.1,不要对公网放行 5000-5011 端口; - 修改任一参数后重启对应服务:
systemctl restart bitcart-btc-daemon bitcart-api bitcart-worker; - Docker Compose 部署的配置走 bitcart-docker 环境变量机制(生成
compose/generated.yml),不要直接改生成文件,详见《Bitcart 0.10.3.0 Docker Compose 部署指南》(/post/9QtDWOa9H4Gc)。
六、常见问题
6.1 修改配置后不生效
排查顺序:确认改对了文件(conf/.env,路径在 bitcart 仓库根目录)→ 确认重启了消费该参数的服务 → 确认没有更高优先级的同名环境变量(systemctl show <服务> --property=Environment)→ Docker 部署确认重新执行了 ./setup.sh。
6.2 journalctl 里看不到 API 应用日志
属正常现象:gunicorn 模式下应用日志走 logserver msgpack 通道(见 3.6 节),journalctl 只有生命周期日志。排查功能问题优先使用 API 端点验证与异常堆栈,需要全量日志时接入 OpenTelemetry。
6.3 testnet 数据会污染 mainnet 吗
不会。daemon 数据目录按网络自动隔离(实测:mainnet 为 /home/bitcart/.electrum,testnet 为 /home/bitcart/.electrum/testnet),切换网络不影响另一网络的钱包数据。
七、下一步
- 安装过程回顾:《Bitcart 0.10.3.0 Ubuntu 22.04 安装指南》(/post/9HkLvzFW4ZKO)
- 容器化部署配置机制:《Bitcart 0.10.3.0 Docker Compose 部署指南》(/post/9QtDWOa9H4Gc)
- 命令行工具与日常运维:《Bitcart 0.10.3.0 常用 CLI 命令与工具详解》(/post/rJ9RlrUrPXxU)
- 组件定位与选型:《Bitcart 0.10.3.0 介绍与选型指南》(/post/yKeVQmbN4Q6d)