上线优惠价:每个套餐的价格都比我们追踪的最便宜的离岸竞争对手低 30%。 查看价格对比所有套餐价格均比最便宜的离岸主机服务商低 30%

知识库 · VPS

如何在 VPS 上自托管 BTCPay Server

在 VPS 上自托管 BTCPay Server:修剪节点的需求、适合的套餐、在 Ubuntu 24.04 上的官方 Docker 安装、闪电网络、备份与安全。

更新于 阅读约 10 分钟

本指南要点

  • 对于启用修剪、仅支持比特币的服务器,BTCPay 给出的起步配置是 2 个 vCPU、4 GB 内存和 50 GB SSD,我们的 Cutter 套餐即可满足。
  • 将域名指向服务器,开放 80 和 443 端口,然后以 source 方式运行官方的 btcpay-setup.sh 脚本。
  • 网站能够打开后立即注册:第一个账户将成为服务器管理员。
  • 连接硬件钱包或 xpub(扩展公钥),这样服务器永远不会持有您的助记词。
  • 运行 btcpay-backup.sh,将归档文件复制到服务器之外,并单独备份闪电网络通道。
VPS8 个章节
全部指南
本页内容
  1. BTCPay Server 的配置要求与合适的套餐
  2. 为什么要在 VPS 上自托管 BTCPay Server
  3. 离岸、无需 KYC 的主机服务商能改变什么,不能改变什么
  4. 如何自托管 BTCPay Server:分步指南
  5. 保持稳定运行:更新、备份与硬盘空间
  6. 保护 BTCPay Server 和您的钱包
  7. 邮件通知与 25 端口
  8. 常见问题

要自托管 BTCPay Server,您需要一台足以运行修剪比特币节点的 Linux VPS(BTCPay 的起步配置:2 个 vCPU、4 GB 内存和 50 GB SSD)、一个指向该服务器的域名,并开放 80 和 443 端口。使用官方的 btcpayserver-docker 脚本进行安装;根据 BTCPay 文档,首次同步需要一到五天。

以下步骤使用一台运行 Ubuntu 24.04 LTS 或 Debian 12 的离岸 VPS,并具有 root 权限,如快速入门所述。请将 btcpay.example.com 替换为您的主机名,将 SERVER_IP 替换为您服务器的 IPv4 地址。

BTCPay Server 的配置要求与合适的套餐

官方 Docker 部署会在一台机器上运行 BTCPay Server、PostgreSQL、NBXplorer、Bitcoin Core、带自动 HTTPS 的 Nginx 以及 Tor。BTCPay Server 的修剪节点会下载并校验每一个区块,但只保留最近的区块,上限为所选预设的目标值。BTCPay 的服务器规格说明按以下方式估算硬盘空间:主机系统 10 GB,比特币的链状态(chainstate)15 GB,再加上该目标值:

部署方式修剪预设(保留的区块量)按 BTCPay 公式估算的硬盘空间适合的套餐每月价格
测试用,仅比特币opt-save-storage-xxs(5 GB)30 GBSloop:1 个 vCPU、2 GB 内存、40 GB NVMe$3.49
网店,仅比特币(BTCPay 的起步配置)opt-save-storage-xs(25 GB)50 GBCutter:2 个 vCPU、4 GB、70 GB$5.49
比特币和闪电网络opt-save-storage-s(50 GB)75 GBSchooner:4 个 vCPU、8 GB、160 GB$12.49
闪电网络,业务较繁忙的商店opt-save-storage(100 GB)125 GBBrigantine:6 个 vCPU、16 GB、240 GB$19.99
比特币和门罗币比特币同上;门罗币默认启用修剪250 GB 及以上Frigate:12 个 vCPU、32 GB、500 GB$47.99
未修剪节点无约 771 GB 区块数据,仍在增长独立服务器,2 × 1 TB NVMe 或更高配置$97.49 起

以上均为未留余量的数值:BTCPay 建议预留余量,而这里的每个套餐都至少还有 10 GB 富余。Sloop 低于 4 GB、2 核的起步配置,不过 BTCPay 的部署常见问题仍将 2 GB 列为最低要求;Dinghy(1 GB、25 GB)则低于所有文档记载的最低要求。在合理使用前提下不限流量,首次下载整条区块链也包括在内。

何时需要未修剪节点

