2020-09-03 19:53:22 +02:00
---
layout: default
title: Basic installation
nav_order: 2
---
2021-07-07 10:58:21 +01:00
# Basic installation
2022-07-13 01:15:48 +02:00
2022-07-28 11:19:30 +01:00
You can choose between four package managers, `poetry` , `nix` and `venv` .
2022-07-13 01:15:48 +02:00
By default, LNbits will use SQLite as its database. You can also use PostgreSQL which is recommended for applications with a high load (see guide below).
2022-07-27 15:01:23 +01:00
## Option 1: poetry
2022-07-13 01:15:48 +02:00
2022-07-27 15:01:23 +01:00
```sh
git clone https://github.com/lnbits/lnbits-legend.git
cd lnbits-legend/
2022-08-02 22:02:53 +01:00
# for making sure python 3.9 is installed, skip if installed
2022-08-02 21:59:55 +01:00
sudo apt update
sudo apt install software-properties-common
sudo add-apt-repository ppa:deadsnakes/ppa
2022-08-15 10:22:20 -04:00
sudo apt install python3.9 python3.9-distutils
2022-08-02 21:59:55 +01:00
2022-07-27 15:01:23 +01:00
curl -sSL https://install.python-poetry.org | python3 -
2022-08-02 21:59:55 +01:00
export PATH="/home/ubuntu/.local/bin:$PATH" # or whatever is suggested in the poetry install notes printed to terminal
2022-08-02 21:01:58 +01:00
poetry env use python3.9
2022-08-03 14:10:32 +02:00
poetry install --no-dev
2022-07-27 15:01:23 +01:00
2022-08-04 08:05:51 +02:00
mkdir data
2022-08-02 22:00:55 +01:00
cp .env.example .env
2022-08-02 22:01:09 +01:00
sudo nano .env # set funding source
2022-08-02 21:59:55 +01:00
2022-07-27 15:01:23 +01:00
2022-08-04 08:05:51 +02:00
```
2022-07-27 15:01:23 +01:00
#### Running the server
2022-08-03 14:10:32 +02:00
2022-07-27 15:01:23 +01:00
```sh
poetry run lnbits
# To change port/host pass 'poetry run lnbits --port 9000 --host 0.0.0.0'
```
2022-07-28 11:19:30 +01:00
## Option 2: Nix
2022-07-13 01:15:48 +02:00
```sh
git clone https://github.com/lnbits/lnbits-legend.git
cd lnbits-legend/
2022-07-28 11:19:30 +01:00
# Modern debian distros usually include Nix, however you can install with:
# 'sh <(curl -L https://nixos.org/nix/install) --daemon', or use setup here https://nixos.org/download.html#nix-verify-installation
2022-07-13 01:15:48 +02:00
2022-08-03 14:10:32 +02:00
nix build .#lnbits
2022-07-28 11:19:30 +01:00
mkdir data
2022-07-13 01:15:48 +02:00
2022-07-28 11:19:30 +01:00
```
2022-07-13 01:15:48 +02:00
#### Running the server
2022-07-28 11:19:30 +01:00
2022-07-13 01:15:48 +02:00
```sh
2022-07-28 11:19:30 +01:00
# .env variables are currently passed when running
LNBITS_DATA_FOLDER=data LNBITS_BACKEND_WALLET_CLASS=LNbitsWallet LNBITS_ENDPOINT=https://legend.lnbits.com LNBITS_KEY=7b1a78d6c78f48b09a202f2dcb2d22eb ./result/bin/lnbits --port 9000
2022-07-13 01:15:48 +02:00
```
2022-07-27 15:01:23 +01:00
## Option 3: venv
2022-07-15 08:18:07 +01:00
```sh
git clone https://github.com/lnbits/lnbits-legend.git
cd lnbits-legend/
# ensure you have virtualenv installed, on debian/ubuntu 'apt install python3-venv'
python3 -m venv venv
# If you have problems here, try `sudo apt install -y pkg-config libpq-dev`
./venv/bin/pip install -r requirements.txt
# create the data folder and the .env file
mkdir data & & cp .env.example .env
2022-07-28 15:26:43 +02:00
# build the static files
./venv/bin/python build.py
2022-07-15 08:18:07 +01:00
```
2022-07-31 10:22:29 +01:00
#### Running the server
```sh
./venv/bin/uvicorn lnbits.__main__:app --port 5000
```
2022-08-03 14:10:32 +02:00
If you want to host LNbits on the internet, run with the option `--host 0.0.0.0` .
2022-07-31 10:22:29 +01:00
2022-07-30 17:09:14 +02:00
## Option 4: Docker
```sh
git clone https://github.com/lnbits/lnbits-legend.git
cd lnbits-legend
docker build -t lnbits-legend .
cp .env.example .env
mkdir data
docker run --detach --publish 5000:5000 --name lnbits-legend --volume ${PWD}/.env:/app/.env --volume ${PWD}/data/:/app/data lnbits-legend
```
2022-07-13 01:15:48 +02:00
### Troubleshooting
2022-08-03 14:10:32 +02:00
Problems installing? These commands have helped us install LNbits.
2022-07-13 01:15:48 +02:00
```sh
2022-07-23 10:39:58 +02:00
sudo apt install pkg-config libffi-dev libpq-dev
2022-07-13 01:15:48 +02:00
# if the secp256k1 build fails:
2022-07-28 11:43:31 +01:00
# if you used venv
2022-08-03 14:10:32 +02:00
./venv/bin/pip install setuptools wheel
2022-07-28 11:43:31 +01:00
# if you used poetry
2022-08-03 14:10:32 +02:00
poetry add setuptools wheel
2022-07-13 01:15:48 +02:00
# build essentials for debian/ubuntu
sudo apt install python3-dev gcc build-essential
```
### Optional: PostgreSQL database
If you want to use LNbits at scale, we recommend using PostgreSQL as the backend database. Install Postgres and setup a database for LNbits:
2022-01-27 21:07:47 +01:00
2021-11-12 11:38:07 +00:00
```sh
# on debian/ubuntu 'sudo apt-get -y install postgresql'
# or follow instructions at https://www.postgresql.org/download/linux/
# Postgres doesn't have a default password, so we'll create one.
2021-11-12 11:44:44 +00:00
sudo -i -u postgres
psql
2021-11-12 11:38:07 +00:00
# on psql
ALTER USER postgres PASSWORD 'myPassword'; # choose whatever password you want
\q
2021-11-12 11:44:44 +00:00
# on postgres user
createdb lnbits
2021-11-12 11:38:07 +00:00
exit
```
2020-09-03 19:53:22 +02:00
2022-07-13 01:15:48 +02:00
You need to edit the `.env` file.
2020-09-03 19:53:22 +02:00
```sh
2021-11-12 11:38:07 +00:00
# add the database connection string to .env 'nano .env' LNBITS_DATABASE_URL=
2022-01-14 09:20:20 +00:00
# postgres://<user>:<myPassword>@<host>/<lnbits> - alter line bellow with your user, password and db name
2021-11-12 11:38:07 +00:00
LNBITS_DATABASE_URL="postgres://postgres:postgres@localhost/lnbits "
# save and exit
2020-09-03 19:53:22 +02:00
```
2022-07-13 01:15:48 +02:00
# Using LNbits
2022-08-03 14:10:32 +02:00
Now you can visit your LNbits at http://localhost:5000/.
2020-09-03 19:53:22 +02:00
2022-08-03 14:10:32 +02:00
Now modify the `.env` file with any settings you prefer and add a proper [funding source ](./wallets.md ) by modifying the value of `LNBITS_BACKEND_WALLET_CLASS` and providing the extra information and credentials related to the chosen funding source.
2020-09-03 19:53:22 +02:00
2021-06-21 04:33:29 +02:00
Then you can restart it and it will be using the new settings.
2020-09-03 19:53:22 +02:00
2022-08-03 14:10:32 +02:00
You might also need to install additional packages or perform additional setup steps, depending on the chosen backend. See [the short guide ](./wallets.md ) on each different funding source.
2022-07-13 01:15:48 +02:00
Take a look at [Polar ](https://lightningpolar.com/ ) for an excellent way of spinning up a Lightning Network dev environment.
2021-03-19 12:27:41 +01:00
2021-11-18 11:33:26 +00:00
2022-07-13 01:15:48 +02:00
# Additional guides
2022-07-21 14:01:16 +02:00
## SQLite to PostgreSQL migration
2022-07-13 01:15:48 +02:00
If you already have LNbits installed and running, on an SQLite database, we **highly** recommend you migrate to postgres if you are planning to run LNbits on scale.
There's a script included that can do the migration easy. You should have Postgres already installed and there should be a password for the user (see Postgres install guide above). Additionally, your LNbits instance should run once on postgres to implement the database schema before the migration works:
2022-01-27 21:07:47 +01:00
2021-11-18 11:33:26 +00:00
```sh
# STOP LNbits
# add the database connection string to .env 'nano .env' LNBITS_DATABASE_URL=
# postgres://<user>:<password>@<host>/<database> - alter line bellow with your user, password and db name
LNBITS_DATABASE_URL="postgres://postgres:postgres@localhost/lnbits "
# save and exit
2022-06-02 08:51:02 +02:00
# START LNbits
# STOP LNbits
2022-08-17 15:42:01 +02:00
poetry run python tools/conv.py
# or
make migration
2021-11-18 11:33:26 +00:00
```
Hopefully, everything works and get migrated... Launch LNbits again and check if everything is working properly.
2022-07-21 14:01:16 +02:00
## LNbits as a systemd service
2022-01-27 21:07:47 +01:00
Systemd is great for taking care of your LNbits instance. It will start it on boot and restart it in case it crashes. If you want to run LNbits as a systemd service on your Debian/Ubuntu/Raspbian server, create a file at `/etc/systemd/system/lnbits.service` with the following content:
```
# Systemd unit for lnbits
# /etc/systemd/system/lnbits.service
[Unit]
Description=LNbits
2022-06-01 13:25:37 +02:00
# you can uncomment these lines if you know what you're doing
# it will make sure that lnbits starts after lnd (replace with your own backend service)
2022-08-03 14:10:32 +02:00
#Wants=lnd.service
#After=lnd.service
2022-01-27 21:07:47 +01:00
[Service]
2022-06-01 13:25:37 +02:00
# replace with the absolute path of your lnbits installation
2022-08-17 14:25:19 +02:00
WorkingDirectory=/home/lnbits/lnbits-legend
# same here. run `which poetry` if you can't find the poetry binary
ExecStart=/home/lnbits/.local/bin/poetry run lnbits
2022-06-01 13:25:37 +02:00
# replace with the user that you're running lnbits on
2022-08-17 14:25:19 +02:00
User=lnbits
2022-01-27 21:07:47 +01:00
Restart=always
TimeoutSec=120
RestartSec=30
2022-08-03 14:10:32 +02:00
Environment=PYTHONUNBUFFERED=1
2022-01-27 21:07:47 +01:00
[Install]
WantedBy=multi-user.target
```
Save the file and run the following commands:
```sh
sudo systemctl enable lnbits.service
sudo systemctl start lnbits.service
```
2022-08-13 14:41:23 +02:00
## Running behind an apache2 reverse proxy over https
Install apache2 and enable apache2 mods
```sh
apt-get install apache2 certbot
a2enmod headers ssl proxy proxy-http
```
create a ssl certificate with letsencrypt
```sh
certbot certonly --webroot --agree-tos --text --non-interactive --webroot-path /var/www/html -d lnbits.org
```
create a apache2 vhost at: /etc/apache2/sites-enabled/lnbits.conf
```sh
cat < < EOF > /etc/apache2/sites-enabled/lnbits.conf
< VirtualHost * :443 >
ServerName lnbits.org
SSLEngine On
SSLProxyEngine On
SSLCertificateFile /etc/letsencrypt/live/lnbits.org/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/lnbits.org/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
LogLevel info
ErrorLog /var/log/apache2/lnbits.log
CustomLog /var/log/apache2/lnbits-access.log combined
RequestHeader set "X-Forwarded-Proto" expr=%{REQUEST_SCHEME}
RequestHeader set "X-Forwarded-SSL" expr=%{HTTPS}
ProxyPreserveHost On
ProxyPass / http://localhost:5000/
ProxyPassReverse / http://localhost:5000/
< Proxy * >
Order deny,allow
Allow from all
< / Proxy >
< / VirtualHost >
EOF
```
restart apache2
```sh
service restart apache2
```
2022-07-21 14:01:16 +02:00
## Using https without reverse proxy
2022-08-03 14:10:32 +02:00
The most common way of using LNbits via https is to use a reverse proxy such as Caddy, nginx, or ngriok. However, you can also run LNbits via https without additional software. This is useful for development purposes or if you want to use LNbits in your local network.
2022-07-21 14:01:16 +02:00
We have to create a self-signed certificate using `mkcert` . Note that this certiciate is not "trusted" by most browsers but that's fine (since you know that you have created it) and encryption is always better than clear text.
#### Install mkcert
2022-08-03 14:10:32 +02:00
You can find the install instructions for `mkcert` [here ](https://github.com/FiloSottile/mkcert ).
2022-07-21 14:01:16 +02:00
Install mkcert on Ubuntu:
```sh
sudo apt install libnss3-tools
curl -JLO "https://dl.filippo.io/mkcert/latest?for=linux/amd64"
chmod +x mkcert-v*-linux-amd64
sudo cp mkcert-v*-linux-amd64 /usr/local/bin/mkcert
```
#### Create certificate
2022-08-10 10:32:43 +02:00
To create a certificate, first `cd` into your LNbits folder and execute the following command on Linux:
```sh
openssl req -new -newkey rsa:4096 -x509 -sha256 -days 3650 -nodes -out cert.pem -keyout key.pem
```
2022-08-13 14:41:23 +02:00
This will create two new files (`key.pem` and `cert.pem ` ).
2022-08-10 10:32:43 +02:00
Alternatively, you can use mkcert ([more info ](https://kifarunix.com/how-to-create-self-signed-ssl-certificate-with-mkcert-on-ubuntu-18-04/ )):
2022-07-21 14:01:16 +02:00
```sh
# add your local IP (192.x.x.x) as well if you want to use it in your local network
2022-08-03 14:10:32 +02:00
mkcert localhost 127.0.0.1 ::1
2022-07-21 14:01:16 +02:00
```
2022-08-10 10:32:43 +02:00
You can then pass the certificate files to uvicorn when you start LNbits:
2022-07-21 14:01:16 +02:00
```sh
2022-08-10 10:32:43 +02:00
./venv/bin/uvicorn lnbits.__main__:app --host 0.0.0.0 --port 5000 --ssl-keyfile ./key.pem --ssl-certfile ./cert.pem
2022-07-21 14:01:16 +02:00
```
## LNbits running on Umbrel behind Tor
2021-07-07 10:58:21 +01:00
If you want to run LNbits on your Umbrel but want it to be reached through clearnet, _Uxellodunum_ made an extensive [guide ](https://community.getumbrel.com/t/guide-lnbits-without-tor/604 ) on how to do it.
2022-07-21 14:01:16 +02:00
## Docker installation
2021-03-19 12:27:41 +01:00
To install using docker you first need to build the docker image as:
2021-07-07 10:58:21 +01:00
2021-03-19 12:27:41 +01:00
```
2022-08-04 08:05:51 +02:00
git clone https://github.com/lnbits/lnbits-legend.git
cd lnbits-legend
docker build -t lnbits-legend .
2021-03-19 12:27:41 +01:00
```
You can launch the docker in a different directory, but make sure to copy `.env.example` from lnbits there
2021-07-07 10:58:21 +01:00
2021-03-19 12:27:41 +01:00
```
cp < lnbits_repo > /.env.example .env
```
2021-07-07 10:58:21 +01:00
2021-03-19 12:27:41 +01:00
and change the configuration in `.env` as required.
2022-08-04 08:05:51 +02:00
Then create the data directory
2021-03-19 12:27:41 +01:00
```
mkdir data
```
Then the image can be run as:
2021-07-07 10:58:21 +01:00
2021-03-19 12:27:41 +01:00
```
2022-08-04 08:05:51 +02:00
docker run --detach --publish 5000:5000 --name lnbits-legend -e "LNBITS_BACKEND_WALLET_CLASS='FakeWallet'" --volume ${PWD}/.env:/app/.env --volume ${PWD}/data/:/app/data lnbits-legend
2021-06-19 03:41:30 +02:00
```
2021-07-07 10:58:21 +01:00
2021-06-21 04:33:29 +02:00
Finally you can access your lnbits on your machine at port 5000.