Skip to content

Instantly share code, notes, and snippets.

@normandmickey
Last active January 18, 2020 22:06
Show Gist options
  • Save normandmickey/6d6e74ebb6b3ddbd317bc1450f48f08e to your computer and use it in GitHub Desktop.
Save normandmickey/6d6e74ebb6b3ddbd317bc1450f48f08e to your computer and use it in GitHub Desktop.
Install BTCPayServer on RaspiBlitz
#Install Dot-Net for ARM
cd /home/admin
sudo apt-get -y install libunwind8 gettext
wget https://download.visualstudio.microsoft.com/download/pr/9650e3a6-0399-4330-a363-1add761127f9/14d80726c16d0e3d36db2ee5c11928e4/dotnet-sdk-2.2.102-linux-arm.tar.gz
wget https://download.visualstudio.microsoft.com/download/pr/9d049226-1f28-4d3d-a4ff-314e56b223c5/f67ab05a3d70b2bff46ff25e2b3acd2a/aspnetcore-runtime-2.2.1-linux-arm.tar.gz
sudo mkdir /opt/dotnet
sudo tar -xvf dotnet-sdk-2.2.102-linux-arm.tar.gz -C /opt/dotnet/
sudo tar -xvf aspnetcore-runtime-2.2.1-linux-arm.tar.gz -C /opt/dotnet/
sudo ln -s /opt/dotnet/dotnet /usr/local/bin
dotnet --info
#Install Nginx & Certbot
sudo apt-get install nginx-full certbot -y
#Install NBXplorer
cd /home/admin
git clone https://github.com/dgarage/NBXplorer.git
cd NBXplorer
./build.sh
#Create the NBXplorer system unit file
sudo nano /etc/systemd/system/nbxplorer.service
#copy and past the following code
## Start of nbxplorer service file ##
[Unit]
Description=NBXplorer daemon
Requires=bitcoind.service
After=bitcoind.service
[Service]
ExecStart=/usr/local/bin/dotnet "/home/admin/NBXplorer/NBXplorer/bin/Release/netcoreapp2.1/NBXplorer.dll" -c /home/admin/.nbxplorer/Main/settings.config
User=admin
Group=admin
Type=simple
PIDFile=/run/nbxplorer/nbxplorer.pid
Restart=on-failure
PrivateTmp=true
ProtectSystem=full
NoNewPrivileges=true
PrivateDevices=true
[Install]
WantedBy=multi-user.target
## end of nbxplorer service file ##
#reload the systemd daemon
sudo systemctl daemon-reload
#enable nbxplorer service
sudo systemctl enable nbxplorer
#start nbxplorer service
sudo systemctl start nbxplorer
#check to see if nbxplorer is running
sudo systemctl status nbxplorer
#add your Raspiblitz RPC credentials to the nbxplorer configuration settings
nano /home/admin/.nbxplorer/Main/settings.config
#Locate the "#By user name and password" section and uncomment these two lines and change the username and password.
#the username is raspibolt and the password is what you set while installing raspiblitz
btc.rpc.user=raspibolt
btc.rpc.password=yourVerySecretPassword
#restart nbxplorer
sudo systemctl restart nbxplorer
#Install BTCPayServer
cd /home/admin
git clone https://github.com/btcpayserver/btcpayserver.git
cd btcpayserver
./build.sh
#create the BTCPayServer system unit fil
sudo nano /etc/systemd/system/btcpayserver.service
#copy and past the following code
## Start of btcpayserver service file ##
[Unit]
Description=BtcPayServer daemon
Requires=btcpayserver.service
After=nbxplorer.service
[Service]
ExecStart=/usr/local/bin/dotnet run --no-launch-profile --no-build -c Release -p "/home/admin/btcpayserver/BTCPayServer/BTCPayServer.csproj" -- $@
User=admin
Group=admin
Type=simple
PIDFile=/run/btcpayserver/btcpayserver.pid
Restart=on-failure
[Install]
WantedBy=multi-user.target
## End of BTCPayServer service file ##
#reload the systemd daemon
sudo systemctl daemon-reload
#enable btcpayserver service
sudo systemctl enable btcpayserver
#start btcpayserver
sudo systemctl start btcpayserver
#check to see if btcpayserver is running
sudo systemctl status btcpayserver
#enable the LND rest interface on port 8080
cd /home/bitcoin/.lnd
sudo nano lnd.conf
#add the following line to the [Application Options] section
restlisten=127.0.0.1:8080
tlsextraip=0.0.0.0
#backup existing TLS cert and key files
sudo mv tls.cert tls.cert.backup
sudo mv tls.key tls.key.backup
#restarting lnd will generate new tls files
sudo systemctl restart lnd
#copy new tls.cert file to admin folder
sudo cp tls.cert /home/admin/.lnd
#update your btcpayserver settings
nano /home/admin/.btcpayserver/Main/settings.config
#make sure the following items are uncommented and correct. Replace example.com with your domain name
### Global settings ###
network=mainnet
### Server settings ###
port=23000
bind=127.0.0.1
externalurl=https://btcpay.example.com
### NBXplorer settings ###
BTC.explorer.url=http://127.0.0.1:24444/
BTC.lightning=type=lnd-rest;server=https://127.0.0.1:8080/;macaroonfilepath=/home/admin/.lnd/data/chain/bitcoin/mainnet/admin.macaroon;certthumbprint=<paste your thumbprint here>
#save file we will get the cert thumbprint next
#get your cert thumbprint for BTCPayServer Lightning configuration
cd /home/admin
openssl x509 -noout -fingerprint -sha256 -inform pem -in ~/.lnd/tls.cert
#copy thumbprint output to clipboard
#replace thumbprint for lightning configuration
sudo nano /home/admin/.btcpayserver/Main/settings.config
#paste thumbprint at the end of this line
BTC.lightning=type=lnd-rest;server=https://127.0.0.1:8080/;macaroonfilepath=/home/admin/.lnd/data/chain/bitcoin/mainnet/admin.macaroon;certthumbprint=<paste your thumbprint here>
#restart btcpayserver
sudo systemctl restart btcpayserver
#Get your SSL certification using certbot
sudo certbot certonly --authenticator standalone -d btcpay.example.com --pre-hook "service nginx stop" --post-hook "service nginx start"
#Open Port 80
sudo ufw allow 80, 443
#add reverse proxy for btcpayserver
#remove default nginx configuration
sudo rm /etc/nginx/sites-enabled/default
#create the btcpayserver configuration
sudo nano /etc/nginx/sites-available/btcpayserver
#Paste the following, make sure you change the domain name to yours
server {
listen 80 default_server;
server_name _;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
server_name btcpay.example.com;
ssl on;
ssl_certificate /etc/letsencrypt/live/btcpay.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/btcpay.example.com/privkey.pem;
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:50m;
ssl_session_tickets off;
ssl_protocols TLSv1.1 TLSv1.2;
ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!3DES:!MD5:!PSK';
ssl_prefer_server_ciphers on;
ssl_stapling on;
ssl_stapling_verify on;
ssl_trusted_certificate /etc/letsencrypt/live/btcpay.example.com/chain.pem;
location / {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://localhost:23000;
}
}
#remove default nginx configuration
sudo rm /etc/nginx/sites-enabled/default
#add symlink for btcpayserver site
sudo ln -s /etc/nginx/sites-available/btcpayserver /etc/nginx/sites-enabled/
#restart nginx
sudo systemctl restart nginx
@bereska
Copy link

