Phoenixd + LNBits: Guida all’installazione di un nodo lightning cloud (non custodial)

Crypto 29 lug 2024

Cos’è Phoenixd

Phoenixd è un demone che può essere eseguito sulla tua infrastruttura e ti fornisce un nodo non custodial (quindi abbiamo noi il possesso delle chiavi private), con gestione della liquidità integrata. Non devi preoccuparti quindi di apertura e/o chiusura canali ed ogni altra “cosa” inerente al nodo.
Trovi maggiori dettagli sul sito web di phoenixd https://phoenix.acinq.co/server/.
In questo tutorial andiamo ad installare il demone di phoenixd ed integreremo LNBits per poter operare direttamente da interfaccia web.

Requisiti:
> VPS;
> Dominio (opzionale per LN address);
> Più o meno 20 minuti del tuo tempo;

Procediamo eseguendo gli step di sicurezza che trovate in questo mio articolo 👉🏻 https://medium.com/@giuxfila/come-rendere-sicuro-il-proprio-server-vps-a3a99c9fb3db

Installazione di phoenixd

Prima di procedere con l’installazione del nodo dobbiamo scarichiamo i pacchetti di unzip e wget, lanciando il comando:

sudo apt-get install -y unzip wget

Procediamo adesso scaricando il demone di phoneixd lanciando il comando:

wget https://github.com/ACINQ/phoenixd/releases/download/v0.3.2/phoenix-0.3.2-linux-x64.zip

