Lnbits
liongrass / August 2023 (1278 Words, 8 Minutes)
LNbits
In this optional session, we are going to install LNbits. LNbits is an accounting system with countless useful functionalities. It allows you to “open” your node to others, such as family and friends, who can each have their own custodial wallet, you being the custodian. You can connect your LNbits wallet to Bluewallet or Zeus, and install countless extensions, many of which make use of LNURLs.
Useful resources:
Prerequisites
To make use of LNbits, your server needs to be accessible through an IP address (ideally both IPv4 and IPv6). You will also need a domain name. If you already have a domain name but use it for something else such as your website, you should be able to create a subdomain free of charge and point it at your LNbits installation.
If you don’t have a domain name and always wanted one, you can buy domains with Namecheap with sats. I use Cloudflare for free DNS.
Furthermore, we need to download some additional software:
sudo apt update
sudo apt install software-properties-common
sudo add-apt-repository ppa:deadsnakes/ppa
sudo apt install python3.9 python3.9-distutils
curl -sSL https://install.python-poetry.org | python3 -
export PATH="/home/ubuntu/.local/bin:$PATH"
(Depending on your setup, the last command might look slightly different. The output of the previous command should give you the correct example.)
Download LNbits
We will navigate to our git directory and clone the LNbits repository.
cd ~/git
git clone https://github.com/lnbits/lnbits.git
cd lnbits
git checkout <latest version, e.g. 0.10.9>
Install LNbits
Next, we are going to install LNbits
poetry env use python3.9
poetry install --only main
Configure LNbits
We configure LNbits by first creating a data directory, then copying and editing the default configuration file.
mkdir data
cp .env.example .env
nano .env
Next we will have to find and amend the following four lines in this file:
LNBITS_ADMIN_UI=true
LNBITS_BACKEND_WALLET_CLASS=LndRestWallet
LND_REST_CERT="/home/ubuntu/.lnd/tls.cert"
LND_REST_MACAROON="/home/ubuntu/.lnd/data/chain/bitcoin/mainnet/admin.macaroon"
Run LNbits
We can run LNbits for the first time using simply:
poetry run lnbits
This should give us an indication of whether LNbits is properly set up. We can stop LNbits with Ctrl
+ C
, but for now, we’ll keep it running, and instead open a new terminal shell.
Install the reverse proxy
We are going to use Caddy as the reverse proxy. If you’re experienced in configuring Apache or Nginx, you may also use those. You can find some additional guides here.
sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list
sudo apt update
sudo apt install caddy
As caddy is now installed, it is also running already! We will have to stop caddy to change its configuration.
sudo caddy stop
sudo nano /etc/caddy/Caddyfile
We can use the following configuration file. Make sure to replace lnbits.nodeacademy.org
with your own domain name!
lnbits.nodeacademy.org {
handle /api/v1/payments/sse* {
reverse_proxy 0.0.0.0:5000 {
header_up X-Forwarded-Host lnbits.nodeacdemy.org
transport http {
keepalive off
compression off
}
}
}
reverse_proxy 0.0.0.0:5000 {
header_up X-Forwarded-Host lnbits.nodeacademy.org
}
}
Next, we will have to point the DNS records of this domain to our IP address. We can find our IP address in the admin panel of our VPS provider, e.g. Lunanode.
In our example, the records are 172.81.181.220
(IPv4) and 2602:ffb6:4:c927:f816:3eff:fee5:e984
(IPv6).
We will point the A (IPv4) and AAAA (IPv6) records of our domain to this IP address. Check with your domain registrar or DNS provider.
Finally, we are going to start caddy. We have to make sure to be in the right directory when we do that!
cd ~/git/lnbits
sudo caddy start
If we have configured a firewall (UFW), then we also have to open ports 80 and 443!
sudo ufw allow http
sudo ufw allow https
First steps with LNbits
We will now need to find out what the id is of the admin users. To do that, we will run:
cd ~/git/lnbits
poetry run lnbits-cli superuser
We should see a string of letters. We will navigate to our LNbits installation, e.g. https://lnbits.nodeacademy.org/wallet?usr=stringofletters
. Just substitute your domain and your string with this one. Check on the left if you see the “Admin” option. Under “Manage Server” you can configure your server further. Explore this!
Security notice:
Anyone who has access to this wallet also has access to sensitive data on your server and can fill any wallet on the LNbits server with sats from your node. It is therefore recommended to store the link to the wallet separately in a password manager (not in the browser bookmarks) or similar and only access it through a browser that operates in incognito mode, so that you do not inadvertently share the wallet’s data with other individuals using the same computer/browser.
Now let’s make a regular user. Go to your LNbits installation, such as https://lnbits.nodeacademy.org. Enter a wallet name, such as your name, and click on “Add New Wallet.” Bookmark this wallet!
All extensions need to be first installed by the admin user. Then they can be enabled by each individual user.
To add funds into your wallet, you can use the Admin user. Next to the balance is a +
sign. This lets you change the balance of the admin wallet, from where you can send it out to individual users. Be careful not to “create” more funds than you have in your Lightning node!
Configure LNbits with systemd
First we are going to shut down LNbits, if it’s still running. We can do that with Ctr
+ C
in the window that it’s running.
We are going to create a service file
sudo nano /etc/systemd/system/lnbits.service
Here’s a service file we can use:
[Unit]
Description=LNbits
After=litd.service
Wants=litd.service
[Service]
User=ubuntu
WorkingDirectory=/home/ubuntu/git/lnbits
ExecStart=/home/ubuntu/.local/bin/poetry run lnbits --port 5000
User=ubuntu
Restart=always
TimeoutSec=120
RestartSec=30
Environment=PYTHONUNBUFFERED=1
[Install]
WantedBy=multi-user.target
We’ll save it with Ctrl
+ O
and close the editor with Ctrl
+ X
.
To activate the file, we are going to run:
sudo systemctl enable --now lnbits.service
We should see the following output: Created symlink /etc/systemd/system/multi-user.target.wants/lnbits.service → /etc/systemd/system/lnbits.service.
We can check if its running now with systemctl status lnbits.service
and refresh the wallet we have open in our browser.
Now try restarting the machine and see if everything comes online by itself, including Bitcoin Core, LND and LNbits!
Update LNbits
LNbits regularly releases new updates with patches and new features. To update, first navigate to where you downloaded the LNbits source code.
cd ~/git/lnbits
We will get the latest code and checkout the latest version. Observe the output of the git checkout
command to see which versions are new!
git pull
git checkout 0.11.3
First we will update poetry before we update lnbits itself.
poetry self update
poetry install --only main
The output should look something like this:
Installing dependencies from lock file
Package operations: 1 install, 13 updates, 0 removals
• Installing bitarray (2.8.4)
• Updating exceptiongroup (1.1.3 -> 1.2.0)
• Updating idna (3.4 -> 3.6)
• Updating wrapt (1.15.0 -> 1.16.0)
• Updating bitstring (3.1.9 -> 4.1.4)
• Updating certifi (2023.7.22 -> 2023.11.17)
• Updating charset-normalizer (3.3.0 -> 3.3.2)
• Updating cryptography (41.0.4 -> 41.0.7)
• Updating importlib-resources (6.1.0 -> 6.1.1)
• Updating urllib3 (2.0.6 -> 2.1.0)
• Updating limits (3.6.0 -> 3.7.0)
• Updating outcome (1.2.0 -> 1.3.0.post0)
• Updating pyln-proto (23.5.2 -> 23.11)
• Updating lnurl (0.3.6 -> 0.4.2)
Installing the current project: lnbits (0.11.3)
Finally, we will have to restart LNbits, assuming we have set up systemd as explained above.
sudo systemctl restart lnbits.service
You should now be able to navigate to your LNbits installation and confirm you are running the installed version at the bottom of the screen.