bereska commented Apr 10, 2019

sorry for bothering again, I think I figured it out
After I whitelisted btcpayserver ip (127.0.0.1) whitelist=127.0.0.1 in /mnt/hdd/bitcoin/bitcoin.conf it works OK I hope

admin@bereskaLND:~ $ sudo systemctl status nbxplorer
● nbxplorer.service - NBXplorer daemon
Loaded: loaded (/etc/systemd/system/nbxplorer.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2019-04-10 18:20:13 BST; 5h 22min ago
Main PID: 13923 (dotnet)
CGroup: /system.slice/nbxplorer.service
└─13923 /usr/local/bin/dotnet /home/admin/NBXplorer/NBXplorer/bin/Release/netcoreapp2.1/NBXplorer.dll -c /home/admin/.nbxplorer/Main/settings.config

Apr 10 22:09:58 bereskaLND dotnet[13923]: info: Events: BTC: New block 00000000000000000024c3b491f4581a4b7c1e92881282d21bd8305ebc23521f (571086)
Apr 10 22:09:59 bereskaLND dotnet[13923]: info: Events: BTC: New block 00000000000000000026181c593b6edac78c73edb226e82af7c56797011a05ba (571087)
Apr 10 22:17:03 bereskaLND dotnet[13923]: info: Events: BTC: New block 0000000000000000001d96002b130121b32b5b1d91bedbd637ae9900f1d9ce76 (571088)
Apr 10 22:23:49 bereskaLND dotnet[13923]: info: Events: BTC: New block 00000000000000000027d276df70e81e66fb6c5d2b66b72ec05362343fa31916 (571089)
Apr 10 22:31:18 bereskaLND dotnet[13923]: info: Events: BTC: New block 00000000000000000005bc5b041f616b9e35716c4daa0a82dfbc258afadf4caf (571090)
Apr 10 22:34:48 bereskaLND dotnet[13923]: info: Events: BTC: New block 0000000000000000000f5502d06f93f2ae9c12ba2ab645bc6521829337b8f8cb (571091)
Apr 10 22:38:28 bereskaLND dotnet[13923]: info: Events: BTC: New block 0000000000000000001141b10ebf274e2bfcb5a566ce75f15ceb92aacbb28c10 (571092)
Apr 10 23:19:22 bereskaLND dotnet[13923]: info: Events: BTC: New block 000000000000000000097ede52df3f6a0860094b0fc227b995aa18386a06d1ad (571093)
Apr 10 23:22:08 bereskaLND dotnet[13923]: info: Events: BTC: New block 0000000000000000001264ea8f1fd2b5f83db86db3708fdfa5c202e65f0b2bb8 (571094)
Apr 10 23:40:42 bereskaLND dotnet[13923]: info: Events: BTC: New block 0000000000000000000f9b47f1619ded7d81a496f625499b6e2562cc7269927a (571095)
Thank you again for this great guide
feel free to open a channel with my node:
0303ad2d0f33b441ca0d5fb311fae319daa2654ebb5abc10f0c691a5deb4be4792@108.252.28.206:9735

@normandmickey
Copy link
Author

I just updated this gist with to use DotNet 2.2 and added to reverse proxy configuration and fixed tlsextraip in lnd.conf.

@bereska
Copy link

bereska commented Apr 15, 2019

thank you for helping us
my btcpay server is up and has been running for 3 days now!
https://btcpay.bereska-lnd.duckdns.org
all, feel free to connect, it's free
I have paired it with this site where you can buy pictures for $1 with bitcoin and lightning
hhtps://bereshka.net/shop
welcome to the future)

