最大的比特币支付提供商之一 BitPay 已经遭遇 Bitcoiners 的折磨很长一段时间。该社区呼吁进行抵制,开发商 Nicolas Dorier 巧妙地利用了这一抵制事件。
Nicolas 创建了一个名为 BTCPayServer 的开源和自托管 BitPay 兼容支付网关,受到了社区的好评。虽然有许多关于如何使用 Docker 和其他方法进行设置的指南,但我喜欢控制我在服务器上安装的内容,同时还要了解它的工作原理。
如果你出于某种原因更喜欢手动安装 BTCPayServer,我会写一篇关于如何做到这一点的分步指南。
本教程是为 Ubuntu 18.04 编写的,但也适用于旧版本和其他基于 Debian 的发行版。在开始之前,请确保运行比特币核心和闪电网络节点。
安装依赖项
要运行 BTCPayServer,你需要安装 .NET Core SDK
,NBXplorer
和PostgreSQL
。
安装.NET Core SDK
转到下载文件夹或用于存储临时文件的任何其他文件夹:
cd ~/Downloads
并下载 .NET Core SDK
所需的 Microsoft 软件包:
wget -qO- https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > microsoft.asc.gpg
sudo mv microsoft.asc.gpg /etc/apt/trusted.gpg.d/
wget -q https://packages.microsoft.com/config/ubuntu/$(lsb_release -sr)/prod.list
sudo mv prod.list /etc/apt/sources.list.d/microsoft-prod.list
更新包缓存并安装.NET Core:
sudo apt-get install apt-transport-https
sudo apt-get update
sudo apt-get install dotnet-sdk-2.1
安装 NBXplorer
我们需要安装 NBXplorer 才能跟踪传入的链上交易。
如果你还没有创建源文件夹并打开它:
mkdir ~/source
cd ~/source
克隆存储库并构建代码:
git clone https://github.com/dgarage/NBXplorer
cd NBXplorer
./build.sh
创建数据文件夹:
mkdir -p ~/.nbxplorer/Main
cd ~/.nbxplorer/Main
新的配置文件:
touch settings.config
使用你选择的编辑器打开文件并添加以下行:
btc.rpc.auth=<bitcoind rpc user>:<bitcoind rpc password>
port=24445
mainnet=1
确保使用你的 bitcoind 的 rpc 登录凭据。你可以使用以下命令找到它们:
cat ~/.bitcoin/bitcoin.conf | grep rpc
测试是否所有设置都正确:
/usr/bin/dotnet ~/source/NBXplorer/NBXplorer/bin/Release/netcoreapp2.1/NBXplorer.dll -c ~/.nbxplorer/Main/settings.config
如果是这样,输入 ctrl + c
终止进程并下载 Systemd 服务:
cd /usr/lib/systemd/system
sudo wget https://gist.githubusercontent.com/mariodian/de873b969e70eca4d0a7673efd697d0a/raw/acfc70c5694cd53d8a3df7ff54a35ff2caba7532/nbxplorer.service
根据你的环境编辑文件。
启用服务,启动它并检查状态:
sudo systemctl enable nbxplorer.service
sudo service nbxplorer start
sudo service nbxplorer status
如果你没有看到错误,请转到下一步。
安装 PostgreSQL
我无法使用 MySQL/MariaDB 设置 BTCPayServer,所以我被迫使用PostgreSQL
。
首先安装它并以新创建的系统用户身份打开 shell 提示符:
sudo apt install postgresql postgresql-contrib
sudo -i -u postgres
创建一个新的数据库用户:
createuser --pwprompt --interactive
输入以下内容(你可以将 satoshi 更改为你喜欢的任何用户名):
创建一个新数据库:
createdb -O satoshi btcpayserver
如果你看到没有错误退出 shell:
exit
安装 BTCPayServer
克隆存储库并构建代码:
cd ~/source
git clone https://github.com/btcpayserver/btcpayserver.git
cd btcpayserver
./build.sh
创建一个数据文件夹:
mkdir -p ~/.btcpayserver/Main
cd ~/.btcpayserver/Main
一个新的配置文件:
touch settings.config
获取 LND 的证书指纹并将其粘贴到下面的配置文件中。
openssl x509 -noout -fingerprint -sha256 -inform pem -in ~/.lnd/tls.cert
打开 settings.config
并添加以下行:
network=mainnet
port=23001
bind=0.0.0.0
chains=btc
BTC.explorer.url=http://127.0.0.1:24445
BTC.lightning=type=lnd-rest;server=https://127.0.0.1:8080/;macaroonfilepath=~/.lnd/data/chain/bitcoin/mainnet/admin.macaroon;certthumbprint=<finger print>
postgres=User ID=<your db user>;Password=<your db password>;Host=localhost;Port=5432;Database=btcpayserver;
根据你的设置更改突出显示的变量variables
。
检查一切是否正常。
/usr/bin/dotnet run -p ~i/source/btcpayserver/BTCPayServer/BTCPayServer.csproj -c ~/.btcpayserver/Main/settings.config --network=mainnet
如果是这样,输入 ctrl + c
终止进程并下载 Systemd 服务:
cd /usr/lib/systemd/system
sudo wget https://gist.githubusercontent.com/mariodian/07bb13da314e2a321784b380f543651a/raw/6cef554d9e8311e683a017d5e63a07822dee7642/btcpayserver.service
根据你的环境编辑文件。
启用该服务,启动它并检查它是否正常运行:
sudo systemctl enable btcpayserver.service
sudo service btcpayserver start
sudo service btcpayserver status
恭喜,你刚刚度过了最难的部分!
允许传入连接(可选)
如果要远程运行服务器,则必须打开端口23001
。
首先,转到路由器设置并找到虚拟服务器 Virtual Server
或端口转发 Port Forwarding
的部分,并在上述端口上设置端口转发。
然后回到你的 linux 机器并用 iptables 打开端口:
sudo iptables -A INPUT -p tcp --dport 23001 -j ACCEPT
如果你使用 iptables-save 也运行以下命令:
sudo iptables-save > /etc/iptables/rules.v4
你现在应该可以从另一台计算机连接到你的服务器。
设置 BTCPayServer
转到你的 BTCPayServer 管理,注册一个新的管理员帐户并登录。
现在,转到 Stores
并单击Create a new store
。完成后,转到商店设置并向下滚动到Derivation Scheme
。
在 BTC
下单击修改Edit
,然后在计算机或手机上打开支持 BIP32 的钱包。
出于本教程的目的,我将使用 Electrum。
建议你创建一个新的钱包,而不是使用旧钱包,这样你就不必费心地重新扫描地址上的余额了。
完成后,单击Wallet -> Information
,复制主公钥,将其粘贴回 BTCPayServer 管理,选中已启用,然后保存。
接下来,向下滚动到Lightning nodes (Experimental)
,然后单击修改modify
。
应该设置你的连接字符串,但如果没有,请粘贴以下内容:
type=lnd-rest;server=https://127.0.0.1:8080/;macaroonfilepath=/home/satoshi/.lnd/data/chain/bitcoin/mainnet/admin.macaroon;certthumbprint=<your cert fingerprint>
请记住添加你之前获得的 LND 证书指纹,并将主目录更改为你自己的目录。
单击测试连接 Test connection
,如果一切正常,请选中已启用Enable
并单击提交submit
。
在这种情况下,服务器在你要通过域名访问的单独计算机上运行,转到 Server Settings -> Maintenance
,并在Change domain name
添加你的名称(当然,你必须购买它)。
你还必须根据你的设置向你的域名提供商添加 CNAME 或 A DNS 记录。对不起,我无法帮助你,提供者太多了。
现在,你应该可以使用新域名访问 BTCPayServer 管理,如下所示: http://domain.ltd:23001
。
要创建 POS 终端,请转到 Apps -> Create a new app
并填写简短表单。然后,你将进入应用程序设置,你可以通过模板更改项目列表。
你还可以在网站中添加一个简单的付款按钮,你可以在 Stores -> Settings -> Pay Button
中配置,也可以在 Stores -> Invoices -> Create a new invoice
中手动创建发票。然后,你可以发送给客户。
当然,支付网关的前端设计是完全可定制的,因此你可以设置自己的徽标和颜色。
设置 SSL 加密证书(可选)
首先让我们安装将用作反向代理的 Apache 2。
sudo apt-get install apache2
启用所需模块:
sudo a2enmod rewrite
sudo a2enmod proxy
sudo a2enmod proxy_http
sudo a2enmod proxy_ajp
sudo a2enmod deflate
sudo a2enmod headers
sudo a2enmod proxy_balancer
sudo a2enmod proxy_connect
sudo a2enmod proxy_html
重启服务器:
sudo systemctl restart apache2
为你的域名安装 Let’s 加密证书。但你可以使用任何其他证书颁发机构。
用以下内容替换 /etc/apache2/sites-enabled/000-default.conf
的内容:
<VirtualHost *:80>
ServerAdmin webmaster@localhost
ServerName btcpay.freedomnode.com
RewriteEngine on
RewriteCond %{SERVER_NAME} =btcpay.freedomnode.com
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
根据你的需要更改ServerName
。
然后,使用以下内容替换 /etc/apache2/sites-enabled/000-default-le-ssl.conf
的内容:
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerAdmin webmaster@localhost
ServerName btcpay.freedomnode.com
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
ProxyPass "/" "http://127.0.0.1:23001/"
ProxyPassReverse / "http://127.0.0.1:23001/"
ProxyPreserveHost On
SSLCertificateFile /etc/letsencrypt/live/btcpay.freedomnode.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/btcpay.freedomnode.com/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
</VirtualHost>
</IfModule>
再次,编辑 ServerName
并确保 SSLCertificateFile
和SSLCertificateKeyFile
指向正确的文件。
重新加载服务器:
sudo systemctl reload apache2
现在回到 ~/.btcpayserver/Main/settings.config
并添加:
externalurl=HTTPS://btcpay.freedomnode.com
再次将服务器名称更改为你自己的名称。
你还可以从配置中删除bind=0.0.0.0
,因为远程连接将从现在开始通过 Apache 进行代理。
重启 BTCPayServer:
sudo service btcpayserver restart
打开浏览器并检查新安装的 SSL 证书是否正常工作。
======================================================================
分享一些比特币、以太坊、EOS、Fabric 等区块链相关的交互式在线编程实战教程:
- java 比特币开发教程,本课程面向初学者,内容即涵盖比特币的核心概念,例如区块链存储、去中心化共识机制、密钥与脚本、交易与 UTXO 等,同时也详细讲解如何在 Java 代码中集成比特币支持功能,例如创建地址、管理钱包、构造裸交易等,是 Java 工程师不可多得的比特币开发学习课程。
- php 比特币开发教程,本课程面向初学者,内容即涵盖比特币的核心概念,例如区块链存储、去中心化共识机制、密钥与脚本、交易与 UTXO 等,同时也详细讲解如何在 Php 代码中集成比特币支持功能,例如创建地址、管理钱包、构造裸交易等,是 Php 工程师不可多得的比特币开发学习课程。
- c#比特币开发教程,本课程面向初学者,内容即涵盖比特币的核心概念,例如区块链存储、去中心化共识机制、密钥与脚本、交易与 UTXO 等,同时也详细讲解如何在 C#代码中集成比特币支持功能,例如创建地址、管理钱包、构造裸交易等,是 C# 工程师不可多得的比特币开发学习课程。
- java 以太坊开发教程,主要是针对 java 和 android 程序员进行区块链以太坊开发的 web3j 详解。
- python 以太坊,主要是针对 python 工程师使用 web3.py 进行区块链以太坊开发的详解。
- php 以太坊,主要是介绍使用 php 进行智能合约开发交互,进行账号创建、交易、转账、代币开发以及过滤器和交易等内容。
- 以太坊入门教程,主要介绍智能合约与 dapp 应用开发,适合入门。
- 以太坊开发进阶教程,主要是介绍使用 node.js、mongodb、区块链、ipfs 实现去中心化电商 DApp 实战,适合进阶。
- ERC721 以太坊通证实战,课程以一个数字艺术品创作与分享 DApp 的实战开发为主线,深入讲解以太坊非同质化通证的概念、标准与开发方案。内容包含 ERC-721 标准的自主实现,讲解 OpenZeppelin 合约代码库二次开发,实战项目采用 Truffle,IPFS,实现了通证以及去中心化的通证交易所。
- C#以太坊,主要讲解如何使用 C# 开发基于.Net 的以太坊应用,包括账户管理、状态与交易、智能合约开发与交互、过滤器和交易等。
- EOS 入门教程,本课程帮助你快速入门 EOS 区块链去中心化应用的开发,内容涵盖 EOS 工具链、账户与钱包、发行代币、智能合约开发与部署、使用代码与智能合约交互等核心知识点,最后综合运用各知识点完成一个便签 DApp 的开发。
- 深入浅出玩转 EOS 钱包开发,本课程以手机 EOS 钱包的完整开发过程为主线,深入学习 EOS 区块链应用开发,课程内容即涵盖账户、计算资源、智能合约、动作与交易等 EOS 区块链的核心概念,同时也讲解如何使用 eosjs 和 eosjs-ecc 开发包访问 EOS 区块链,以及如何在 React 前端应用中集成对 EOS 区块链的支持。课程内容深入浅出,非常适合前端工程师深入学习 EOS 区块链应用开发。
- Hyperledger Fabric 区块链开发详解,本课程面向初学者,内容即包含 Hyperledger Fabric 的身份证书与 MSP 服务、权限策略、通道配置与启动、链码通信接口等核心概念,也包含 Fabric 网络设计、nodejs 链码与应用开发的操作实践,是 Nodejs 工程师学习 Fabric 区块链开发的最佳选择。
- Hyperledger Fabric java 区块链开发详解,课程面向初学者,内容即包含 Hyperledger Fabric 的身份证书与 MSP 服务、权限策略、通道配置与启动、链码通信接口等核心概念,也包含 Fabric 网络设计、java 链码与应用开发的操作实践,是 java 工程师学习 Fabric 区块链开发的最佳选择。
- tendermint 区块链开发详解,本课程适合希望使用 tendermint 进行区块链开发的工程师,课程内容即包括 tendermint 应用开发模型中的核心概念,例如 ABCI 接口、默克尔树、多版本状态库等,也包括代币发行等丰富的实操代码,是 go 语言工程师快速入门区块链开发的最佳选择。
汇智网原创翻译,转载请标明出处。这里是如何在 Linux 上手动安装 BTCPayServer 并设置比特币 BTC 和 Lightning 支付网关