交易索引(opt-txindex)、ElectrumX 和内置的 Mempool 浏览器需要完整的区块链:根据 blockchain.com 的图表,截至 2026年9月25日,区块数据约为 771 GB,这还不包括撤销文件和索引(Bitcoin Core 的下载页面仍写着约 600 GB,另加每月 5 至 10 GB)。没有任何 VPS 套餐能容纳这些数据,即便是 Flagship 的 640 GB 也不够。在配备 2 × 1 TB NVMe 的独立服务器上,例如 Ryzen 7 7700($97.49),RAID 1 可提供 1 TB,但几乎没有增长空间;RAID 0 可提供 2 TB,但没有冗余。Ryzen 9 7950X($175.99)和 EPYC 7402P($211.99)配备 2 × 1.92 TB,足以组建 RAID 1。

BTCPay 闪电网络:Core Lightning、LND 还是 Phoenixd

闪电网络为可选项:BTCPAYGEN_LIGHTNING 用于选择 clightning(Core Lightning)、lnd 或 phoenixd。Core Lightning 和 LND 会为对等节点开放 TCP 9735 端口;Phoenixd 不开放任何端口。BTCPay 没有给出各实现的内存需求,但闪电网络会增加一个需要始终在线的服务,还需要管理流动性,备份要求也更严格。使用闪电网络时请避免 5 GB 预设;BTCPay 的常见问题要求 80 GB 存储空间。ThunderHub 等应用需要 LND。如需稍后添加,请导出该变量并再次 source 安装脚本,如第 3 步所示。收款还需要入站流动性:即由他人或付费服务商向您的节点开设的通道。

为什么要在 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.com 这样的主机名创建一条 A 记录,指向您服务器的 IPv4 地址。内置的 Nginx 会为其申请 Let's Encrypt 证书,完成验证需要 80 端口可以从外部访问。检查该名称是否解析为 SERVER_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 的 nftables 文件:正如我们的加固指南所警告的,它会删除 Docker 的规则。

3. 克隆代码仓库并设置变量

与 README 的做法一样,请在 root 登录 shell 中操作:直接以 root 身份登录,或在您的 sudo 用户下运行 sudo su -。然后使用您的主机名运行 README 中的命令:

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(反向代理)
nginx,负责申请并续期 HTTPS 证书。
BTCPAYGEN_ADDITIONAL_FRAGMENTS(附加配置片段)
各项以分号分隔,其中包含一个修剪预设;安装脚本不接受 opt-txindex 与修剪预设同时出现。以后修改该列表时,请再次包含该预设,否则修剪将被关闭,节点会停止运行并报错“Block files have previously been pruned”。
BTCPAY_ENABLE_SSH(启用 SSH)
见于旧版指南;当前脚本会忽略此变量。

4. 运行安装脚本

请保留开头的点号:该脚本必须以 source 方式运行,不带 -i 时它只会输出选项说明。带上 -i 后,它会在缺少时安装 Docker 和固定版本的 Docker Compose,生成服务栈,将您的设置保存到 /etc/profile.d/btcpay-env.sh,添加一个开机启动的 btcpayserver systemd 服务并将其启动;脚本提示这一过程可能需要 5 至 10 分钟。

5. 立即注册管理员账户

打开 https://btcpay.example.com 并立即注册:第一个账户将成为服务器管理员,而且 Let's Encrypt 会公开记录每一张证书,因此您的主机名并非秘密。随后 BTCPay 默认会关闭公开注册:请在 Server Settings > Policies 下确认 Enable public user registration 处于关闭状态。如果您只看到 Login,而自己从未注册过,说明已有他人注册,BTCPay 的常见问题建议重新部署。没有 SMTP 就无法通过邮件重置密码,因此请将密码保存在密码管理器中。

6. 等待节点同步

网站在首次同步完成前就能打开;根据 BTCPay 的同步常见问题,首次同步需要一到五天。可用以下命令查看进度:

bitcoin-cli.sh getblockchaininfo

当 blocks 等于 headers 且 initialblockdownload 为 false 时,节点即同步完成。在此之前,BTCPay 无法可靠地检测付款,因此请不要接受任何付款。

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 设为 false。进行重大升级前,请先备份并阅读发布说明。