@bereska
Copy link

bereska commented Apr 15, 2019

@bereska
Copy link

bereska commented Apr 19, 2019

I just ran into a new issue:

admin@bereskaLND:~ $ sudo systemctl status nbxplorer
● nbxplorer.service - NBXplorer daemon
Loaded: loaded (/etc/systemd/system/nbxplorer.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2019-04-10 18:20:13 BST; 1 weeks 1 days ago
Main PID: 13923 (dotnet)
CGroup: /system.slice/nbxplorer.service
└─13923 /usr/local/bin/dotnet /home/admin/NBXplorer/NBXplorer/bin/Release/netcoreapp2.1/NBXplorer.dll -c /home/admin/.nbxplorer/Main/settings.config

Apr 19 00:44:25 bereskaLND dotnet[13923]: at System.Net.Http.HttpClient.FinishSendAsyncBuffered(Task`1 sendTask, HttpRequestMessage request, CancellationTokenSource cts, Boolean dispos
Apr 19 00:44:25 bereskaLND dotnet[13923]: at NBitcoin.RPC.RPCClient.SendCommandAsyncCore(RPCRequest request, Boolean throwIfRPCError)
Apr 19 00:44:25 bereskaLND dotnet[13923]: at NBitcoin.RPC.RPCClient.SendCommandAsync(RPCRequest request, Boolean throwIfRPCError)
Apr 19 00:44:25 bereskaLND dotnet[13923]: at NBXplorer.RPCClientExtensions.GetBlockchainInfoAsyncEx(RPCClient client) in /home/admin/NBXplorer/NBXplorer/RPCClientExtensions.cs:line 69
Apr 19 00:44:25 bereskaLND dotnet[13923]: at NBXplorer.BitcoinDWaiter.StepAsync(CancellationToken token) in /home/admin/NBXplorer/NBXplorer/BitcoinDWaiter.cs:line 327
Apr 19 00:44:25 bereskaLND dotnet[13923]: info: Events: BTC: Node state changed: NBXplorerSynching => NotStarted
Apr 19 00:44:25 bereskaLND dotnet[13923]: info: Configuration: BTC: Testing RPC connection to http://127.0.0.1:8332/
Apr 19 00:44:32 bereskaLND dotnet[13923]: info: Configuration: BTC: RPC connection successfull
Apr 19 00:44:32 bereskaLND dotnet[13923]: info: Configuration: BTC: Full node version detected: 170001
Apr 19 00:44:32 bereskaLND dotnet[13923]: info: Events: BTC: Node state changed: NotStarted => NBXplorerSynching

How can this be fixed?
thank you

@normandmickey
Copy link
Author

It doesn't need to be fixed, it appears to be running to me...
Apr 19 00:44:25 bereskaLND dotnet[13923]: info: Events: BTC: Node state changed: NBXplorerSynching => NotStarted
Apr 19 00:44:25 bereskaLND dotnet[13923]: info: Configuration: BTC: Testing RPC connection to http://127.0.0.1:8332/
Apr 19 00:44:32 bereskaLND dotnet[13923]: info: Configuration: BTC: RPC connection successfull
Apr 19 00:44:32 bereskaLND dotnet[13923]: info: Configuration: BTC: Full node version detected: 170001
Apr 19 00:44:32 bereskaLND dotnet[13923]: info: Events: BTC: Node state changed: NotStarted => NBXplorerSynching

@bereska
Copy link

bereska commented Apr 23, 2019

yes, right, after latest commits to nbxplorer that rpc connection error is gone
last night I ran into a new issue, the server settings page of the btcpayserver webfront become inaccessible with the following in the logs:

admin@bereskaLND:~ $ sudo systemctl status btcpayserver
● btcpayserver.service - BtcPayServer daemon
Loaded: loaded (/etc/systemd/system/btcpayserver.service; enabled; vendor preset: enabled)
Active: active (running) since Mon 2019-04-22 05:48:02 BST; 16h ago
Main PID: 9189 (dotnet)
CGroup: /system.slice/btcpayserver.service
├─9189 /usr/local/bin/dotnet run --no-launch-profile --no-build -c Release -p /home/admin/btcpayserver/BTCPayServer/BTCPayServer.csproj --
└─9236 dotnet exec /home/admin/btcpayserver/BTCPayServer/bin/Release/netcoreapp2.1/BTCPayServer.dll

Apr 22 22:39:14 bereskaLND dotnet[9189]: at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeFilterPipelineAsync()
Apr 22 22:39:14 bereskaLND dotnet[9189]: at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeAsync()
Apr 22 22:39:14 bereskaLND dotnet[9189]: at Microsoft.AspNetCore.Builder.RouterMiddleware.Invoke(HttpContext httpContext)
Apr 22 22:39:14 bereskaLND dotnet[9189]: at Microsoft.AspNetCore.Diagnostics.StatusCodePagesMiddleware.Invoke(HttpContext context)
Apr 22 22:39:14 bereskaLND dotnet[9189]: at Microsoft.AspNetCore.Builder.RouterMiddleware.Invoke(HttpContext httpContext)
Apr 22 22:39:14 bereskaLND dotnet[9189]: at Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.Invoke(HttpContext context)
Apr 22 22:39:14 bereskaLND dotnet[9189]: at Microsoft.AspNetCore.StaticFiles.StaticFileMiddleware.Invoke(HttpContext context)
Apr 22 22:39:14 bereskaLND dotnet[9189]: at BTCPayServer.Hosting.BTCPayMiddleware.Invoke(HttpContext httpContext) in /home/admin/btcpayserver/BTCPayServer/Hosting/BTCpayMiddleware.cs:line 55
Apr 22 22:39:14 bereskaLND dotnet[9189]: at Microsoft.AspNetCore.Cors.Infrastructure.CorsMiddleware.Invoke(HttpContext context)
Apr 22 22:39:14 bereskaLND dotnet[9189]: at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http.HttpProtocol.ProcessRequests[TContext](IHttpApplication`1 application)

any help is much appreciated

@bereska
Copy link

bereska commented Apr 23, 2019

installed .NET SDK 2.2.102
no change
same error
server settings webpage is still not accessible https://btcpay.bereska-lnd.duckdns.org/server/users
help

@normandmickey
Copy link
Author

Did you rebuild both NBXplorer and BTCPayServer after updating DOTNet?

@bereska
Copy link

bereska commented Apr 25, 2019

no, I just stopped them, git pulled lates, updated DOTNet and then started them again
the thing is everything was up and running until a few days ago when I started getting those errors in btcpayserver status and HTTP ERROR 500 on the server settings page in the web GUI
do I have to rebuild both with ./build.sh?
thank you

@normandmickey
Copy link
Author

I think so, after you update the SDK and runtime they will have to be recompiled.

@bereska
Copy link

bereska commented Apr 26, 2019

strange, everything is working except for that Sever Settings web page
ok, let me try that rebuild
do i need to repeat the rest of the install, too? I guess so as macaroons and tls will be re-created, right?
thank you

@normandmickey
Copy link
Author

No you should only have to do ./rebuild.sh under nbxplorer and btcpayserver

@bereska
Copy link

bereska commented Apr 28, 2019

you are a star! all is good now, thank you
I learnt my lesson)

