

BTCPay Server:免费、开源且自托管的比特币支付处理器
-
BTCPay Server:免费、开源且自托管的比特币支付处理器
BTCPay Server是一个免费、开源且自托管的比特币支付处理器,赋予商家和个人直接接收比特币支付的能力,无需支付任何费用或依赖中介机构。它以去中心化、安全和隐私为核心,为数字货币支付领域带来了一场革新。
一、BTCPay Server的特点
BTCPay Server的核心优势在于其去中心化的特性。与传统的支付网关不同,它不依赖任何第三方服务商,用户可以直接与对方进行交易,从而完全掌控自己的资金流动,同时享受更低的交易成本和更高的隐私保护。你的私钥永远不会上传到服务器,确保只有你才能访问你的资金。
安全性是BTCPay Server的另一大亮点。每个发票都会生成一个从你的扩展公钥派生的新地址,避免地址重复使用,增强了交易的隐私性。此外,它还集成了多重签名和冷钱包存储等高级安全功能,即使在网络遭受攻击的情况下,也能有效保护用户的资产安全。
BTCPay Server具有高度的灵活性和扩展性。它支持比特币闪电网络,实现快速、低成本的微支付,非常适合处理小额交易和内容打赏。此外,它还支持多种山寨币,并提供丰富的API接口,方便开发者根据自身需求进行定制化开发或集成现有系统。对于曾经使用BitPay插件的用户来说,迁移到BTCPay Server也非常便捷,因为它与BitPay API完全兼容。
BTCPay Server提供了多种部署方式,你可以选择在自己的服务器上自托管,也可以使用第三方主机。自托管不仅可以连接无限数量的商店,还能成为其他商店的支付处理器,并充分利用闪电网络的优势。此外,BTCPay Server还提供销售点应用、众筹和捐赠按钮等功能,满足不同场景下的支付需求。
对于WordPress用户而言,BTCPay Server的集成也十分简便。例如,BTCPay for WooCommerce插件可以让WooCommerce网站轻松接受比特币支付。此外,一些其他的WordPress插件也开始支持BTCPay Server,为创作者提供了更多选择。
二、基于Docker Compose的部署方法
下面是一个可以直接运行 BTCPay Server 及其依赖(PostgreSQL、Bitcoin Core、NBXplorer、LND)的
docker-compose.yml
文件。这个配置是为了本地测试、开发或内部网络使用而设计的,它将 BTCPay Server 直接暴露在主机的 8080 端口(HTTP)。请勿在没有反向代理(如 Nginx 或 Caddy)和 HTTPS 的情况下将其直接暴露在公共互联网上!
运行前准备:
创建目录: 在你的服务器或本地机器上创建一个目录来存放配置文件,例如
btcpayserver-direct
。bash mkdir btcpayserver-direct cd btcpayserver-direct
创建
.env
文件: 在btcpayserver-direct
目录下创建一个名为.env
的文件,用于存放敏感信息和配置。填入你自己的强密码。# .env 文件内容 # 网络设置 (mainnet, testnet, regtest) BTCPAY_NETWORK=mainnet # 或者 BTCPAY_NETWORK=testnet # Bitcoin Core RPC 设置 BITCOIN_RPC_USER=rpcuser BITCOIN_RPC_PASSWORD=rpcpass # 请使用强密码! # PostgreSQL 设置 POSTGRES_USER=postgres POSTGRES_PASSWORD=postgrespass # 请使用强密码! POSTGRES_DB=btcpayserver # BTCPay Server 端口 (主机端口) BTCPAY_HOST_PORT=8080 # LND 别名 (可选) LND_ALIAS=MyBTCPayLNDNode
创建
docker-compose.yml
文件: 在btcpayserver-direct
目录下创建docker-compose.yml
文件,并将以下内容粘贴进去。# docker-compose.yml 文件内容 version: "3.7" services: # PostgreSQL 数据库 postgres: image: postgres:13 container_name: btcpayserver_postgres restart: unless-stopped environment: POSTGRES_DB: ${POSTGRES_DB} POSTGRES_USER: ${POSTGRES_USER} POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} volumes: - "postgres_data:/var/lib/postgresql/data" # Bitcoin Core 节点 bitcoind: image: kristapsk/bitcoin-core:25.0 # 你可以选择其他版本或官方镜像 (如果可用) container_name: btcpayserver_bitcoind restart: unless-stopped environment: BITCOIN_NETWORK: ${BTCPAY_NETWORK} BITCOIN_RPCUSER: ${BITCOIN_RPC_USER} BITCOIN_RPCPASSWORD: ${BITCOIN_RPC_PASSWORD} # 必要的额外参数 BITCOIN_EXTRA_ARGS: | server=1 rpcbind=0.0.0.0 rpcallowip=0.0.0.0/0 zmqpubrawblock=tcp://0.0.0.0:28332 zmqpubrawtx=tcp://0.0.0.0:28333 txindex=1 prune=2000 # 修剪模式,保留约 2GB 的历史数据,节省大量空间。如果需要完整历史,请移除此行。 rpcworkqueue=128 rpcthreads=4 volumes: - "bitcoin_data:/data/.bitcoin" # 存储区块链数据 # NBXplorer 区块链浏览器/索引器 nbxplorer: image: btcpayserver/nbxplorer:2.3.59 # 检查最新版本 container_name: btcpayserver_nbxplorer restart: unless-stopped environment: NBXPLORER_NETWORK: ${BTCPAY_NETWORK} NBXPLORER_CHAINS: "btc" # 只启用比特币 NBXPLORER_BTCRPCUSER: ${BITCOIN_RPC_USER} NBXPLORER_BTCRPCPASSWORD: ${BITCOIN_RPC_PASSWORD} NBXPLORER_BTCRPCHOST: bitcoind # 使用 service name 连接 bitcoind NBXPLORER_BTCEXTRAPARAMS: "rpcport=8332" # 默认 RPC 端口 NBXPLORER_BTCZMQBLOCK: "tcp://bitcoind:28332" NBXPLORER_BTCZMQTRANS: "tcp://bitcoind:28333" NBXPLORER_PORT: "32838" # NBXplorer 内部端口 volumes: - "nbxplorer_data:/root/.nbxplorer" depends_on: - bitcoind # LND 闪电网络节点 lnd: image: lightninglabs/lnd:v0.17.4-beta # 检查最新版本 container_name: btcpayserver_lnd restart: unless-stopped environment: LND_NETWORK: ${BTCPAY_NETWORK} LND_CHAIN: bitcoin LND_BACKEND: bitcoind LND_BITCOIND_RPCUSER: ${BITCOIN_RPC_USER} LND_BITCOIND_RPCPASS: ${BITCOIN_RPC_PASSWORD} LND_BITCOIND_RPCHOST: bitcoind:8332 # 连接 bitcoind RPC LND_BITCOIND_ZMQPATH: tcp://bitcoind:28333 # 连接 bitcoind ZMQ LND_ALIAS: ${LND_ALIAS:-MyBTCPayLNDNode} # 节点别名 LND_COLOR: "#3399FF" # 节点颜色 (可选) LND_RPCLISTEN: 0.0.0.0:10009 # LND gRPC 端口 LND_RESTLISTEN: 0.0.0.0:8080 # LND REST API 端口 (BTCPay 需要) LND_PEERPORT: 9735 # LND P2P 端口 LND_DEBUGLEVEL: info # 日志级别 volumes: - "lnd_data:/root/.lnd" # 存储 LND 数据和 macaroons # - "bitcoin_data:/root/.bitcoin:ro" # LND 可能需要访问 bitcoin.conf, 但通过 env vars 更佳 depends_on: - bitcoind # BTCPay Server 主程序 btcpayserver: image: btcpayserver/btcpayserver:1.12.4 # 检查最新版本 container_name: btcpayserver_server restart: unless-stopped environment: BTCPAY_NETWORK: ${BTCPAY_NETWORK} BTCPAY_POSTGRES: "User ID=${POSTGRES_USER};Password=${POSTGRES_PASSWORD};Host=postgres;Port=5432;Database=${POSTGRES_DB}" BTCPAY_BIND: "0.0.0.0:49392" # BTCPay 内部监听端口 (避免和 LND 的 8080 冲突) BTCPAY_ROOTPATH: "/" # 连接 NBXplorer BTCPAY_BTCEXPLORERURL: "http://nbxplorer:32838/" # 连接 LND (通过 REST API) # 注意: allowinsecure=true 是因为在内部网络我们没有为 LND REST API 设置 HTTPS 证书 # LND 需要先启动并生成 macaroon 文件, BTCPay 才能成功连接 BTCPAY_BTCLIGHTNING: "type=lnd-rest;server=https://lnd:8080/;macaroonfilepath=/root/.lnd/data/chain/bitcoin/${BTCPAY_NETWORK}/admin.macaroon;allowinsecure=true" # 其他可选配置... # BTCPAY_ENABLE_SSH=false # 如果不需要 SSH 功能可以禁用 volumes: - "btcpay_data:/datadir" # 存储 BTCPay 配置和数据 - "lnd_data:/root/.lnd:ro" # 只读访问 LND 数据卷以获取 macaroon 文件 ports: # 将主机的端口 (来自 .env 文件, 默认 8080) 映射到 BTCPay 的内部端口 (49392) - "${BTCPAY_HOST_PORT}:49392" depends_on: - postgres - nbxplorer - lnd # 确保 LND 先启动 volumes: postgres_data: bitcoin_data: nbxplorer_data: lnd_data: btcpay_data:
解释:
services
: 定义了运行 BTCPay Server 所需的所有容器。postgres
: PostgreSQL 数据库,用于存储 BTCPay 的数据。bitcoind
: Bitcoin Core 全节点,用于处理链上交易和监控。prune=2000
: 启用了修剪模式,将区块链数据大小限制在约 2GB,大大节省磁盘空间。如果你需要完整的历史记录(通常不需要),请删除此行,但准备好数百 GB 的存储空间。zmqpubrawblock
,zmqpubrawtx
: ZMQ 接口,用于将新区块和交易实时推送给 NBXplorer 和 LND。txindex=1
: 交易索引,NBXplorer 需要。
nbxplorer
: BTCPay 开发的轻量级区块链索引器,用于快速查询地址和交易信息,减轻bitcoind
的负担。lnd
: LND 闪电网络节点,用于处理闪电支付。- 它通过 RPC 和 ZMQ 连接到
bitcoind
。 - 它暴露了 REST API 端口 (
8080
),BTCPay Server 将通过此端口与其通信。
- 它通过 RPC 和 ZMQ 连接到
btcpayserver
: BTCPay Server 主应用程序。- 通过环境变量连接到
postgres
,nbxplorer
, 和lnd
。 BTCPAY_BTCLIGHTNING
: 定义了如何连接到 LND。allowinsecure=true
是因为我们在 Docker 内部网络通常不为 LND 的 REST API 配置 HTTPS,这在内部是可接受的。ports
: 将主机的${BTCPAY_HOST_PORT}
(默认为 8080)映射到容器内部的49392
端口。BTCPay 内部监听49392
是为了避免与 LND 的 REST API 端口8080
冲突。
- 通过环境变量连接到
volumes
: 定义了命名卷,用于持久化存储数据(数据库、区块链、配置、LND 数据等)。这样即使容器被删除和重新创建,数据也不会丢失。.env
文件: 用于管理配置和敏感信息,使docker-compose.yml
文件更干净,并且更容易修改配置。depends_on
: 定义了容器的启动依赖关系,确保数据库和节点在 BTCPay Server 启动之前启动。但这只保证容器启动顺序,不保证服务完全就绪(例如 LND 的 macaroon 文件生成)。
如何运行:
- 确保你已经安装了 Docker 和 Docker Compose。
- 将上述两个文件 (
.env
和docker-compose.yml
) 放在同一个目录 (btcpayserver-direct
) 中。 - 打开终端,进入该目录。
- 运行以下命令启动所有服务:
bash docker-compose up -d
-d
参数表示在后台运行。等待过程:
- Bitcoin Core 同步:
bitcoind
需要下载和验证整个(或修剪后的)区块链。这可能需要很长时间(几小时到几天),具体取决于你的网络速度和硬件性能。你可以使用docker logs -f btcpayserver_bitcoind
查看同步进度。 - NBXplorer 索引: NBXplorer 需要在
bitcoind
同步后进行索引。 - LND 启动: LND 需要等待
bitcoind
同步到一定程度后才能完全启动并生成必要的macaroon
文件。 - BTCPay Server 启动: BTCPay Server 可能在 LND 的 macaroon 文件准备好之前无法完全连接 LND。
- 访问: 一旦服务启动并且
bitcoind
有所进展,你可以通过浏览器访问http://<你的服务器IP或localhost>:${BTCPAY_HOST_PORT}
(默认是http://<你的服务器IP或localhost>:8080
)来访问 BTCPay Server。 - 首次设置: 第一次访问时,BTCPay Server 会引导你创建管理员用户。
- 配置节点: 登录后,进入 “Server Settings” -> “Services”,检查 Bitcoin Core (通过 NBXplorer) 和 Lightning Network (LND) 的连接状态。可能需要稍等 LND 完全就绪。
停止服务:
docker-compose down
查看日志:
docker-compose logs -f # 查看所有服务的日志 docker-compose logs -f btcpayserver # 只看 BTCPay Server 的日志 docker-compose logs -f bitcoind # 只看 Bitcoin Core 的日志 docker-compose logs -f lnd # 只看 LND 的日志
重要提醒:
- 资源消耗: 运行全节点(即使是修剪模式)和相关服务需要相当多的 CPU、RAM 和磁盘 I/O。确保你的机器有足够的资源。
- 安全性: 这个配置不适用于生产环境或公共访问。它没有配置 HTTPS,并将 BTCPay 直接暴露在 HTTP 端口。对于生产环境,请使用官方推荐的
btcpay-docker
仓库,它包含了 Nginx 反向代理和 Let’s Encrypt 的自动 HTTPS 配置。 - LND Macaroons: 如果 BTCPay Server 启动时 LND 的
admin.macaroon
文件还没生成,连接会失败。你可能需要等待 LND 完全启动后,在 BTCPay Server 的服务设置里重新测试或保存 LND 连接信息,或者重启 BTCPay Server 容器 (docker-compose restart btcpayserver
)。
三、小结
总之,BTCPay Server为商家和个人提供了一个安全、私密、低成本的比特币支付解决方案,它的出现不仅降低了交易门槛,也促进了数字货币的普及和应用。随着技术的不断发展和社区的不断壮大,BTCPay Server有望在未来的数字经济中扮演更重要的角色。
歡迎留言回复交流。
Log in to reply.