备份

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 对其加密,并按照我们的快照与备份指南,用 restic 或 Borg 将其复制到服务器之外。备份期间服务栈处于停止状态,因此请选择业务清闲的时段,如 BTCPay 的 crontab 示例所示:

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.backup 副本,每当有通道开启或关闭时都要更新该副本;使用 Core Lightning 时,请遵循其自身的指引。切勿为闪电网络节点恢复早于其最近几笔付款的 VPS 快照。不使用闪电网络时,快照是快速回退的手段:先运行 btcpay-down.sh,再申请快照,待快照显示为已完成后运行 btcpay-up.sh。

硬盘空间与同步状态

硬盘写满会导致 Bitcoin Core 停止运行,BTCPay 随后会一直显示节点正在启动。可用以下命令检查:

df -h /var/lib/docker
docker system df
bitcoin-cli.sh getblockchaininfo

启用修剪后,size_on_disk 会保持在预设目标值附近,而数据库和镜像会持续增长。请让 BTCPay 始终保持运行,使节点保持同步,并将这些检查加入您自己的监控:我们从不给您发送邮件。

保护 BTCPay Server 和您的钱包

  • 注册功能保持关闭;如需添加其他用户,请从 Server Settings 发出邀请。
  • 双重验证:在账户设置中开启(身份验证器应用或 U2F 密钥)。根据服务器设置常见问题,如果设备丢失,root 可以在代码仓库目录中运行 ./btcpay-admin.sh disable-multifactor YOUR_ACCOUNT_EMAIL 将其移除。
  • SSH:按照加固指南使用密钥登录。安装脚本会为 Maintenance 中的操作添加一个受限的 root 密钥,并且可能会修改 /etc/ssh/sshd_config,将其中的 PermitRootLogin no 改为 prohibit-password。在我们的测试中,加固指南添加的配置文件会被优先读取,root 登录因此仍被拒绝,BTCPay 便隐藏了这些操作。您可以在 shell 中进行更新,或在该文件中设置 PermitRootLogin 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、4 GB 内存、50 GB SSD)对应我们每月 $5.49 的 Cutter;如需闪电网络,则对应每月 $12.49 的 Schooner。按最低充值额 $100 充值,赠送 10%:大约够用 20 个月的 Cutter。

可以在 2 GB 内存的 VPS 上运行 BTCPay Server 吗?

仅适合测试。BTCPay 的部署常见问题将 2 GB 内存列为最低要求,但其较新的选型指南以 4 GB 内存和 2 核为起点。我们的 2 GB Sloop(1 个 vCPU、40 GB NVMe)可以在 opt-save-storage-xxs 预设下运行不带闪电网络的比特币,但首次同步较慢。正式运营的网店请使用 Cutter。

BTCPay Server 需要比特币全节点吗?

您需要的是一个会验证区块的节点,而不是把整条链都存在硬盘上。该部署中的 Bitcoin Core 会校验每一个区块,而修剪预设会保留最近 5 至 100 GB 的区块。只有交易索引、ElectrumX 和内置的 Mempool 浏览器才需要未修剪节点,目前这意味着需要一台独立服务器。如需运行不带 BTCPay 的节点,请参阅我们的比特币和门罗币节点指南。

可以在无需 KYC 的情况下托管 BTCPay Server 吗?

可以。BTCPay 是由您自己运行的软件,无需开设任何账户;我们的主机服务也只需要邮箱地址和密码,支持用比特币、以太坊、门罗币、泰达币或 Solana 付款。您的域名注册商和邮件服务商有各自的规定,税收、消费者保护法和我们的可接受使用政策也依然适用。

BTCPay Server 支持门罗币吗?

支持,通过社区维护的门罗币插件实现。设置 BTCPAYGEN_CRYPTO2="xmr" 并再次运行安装脚本,即可部署修剪模式的门罗币节点和钱包服务;然后在 Server Settings > Manage Plugins 下安装该插件,并为商店配置一个只读钱包:提供主地址、查看私钥和恢复高度,绝不提供助记词。请按照 BTCPay 的门罗币配置步骤操作,并按其选型指南的建议,规划至少 250 GB 的 SSD 空间。

某个步骤遇到困难?

独立服务器和 GPU 服务器客户可在客户中心提交工单,注明服务器的 IP 地址以及已尝试过的操作。首次回复目标:12 小时内。其他服务器请使用其页面上的服务器操作、指南和网络状态页面。

欢迎回来

登录以管理您的服务器和余额。

无需 KYC由 Cloudflare Turnstile 提供人机验证无跟踪