@bereska
Copy link

bereska commented May 1, 2019

they say lnd 0.6.1 is more optimized for rpi lightningnetwork/lnd#3030
what would be the proper way to upgrade to lnd to 0.6.1 on my raspiblitz+btcpayserver setup?
thank you

@bereska
Copy link

bereska commented May 5, 2019

@normandmickey, I understand it must be a silly and simple question for you. But it would be great if you could guide beginners like me how to update this great Raspiblitz+BTCPay setup without messing things up. I take it we can git pull latest for nbxplorer and btcpayserver. What about lnd and bitcoind which are part of Raspiblitz? Can these be updated manually? I sort of fear the standard Raspiblitz update when you have to re-flash SD whicn means re-configuring everything else from scratch. For example, how to I update lnd to 0.6? and I know bitcoin 0.18 is coming soon. Thank you

@bereska
Copy link

bereska commented May 13, 2019

never mind, sorry for wasting your time if any, i figured it all out. lnd 0.6 is indeed more optimized and so it btcpayserver 0.1.3.99.

@normandmickey
Copy link
Author

It's ok. For some reason I don't get notifications for comments on this gist and I don't check it very often. I've been meaning to put this in a script so Raspiblitz users can easily add it from the menu. Updating without starting over would be awesome too.

@bereska
Copy link