(ricordiamoci di scaricare sempre l’ultima versione che troviamo disponibile nella repository ufficiale di phoenixd 👉🏻https://github.com/ACINQ/phoenixd/releases/).

Una volta effettuato il download del file .zip di phoenixd scoppattiamolo con unzip:

unzip phoenix-0.3.2-linux-x64.zip && sudo rm -r phoenix-0.3.2-linux-x64.zip

(il nome del file cambia in base alla versione che avete scaricato).
Con il comando rm -r successivamente andiamo ad eliminare il file .zip;

Effettuati i passaggi di download ed unzip del file ci ritroveremo la directory “phoenix-0.3.1-linux-x64” (sempre specificando che i numeri sono relativi alla versione e quindi potrebbero cambiare nel Vs. caso), ci basterà entrare dentro questa directory:

cd phoenix-0.3.2-linux-x64

e successivamente lanciare il comando

./phoenixd
2024-07-27 10:26:12 datadir: /home/users/.phoenix 
2024-07-27 10:26:12 chain: Mainnet 
2024-07-27 10:26:12 autoLiquidity: 2000000 sat 
2024-07-27 10:26:12 nodeid: STRINGHE_DI_NUMERI 
2024-07-27 10:26:12 offer: STRINGHE_DI_NUMERI 
2024-07-27 10:26:12 connecting to lightning peer... 
2024-07-27 10:26:12 connected to lightning peer 
2024-07-27 10:26:12 listening on http://127.0.0.1:9740 
2024-07-27 10:26:12 fee credit: 0 sat

In questo momento abbiamo avviato correttamente il nostro demone.
Per accertarci che tutto funzioni correttamente apriamo un’altra shell ed avviamo nuovamente la connessione ssh con il nostro server, successivamente dirigiamoci nella cartella di phoenix

cd phoenix-0.3.1-linux-x64 
./phoenix-cli getinfo

Riceverete una risposta così:

./phoenix-cli getinfo 
{ 
    "nodeId": "iltuonodoid", 
    "channels": [ 
    ], 
    "chain": "mainnet", 
    "blockHeight": 854479, 
    "version": "0.3.1-b735020"

Il nostro nodo è perfettamente funzionante e pronto all’uso.

Integrazione con systemd, per avvio automatico

Una volta chiuso, riavviato il nostro VPS dovremmo rilanciare il codice “./phoneixd” per avviare nuovamente il nodo ecc ecc.
Visto e considerato che vogliamo ricevere pagamento h24, senza avere seccature di ogni genere andiamo a creare un servizio che si avvia in AUTOMATICO.
Per prima cosa creiamo un file nella directory di systemd:

sudo nano /etc/systemd/system/phoenixd.service

copiamo questo codice cambiando le voci interessate

[Unit] 
Description=phonenixd 
After=network.target 
 
[Service] 
ExecStart=/home/giuseppe/phoenix-0.3.2-linux-x64/phoenixd --agree-to-terms-of-service 
Restart=always 
User=giuseppe #Cambiare con il proprio user 
 
[Install] 
WantedBy=multi-user.target

A questo punto salviamo il file, CTRL+X e “Y” per confermare, lanciamo questi due comandi per abilitare e far partire il server phoenixd

sudo systemctl enable phoenixd.service 
sudo systemctl start phoenixd.service

RICORDA DI EFFETTUARE UN BACKUP DELLA SEED!

Per effettuare il backup delle nostre 12 (dodici) parole andiamo nella cartella nascosta ./phoenix e visualizziamo la seed.

cat .phoenix/seed.dat

Installazione ed integrazione con LNBits

Lo strumento messo a disposizione da ACINQ, phoenixd è veramente MOLTO potente, perché ci permette di far girare un nodo con 3 comandi, ed avere gestita tutta la parte dei bilanciamenti ed altre millemila “cose” che soprattutto per i newbie possono essere difficili e complesse.
Per rendere il tutto più semplice e gradevole con una WebUI andremo a collegare il nodo di phoenixd precedentemente settato con un’istanza di LNBits.
LNbits può essere definito come un sistema di account per il proprio nodo Lightning Network, con la possibilità di aggiungere moltissime estensioni. Normalmente un nodo Lightning Network può gestire un solo wallet Lightning.

Installazione di LNBits

Per installare LNBits in questa guida utilizzeremo (poetry), per farlo andiamo a scaricare e installare python

sudo apt update 
sudo apt install software-properties-common 
sudo add-apt-repository ppa:deadsnakes/ppa 
sudo apt install python3.9 python3.9-distutils

Una volta confermato ed installato python andiamo ad installare poetry

curl -sSL https://install.python-poetry.org | python3 -

Una volta completata l’installazione di poetry, utilizziamo il percorso di installazione stampato sul terminale e sostituiamolo nel seguente comando:

export PATH="/home/user/.local/bin:$PATH"

Andiamo a copiare il repository di lnbits, successivamente entriamo all’interno della cartella e successivamente cambiamo il contesto di lavoro corrente al branch “main”.

git clone https://github.com/lnbits/lnbits.git 
cd lnbits 
git checkout main

Adesso, dobbiamo verificare la nostra versione di python, lanciamo il comando:

python3 --version

segniamoci la nostra versione e successivamente passiamo al download delle librerie (nel mio caso la versione di python3 è la 3.10.12 cambia il comando in base alla tua versione), prima di procedere con questo comando effettuiamo un nuovo login:

poetry env use python3.10 
poetry install --only main

Successivamente, creiamo una cartella “data” e creiamo un file con tutte le variabili con nome “.env”

mkdir data

Creazione del database con PostgreSQL

Scarichiamo ed installiamo postgresql

sudo apt-get -y install postgresql

Accediamo alla shell dell’utente postgresql e successivamente lanciamo il comando psql

sudo -i -u postgres 
psql

In questa schermata andremo ad aggiungere un nuovo database con una password bella strong!!:

ALTER USER postgres PASSWORD '!UnaPasswordBellaStrong!';

Adesso usciamo

\q

Creiamo il database lnbits e successivamente usciamo

createdb lnbits 
exit

Adesso assicuriamoci di trovarci nella cartella principale di lnbits e creiamo un file .env

nano .env

Copiamo queste configurazioni di base per LNBits:

LNBITS_ADMIN_UI=true 
 
# Change theme 
LNBITS_SITE_TITLE="LNbits" 
LNBITS_SITE_TAGLINE="free and open-source lightning wallet" 
LNBITS_SITE_DESCRIPTION="The world's most powerful suite of bitcoin tools. Run for yourself, for others, or as part of a stack." 
# Choose from bitcoin, mint, flamingo, freedom, salvador, autumn, monochrome, classic, cyber 
LNBITS_THEME_OPTIONS="classic, bitcoin, flamingo, freedom, mint, autumn, monochrome, salvador, cyber" 
# LNBITS_CUSTOM_LOGO="https://lnbits.com/assets/images/logo/logo.svg" 
 
HOST=127.0.0.1 
PORT=5000 
 
###################################### 
########## Funding Source ############ 
###################################### 
 
# which fundingsources are allowed in the admin ui 
LNBITS_ALLOWED_FUNDING_SOURCES="PhoenixdWallet" 
 
LNBITS_BACKEND_WALLET_CLASS=PhoenixdWallet 
 
# PhoenixdWallet 
PHOENIXD_API_ENDPOINT=http://127.0.0.1:9740/ 
PHOENIXD_API_PASSWORD=LAPASSWORDDIPHOENIXD 
 
###################################### 
####### Auth Configurations ########## 
###################################### 
# Secret Key: will default to the hash of the super user. It is strongly recommended that you set your own value. 
AUTH_SECRET_KEY="" 
AUTH_TOKEN_EXPIRE_MINUTES=525600 
# Possible authorization methods: user-id-only, username-password, google-auth, github-auth, keycloak-auth 
AUTH_ALLOWED_METHODS="user-id-only, username-password" 
# Set this flag if HTTP is used for OAuth 
# OAUTHLIB_INSECURE_TRANSPORT="1" 
 
# Google OAuth Config 
# Make sure that the authorized redirect URIs contain https://{domain}/api/v1/auth/google/token 
GOOGLE_CLIENT_ID="" 
GOOGLE_CLIENT_SECRET="" 
 
# GitHub OAuth Config 
# Make sure that the authorization callback URL is set to https://{domain}/api/v1/auth/github/token 
GITHUB_CLIENT_ID="" 
GITHUB_CLIENT_SECRET="" 
 
# Keycloak OAuth Config 
# Make sure that the valid redirect URIs contain https://{domain}/api/v1/auth/keycloak/token 
KEYCLOAK_CLIENT_ID="" 
KEYCLOAK_CLIENT_SECRET="" 
KEYCLOAK_DISCOVERY_URL="" 
 
 
###################################### 
 
# uvicorn variable, uncomment to allow https behind a proxy 
# IMPORTANT: this also needs the webserver to be configured to forward the headers 
# http://docs.lnbits.org/guide/installation.html#running-behind-an-apache2-reverse-proxy-over-https 
# FORWARDED_ALLOW_IPS="*" 
 
# Server security, rate limiting ips, blocked ips, allowed ips 
LNBITS_RATE_LIMIT_NO="200" 
LNBITS_RATE_LIMIT_UNIT="minute" 
LNBITS_ALLOWED_IPS="" 
LNBITS_BLOCKED_IPS="" 
 
# Allow users and admins by user IDs (comma separated list) 
# if set new users will not be able to create accounts 
LNBITS_ALLOWED_USERS="" 
LNBITS_ADMIN_USERS="" 
# ID of the super user. The user ID must exist. 
# SUPER_USER="" 
 
# Extensions only admin can access 
LNBITS_ADMIN_EXTENSIONS="ngrok, admin" 
# Extensions enabled by default when a user is created 
LNBITS_USER_DEFAULT_EXTENSIONS="lnurlp" 
 
# Start LNbits core only. The extensions are not loaded. 
# LNBITS_EXTENSIONS_DEACTIVATE_ALL=true 
 
# Disable account creation for new users 
# LNBITS_ALLOW_NEW_ACCOUNTS=false 
 
# Enable Node Management without activating the LNBITS Admin GUI 
# by setting the following variables to true. 
LNBITS_NODE_UI=false 
LNBITS_PUBLIC_NODE_UI=false 
# Enabling the transactions tab can cause crashes on large Core Lightning nodes. 
LNBITS_NODE_UI_TRANSACTIONS=false 
 
LNBITS_DEFAULT_WALLET_NAME="LNbits wallet" 
 
# Ad space description 
# LNBITS_AD_SPACE_TITLE="Supported by" 
# csv ad space, format "<url>;<img-light>;<img-dark>, <url>;<img-light>;<img-dark>", extensions can choose to honor 
# LNBITS_AD_SPACE="https://shop.lnbits.com/;https://raw.githubusercontent.com/lnbits/lnbits/main/lnbits/static/images/lnbits-shop-light.png;https://raw.githubusercontent.com/lnbits/lnbits/main/lnbits/static/images/lnbits-shop-dark.png" 
# LNBITS_SHOW_HOME_PAGE_ELEMENTS=true # if set to true, the ad space will be displayed on the home page 
# LNBITS_CUSTOM_BADGE="USE WITH CAUTION - LNbits wallet is still in BETA" 
# LNBITS_CUSTOM_BADGE_COLOR="warning" 
 
# Hides wallet api, extensions can choose to honor 
LNBITS_HIDE_API=false 
 
# LNBITS_EXTENSIONS_MANIFESTS="https://raw.githubusercontent.com/lnbits/lnbits-extensions/main/extensions.json,https://raw.githubusercontent.com/lnbits/lnbits-extensions/main/extensions-trial.json" 
# GitHub has rate-limits for its APIs. The limit can be increased specifying a GITHUB_TOKEN 
# LNBITS_EXT_GITHUB_TOKEN=github_pat_xxxxxxxxxxxxxxxxxx 
 
# Path where extensions will be installed (defaults to `./lnbits/`). 
# Inside this directory the `extensions` and `upgrades` sub-directories will be created. 
# LNBITS_EXTENSIONS_PATH="/path/to/some/dir" 
 
# Extensions to be installed by default. If an extension from this list is uninstalled then it will be re-installed on the next restart. 
# The extension must be removed from this list in order to not be re-installed. 
LNBITS_EXTENSIONS_DEFAULT_INSTALL="tpos" 
 
# Database: to use SQLite, specify LNBITS_DATA_FOLDER 
#           to use PostgreSQL, specify LNBITS_DATABASE_URL=postgres://... 
#           to use CockroachDB, specify LNBITS_DATABASE_URL=cockroachdb://... 
# for both PostgreSQL and CockroachDB, you'll need to install 
#   psycopg2 as an additional dependency 
LNBITS_DATA_FOLDER="./data" 
LNBITS_DATABASE_URL="postgres://user:password@host:port/databasename" 
 
# the service fee (in percent) 
LNBITS_SERVICE_FEE=0.0 
# the wallet where fees go to 
# LNBITS_SERVICE_FEE_WALLET= 
# the maximum fee per transaction (in satoshis) 
# LNBITS_SERVICE_FEE_MAX=1000 
# disable fees for internal transactions 
# LNBITS_SERVICE_FEE_IGNORE_INTERNAL=true 
 
# value in millisats 
LNBITS_RESERVE_FEE_MIN=2000 
# value in percent 
LNBITS_RESERVE_FEE_PERCENT=1.0 
 
# limit the maximum balance for each wallet 
# throw an error if the wallet attempts to create a new invoice 
 
# LNBITS_WALLET_LIMIT_MAX_BALANCE=1000000 
# LNBITS_WALLET_LIMIT_DAILY_MAX_WITHDRAW=1000000 
# LNBITS_WALLET_LIMIT_SECS_BETWEEN_TRANS=60 
 
# Limit fiat currencies allowed to see in UI 
# LNBITS_ALLOWED_CURRENCIES="EUR, USD" 
 
###################################### 
###### Logging and Development ####### 
###################################### 
 
DEBUG=false 
DEBUG_DATABASE=false 
BUNDLE_ASSETS=true 
 
# logging into LNBITS_DATA_FOLDER/logs/ 
ENABLE_LOG_TO_FILE=true 
 
# https://loguru.readthedocs.io/en/stable/api/logger.html#file 
LOG_ROTATION="100 MB" 
LOG_RETENTION="3 months" 
 
# for database cleanup commands 
# CLEANUP_WALLETS_DAYS=90

I campi da modificare sono:
PHOENIXD_API_PASSWORD= inseriamo la password che ci ritroviamo nella cartella nascosta .phoenix nella directory principale, sotto la voce http-password:
LNBITS_DATABASE_URL= inseriamo il nome utente e la password del nostro database, seguendo l’esempio di questo tutorial è così, “postgres://postgres:!UnaPasswordBellaStrong!@localhost:5432/lnbits”

nano .phoenix/phoenix.conf

Eseguiamo il comando d’avvio di LNBits, al primo avvio avendo specificato la variabile LNBITS_ADMIN_UI=true dobbiamo creare l’account SuperUser, scegliete una password bella STRONG!

poetry run lnbits --port 5000 --host 0.0.0.0

Collegandoci adesso da INDIRIZZOIP:5000 avremo la nostra istanza LNBits collegata al nodo di phoenixd.

Integrazione con systemd, per avvio automatico

Anche per LNbits come Phoenixd per accedere alla Vs. istanza dovremmo lanciare ogni volta il comando sopra scritto. Quindi andiamo adesso a creare un servizio tramite systemd per avviare lnbits ad ogni avvio del server.
Andiamo a creare un nuovo servizio nella directory di systemd

sudo nano /etc/systemd/system/lnbits.service

copiamo il seguente codice cambiando le variabili:
ExecStart=/home/lnbits/.local/bin/poetry run (cambia la variabile con la directory dove hai scaricato la repo di lnbits)
User=lnbits (cambia la variabile con il tuo nome utente)

[Unit] 
Description=LNbits 
 
[Service] 
WorkingDirectory=/home/lnbits/lnbits 
ExecStart=/home/lnbits/.local/bin/poetry run lnbits --port 5000 --host 0.0.0.0 
User=lnbits 
Restart=always 
TimeoutSec=120 
RestartSec=30 
Environment=PYTHONUNBUFFERED=1 
 
[Install] 
WantedBy=multi-user.target

A questo punto salviamo con CTRL+X e “y” per confermare, successivamente abilitiamo il servizio e avviamolo:

sudo systemctl enable lnbits.service 
sudo systemctl start lnbits.service

A questo punto non ci resta che verificare che tutto funzioni, inviamoci qualche sats ed effettuiamo un pagamento!


Spero che l'articolo sia stato di tuo gradimento, se vuoi altri contenuti simili non esitare a farmelo sapere sul Gruppo Telegram.
Se ti piacciono i miei contenuti e vuoi supportarmi puoi iscriverti alla Newsletter, effettuare una donazione o acquistare attraverso il mio link referral di Amazon, trovi tutti i link qui.
Considera anche l'idea di iscriverti al mio canale delle offerte, lo trovi su WhatsApp e su Telegram.

Tag