全部指南
本页内容
要自托管 BTCPay Server,您需要一台足以运行修剪比特币节点的 Linux VPS(BTCPay 的起步配置:2 个 vCPU、
以下步骤使用一台运行 btcpay.example.comSERVER_IP
BTCPay Server 的配置要求与合适的套餐
官方 Docker 部署会在一台机器上运行 BTCPay Server、PostgreSQL、NBXplorer、Bitcoin Core、带自动 HTTPS 的 Nginx 以及 Tor。BTCPay Server 的修剪节点会下载并校验每一个区块,但只保留最近的区块,上限为所选预设的目标值。BTCPay 的服务器规格说明按以下方式估算硬盘空间:主机系统
| 部署方式 | 修剪预设(保留的区块量) | 按 BTCPay 公式估算的硬盘空间 | 适合的套餐 | 每月价格 |
|---|---|---|---|---|
| 测试用,仅比特币 | opt-save-storage-xxs | Sloop:1 个 vCPU、 | $3.49 | |
| 网店,仅比特币(BTCPay 的起步配置) | opt-save-storage-xs | Cutter:2 个 vCPU、 | $5.49 | |
| 比特币和闪电网络 | opt-save-storage-s | Schooner:4 个 vCPU、 | $12.49 | |
| 闪电网络,业务较繁忙的商店 | opt-save-storage | Brigantine:6 个 vCPU、 | $19.99 | |
| 比特币和门罗币 | 比特币同上;门罗币默认启用修剪 | Frigate:12 个 vCPU、 | $47.99 | |
| 未修剪节点 | 无 | 约 | 独立服务器, | $97.49 起 |
以上均为未留余量的数值:BTCPay 建议预留余量,而这里的每个套餐都至少还有
何时需要未修剪节点
交易索引(opt-txindex
BTCPay 闪电网络:Core Lightning、LND 还是 Phoenixd
闪电网络为可选项:BTCPAYGEN_LIGHTNINGclightninglndphoenixd
为什么要在 VPS 上自托管 BTCPay Server
BTCPay Server 的托管有三种形式:由第三方托管商用一个实例服务众多商家、在家中的机器上运行,或使用您自己的服务器。BTCPay 的第三方托管页面解释了第一种方式的风险:托管商的节点可以监听您的交易,恶意托管商可能运行经过篡改的 BTCPay,把您的 xpub 换成它自己的,而且您应当假定,它可能掌握您使用情况的全部细节。家用服务器则会暴露您家中的 IP 地址。在 VPS 上运行 BTCPay Server 可以同时避免这两种问题:由您选择版本、掌握存有账单的数据库,款项也会直接进入您的钱包。
离岸、无需 KYC 的主机服务商能改变什么,不能改变什么
能改变的是:我们的账户只需邮箱地址和密码,别无其他;您可以从自己的钱包用比特币、以太坊、门罗币、泰达币(USDT)或 Solana 付款,无需银行卡或证件。无需 KYC 的 VPS 意味着您的收款服务器背后不留任何身份证件:可以像购买比特币 VPS 那样用 BTC 付款,也可以通过门罗币 VPS 用 XMR 私密付款。您还可以自行选择适用七个国家中哪一国的法律。不能改变的是:
- 您的 IP 地址和主机名是公开的:每位打开账单的顾客都会连接到它们。
- 比特币是公开的:每张账单都会使用一个新地址,但金额和时间都会留在区块链上。
- 您的结账页面收集的买家信息保存在您的数据库中,受适用于您业务的隐私法律约束。
- 法律依然适用:包括您经营所在地的税收、消费者保护和支付规则,以及服务器所在国的法律,在我们的欧盟地区还包括欧盟《数字服务法》。
- 我们的可接受使用政策同样适用:针对真实个人的欺诈(例如虚假网店和盗刷银行卡)属于零容忍事项。
- Tor 不等于匿名:该部署会添加一个洋葱地址,但 BTCPay 的常见问题指出,这“完全不会让您匿名”。
如何自托管 BTCPay Server:分步指南
1. 将域名指向服务器
在您的 DNS 服务商处,为 btcpay.example.comSERVER_IP
getent ahostsv4 btcpay.example.com
2. 在防火墙中开放端口
先放行 SSH(如果修改过端口,则放行您自己的端口),然后放行 HTTP、HTTPS;如使用 Core Lightning 或 LND,还需放行 9735:
apt update
apt install -y ufw git
ufw allow 22/tcp
ufw allow 80/tcp
ufw allow 443/tcp
ufw allow 9735/tcp
ufw enable
Docker 对外发布的端口会通过 Docker 自己的 NAT 规则绕过 UFW,因此 UFW 无法隐藏 BTCPay,但可以保护其他所有服务。不要改用带有 flush ruleset
3. 克隆代码仓库并设置变量
与 README 的做法一样,请在 root 登录 shell 中操作:直接以 root 身份登录,或在您的 sudo 用户下运行 sudo su -
mkdir BTCPayServer
cd BTCPayServer
git clone https://github.com/btcpayserver/btcpayserver-docker
cd btcpayserver-docker
export BTCPAY_HOST="btcpay.example.com"
export NBITCOIN_NETWORK="mainnet"
export BTCPAYGEN_CRYPTO1="btc"
export BTCPAYGEN_LIGHTNING="none"
export BTCPAYGEN_REVERSEPROXY="nginx"
export BTCPAYGEN_ADDITIONAL_FRAGMENTS="opt-save-storage-xs"
. ./btcpay-setup.sh -i
- BTCPAY_HOST(主机名)
- 您的主机名;安装脚本会拒绝任何不是有效域名的值。
- NBITCOIN_NETWORK(网络类型)
;如需试验,可改用mainnet 。testnet- BTCPAYGEN_CRYPTO1
;添加btc 可支持门罗币。BTCPAYGEN_CRYPTO2="xmr"- BTCPAYGEN_LIGHTNING(闪电网络实现)
、none 、clightning 或lnd 。phoenixd- BTCPAYGEN_REVERSEPROXY(反向代理)
,负责申请并续期 HTTPS 证书。nginx- BTCPAYGEN_ADDITIONAL_FRAGMENTS(附加配置片段)
- 各项以分号分隔,其中包含一个修剪预设;安装脚本不接受
与修剪预设同时出现。以后修改该列表时,请再次包含该预设,否则修剪将被关闭,节点会停止运行并报错“Block files have previously been pruned”。opt-txindex - BTCPAY_ENABLE_SSH(启用 SSH)
- 见于旧版指南;当前脚本会忽略此变量。
4. 运行安装脚本
请保留开头的点号:该脚本必须以 source 方式运行,不带 -i-i/etc/profile.d/btcpay-env.shbtcpayserver
5. 立即注册管理员账户
打开 https://btcpay.example.com
6. 等待节点同步
网站在首次同步完成前就能打开;根据 BTCPay 的同步常见问题,首次同步需要一到五天。可用以下命令查看进度:
bitcoin-cli.sh getblockchaininfo
当 blocksheadersinitialblockdownloadfalse
7. 创建商店并连接钱包
注册后会进入商店创建流程:填写名称、默认货币和汇率来源。然后按照 BTCPay 钱包指南中的顺序连接商店的钱包:
- 通过 BTCPay Server Vault 应用连接硬件钱包,或导入 Electrum 或 Wasabi 的钱包文件。
- xpub,可手动输入,也可扫描二维码。
- 切勿使用助记词:“绝不应在任何联网设备上输入钱包助记词。”
BTCPay 为每张账单使用一个新地址,而大多数钱包只会监视约 20 个未使用的地址,即地址间隔上限(gap limit):在出现一连串未支付的账单后,请调高该上限(Electrum、Sparrow 和 Bitcoin Core 均支持),否则付款看起来会像是丢失了。
保持稳定运行:更新、备份与硬盘空间
更新
在 root 登录 shell 中执行更新,或使用 Server Settings > Maintenance 下的 Update:
btcpay-update.sh
更新会拉取代码仓库、重新生成服务栈、重建容器,然后删除主机上所有未使用的 Docker 镜像,无论其是否属于 BTCPay,除非将 BTCPAY_UPDATE_CLEAN
备份
cd "$BTCPAY_BASE_DIRECTORY/btcpayserver-docker"
./btcpay-backup.sh
备份脚本会导出数据库、停止服务栈、将 Docker 卷、机密文件和导出文件打包归档,然后重新启动。它会跳过区块链数据、缓存、日志和 LND 的通道数据库,但会保留 LND 的钱包和 channel.backup/var/lib/docker/volumes/backup_datadir/_data/backup.tar.gz 每次运行都会被覆盖,且保存在服务器上:请设置 BTCPAY_BACKUP_PASSPHRASE
SHELL=/bin/bash
PATH=/bin:/usr/sbin:/usr/bin:/usr/local/bin
15 4 * * * /root/BTCPayServer/btcpayserver-docker/btcpay-backup.sh
在以相同方式部署的服务器上用 ./btcpay-restore.sh
闪电网络需要更多措施:BTCPay 警告,“广播已撤销的状态可能导致您损失该通道中的全部资金。”使用 LND 时,请保存 Server Settings > Services > LND Seed Backup 中的助记词,并在异地保存一份 channel.backupbtcpay-down.shbtcpay-up.sh
硬盘空间与同步状态
硬盘写满会导致 Bitcoin Core 停止运行,BTCPay 随后会一直显示节点正在启动。可用以下命令检查:
df -h /var/lib/docker
docker system df
bitcoin-cli.sh getblockchaininfo
启用修剪后,size_on_disk
保护 BTCPay Server 和您的钱包
- 注册功能保持关闭;如需添加其他用户,请从 Server Settings 发出邀请。
- 双重验证:在账户设置中开启(身份验证器应用或 U2F 密钥)。根据服务器设置常见问题,如果设备丢失,root 可以在代码仓库目录中运行
./btcpay-admin.sh disable-multifactor YOUR_ACCOUNT_EMAIL将其移除。 - SSH:按照加固指南使用密钥登录。安装脚本会为 Maintenance 中的操作添加一个受限的 root 密钥,并且可能会修改
,将其中的/etc/ssh/sshd_config 改为PermitRootLogin no 。在我们的测试中,加固指南添加的配置文件会被优先读取,root 登录因此仍被拒绝,BTCPay 便隐藏了这些操作。您可以在 shell 中进行更新,或在该文件中设置prohibit-passwordPermitRootLogin forced-commands-only(这样 root 只能通过强制命令登录),并将 添加到root 中。AllowUsers - 服务器上不存放助记词。在 KVM 宿主机上,服务商在技术上能够读取 VPS 的硬盘和内存。使用硬件钱包或 xpub 时,入侵者或服务商可以看到您的收款,但无法动用这些资金。BTCPay 热钱包和内部闪电网络节点持有私钥:其中只应存放日常周转所需的余额。
邮件通知与 25 端口
BTCPay 可以通过 SMTP 发送密码重置、邀请以及商店事件(例如账单已结清)的邮件,SMTP 可在 Server Settings > Email server 或商店设置中配置。据其通知指南所说,没有 SMTP 就“没有简便的方法”重置密码。我们的网络默认关闭出站 25 端口。这会阻止直接向其他邮件服务器投递,但不影响经身份验证后向中继服务器提交邮件:填写您邮件服务商的 SMTP 主机、587 端口和登录凭据,然后发送测试邮件。邮件服务商能看到您发送的内容,如果您介意这一点,请不要配置 SMTP。
常见问题
自托管 BTCPay Server 需要多少费用?
该软件免费,没有订阅费或交易手续费;您只需为服务器和域名付费。BTCPay 的起步配置(2 个 vCPU、
可以在 2 GB 内存的 VPS 上运行 BTCPay Server 吗?
仅适合测试。BTCPay 的部署常见问题将 opt-save-storage-xxs
BTCPay Server 需要比特币全节点吗?
您需要的是一个会验证区块的节点,而不是把整条链都存在硬盘上。该部署中的 Bitcoin Core 会校验每一个区块,而修剪预设会保留最近 5 至
可以在无需 KYC 的情况下托管 BTCPay Server 吗?
可以。BTCPay 是由您自己运行的软件,无需开设任何账户;我们的主机服务也只需要邮箱地址和密码,支持用比特币、以太坊、门罗币、泰达币或 Solana 付款。您的域名注册商和邮件服务商有各自的规定,税收、消费者保护法和我们的可接受使用政策也依然适用。
BTCPay Server 支持门罗币吗?
支持,通过社区维护的门罗币插件实现。设置 BTCPAYGEN_CRYPTO2="xmr"