bereska commented May 14, 2019

same here, but I got this one though ... anyways your radio silence motivated me to explore it further and now I have manually upgraded my setup to:
bitcoin 0.18
lnd 0.6.1
btcpayserver 1.0.3.99
nbxplorer latest
rtl 0.3.2
also I created backup-channels.service to back up channel.backup to two remote servers
everything is running ok except RTL which webpage is super slow
FYI: @rootzoll actually implemented graceful raspiblitz update from v1.2
my concern is whether rpi will pull it off with bitcoind, lnd, dotnet, btcpayserver, etc onboard once the network grows
what do you think?

@Markalot787
Copy link

Hi all, I want to attempt this without breaking my pi, is this still up to date? this needs to be included into Blitz by default :)

@bereska
Copy link

bereska commented Aug 19, 2019

go for it, mate. Mine is still running

@Markalot787
Copy link

Hey @bereska Thanks for responding, im also setting up a site to sell photos for sats. Make any sells? What else you have on your Pi?

@Markalot787
Copy link

@bereska
Copy link

bereska commented Aug 19, 2019

no problem, mate. my pi3 is pulling it all so far (bitcoind,lnd, btcpayserver, nbxplorer, rtl, .NET), but, yes, pi4 with 4gb will handle it much better. My wife is a photographer so I just used her site for btcpay server and ln payments testing. No sales yet. LOL) i bought a few pictures myself)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment