bitcore-wallet-service生产部署完全指南:HTTPS、Cluster集群模式与限流配置实战
【免费下载链接】bitcore-wallet-serviceA multisig, HD Bitcoin and Bitcoin Cash wallet service. Used by Copay.项目地址: https://gitcode.com/gh_mirrors/bi/bitcore-wallet-service
bitcore-wallet-service(BWS)是驱动 Copay 的比特币/比特币现金多签名 HD 钱包服务端。本指南面向新手,手把手带你完成生产部署的三大核心配置:HTTPS 加密通信、Node Cluster 多进程集群模式、按 IP 限流防护,让钱包服务从本地开发环境快速走向安全稳定的生产环境。🚀
📦 服务架构总览:部署前先认识它的组件
BWS 并非单一进程,而是由start.sh一次性拉起 7 个 Node.js 服务组成,各服务 PID 写入pids/目录、日志写入logs/目录:
| 服务 | 入口文件 | 端口 |
|---|---|---|
| 分布式锁(Locker) | locker/locker.js | 3231 |
| 消息总线(Message Broker) | messagebroker/messagebroker.js | 3380 |
| 区块链监控 | bcmonitor/bcmonitor.js | — |
| 邮件通知 | emailservice/emailservice.js | — |
| 推送通知 | pushnotificationsservice/pushnotificationsservice.js | — |
| 法币汇率 | fiatrateservice/fiatrateservice.js | — |
| 主 API 服务(bws) | bws.js | 3232 |
💡 前置条件:MongoDB(2.6+)默认运行在 27017 端口。完整安装说明见
installation.md。
1️⃣ 一次准备:克隆与安装
git clone https://gitcode.com/gh_mirrors/bi/bitcore-wallet-service cd bitcore-wallet-service npm install所有配置集中在根目录 config.js 中:MongoDB 连接(storageOpts)、Locker 地址(lockOpts)、消息总线(messageBrokerOpts)、区块链浏览器(blockchainExplorerOpts)等,改完直接启动即可生效。
🔐 配置 HTTPS:让钱包通信全面加密
bws.js 启动时会读取config.js的https开关(第 28-43 行),自动切换为 Node 的https模块并加载证书。只需解开以下注释:
// config.js https: true, privateKeyFile: 'private.pem', certificateFile: 'cert.pem', // 若证书链不被 Node 默认信任(如自签/中间 CA),补充完整证书链: CAinter1: 'COMODORSADomainValidationSecureServerCA.crt', CAinter2: 'COMODORSAAddTrustCA.crt', CAroot: 'AddTrustExternalCARoot.crt',要点:
- 额外指定
ciphers时,服务端会启用honorCipherOrder,按你给的顺序强制加密套件; - 若由 Nginx 等反向代理终结 TLS,BWS 本身保持
https: false即可。
⚡ 开启 Cluster 集群模式:按 CPU 数扩吞吐、进程崩溃自动复活
bws.js 第 70-92 行的集群逻辑非常清晰:
cluster: true时,主进程按 CPU 核心数(或clusterInstances)逐个fork()出 worker;- 监听
exit事件,任意 worker 崩溃会被自动 fork 替换,并记录错误日志; - ⚠️ 两个硬性依赖:集群模式下必须配置 locker server 与 message broker server,否则启动即抛错("When running in cluster mode, locker server need to be configured")。因为进程间必须共享锁与消息发布订阅,不能只靠单进程内存。
// config.js cluster: true, clusterInstances: 4, // 不设置则默认使用全部 CPU 核心数 lockOpts: { lockerServer: { host: 'localhost', port: 3231 } }, messageBrokerOpts: { messageBrokerServer: { url: 'http://localhost:3380' } },⚠️ 开启集群前,先确认
npm start启动的locker和messagebroker两个服务真正就绪,否则 BWS 主进程会立即失败。
小贴士:端口支持环境变量覆盖,process.env.BWS_PORT优先级高于config.port(默认 3232),多环境部署时很实用。
🛡️ 限流配置:内置 IP 节流,防刷钱包创建
lib/expressapp.js 基于express-rate-limit内置了两组限流器,默认对「创建钱包」和「费率估算」两类 API 按 IP 生效:
| 限流对象 | API 路由 | 时间窗口 | 延迟起始次数 | 每次延迟 | 封禁阈值 |
|---|---|---|---|---|---|
| 创建钱包 | POST /v1 或 v2 /wallets/ | 1 小时 | 8 次后 | 3 秒 | 15 次 |
| 费率估算 | GET /v1 或 v2 /feelevels/ | 10 分钟 | 5 次后 | 0.3 秒 | 10 次 |
默认值定义在 lib/common/defaults.js 第 106-121 行的Defaults.RateLimit:
createWallet: { windowMs: 60 * 60 * 1000, // 1 小时窗口 delayAfter: 8, // 第 8 次请求后开始减速 delayMs: 3000, // 每次追加 3 秒延迟 max: 15, // 超过 15 次直接封禁 1 小时 message: 'Too many wallets created from this IP, please try again after an hour', }- 调整阈值直接修改
defaults.js对应字段即可; - 限流器仅在
!opts.ignoreRateLimiter时启用,开发/测试环境可借此跳过。
🚀 启动、停止与验证
npm start # 执行 start.sh:nohup 后台启动 7 个服务,管理 pid 与日志 npm stop # 执行 stop.sh:按 pid 文件逐个停止验证清单:
logs/bws.log出现 "BWS running [Instance:0..3]",说明集群 worker 全部就绪;curl -k https://你的域名:3232/bws/api/v1/version/应返回{"serviceVersion":"2.5.1"};- 用
ps确认 worker 进程数与clusterInstances一致。
📌 所有 API 挂载在
config.js的basePath(默认/bws/api)前缀之下,健康检查时别漏了路径。
✅ 生产部署检查清单
- MongoDB 可连通,数据库名
bws - 证书私钥权限受限,防止泄露
- 集群模式下 locker(3231)与 messagebroker(3380)运行正常
- 限流阈值已按业务量调整
logs/、pids/纳入监控- 防火墙仅开放 3232(对外),3231/3380 保持内网
按照以上三步——HTTPS、Cluster、限流——配置到位后,bitcore-wallet-service 就具备了面向真实用户的生产服务能力。🎉
【免费下载链接】bitcore-wallet-serviceA multisig, HD Bitcoin and Bitcoin Cash wallet service. Used by Copay.项目地址: https://gitcode.com/gh_mirrors/bi/bitcore-wallet-service
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考