Cómo instalar LNbits y Phoenixd como fuente de financiación en un VPS con Ubuntu

Esta guía te lleva paso a paso a través de la instalación y configuración de LNbits y Phoenixd en un VPS con Ubuntu. LNbits es una billetera y servidor de pagos de código abierto diseñado para gestionar billeteras de la red Lightning de Bitcoin, mientras que Phoenixd es un nodo ligero de la red Lightning creado para la gestión eficiente de la liquidez.

Esta combinación es poderosa para quienes desean mantener la autocustodia de sus fondos en Lightning y manejar pagos fácilmente. Al exponer tu configuración a la clearnet, puedes permitir un acceso más sencillo para clientes o servicios, pero debes asegurarte de tomar medidas de seguridad adecuadas para proteger tus fondos y servidor.

⚠️ Advertencia: esta guía no profundiza en los pasos de seguridad necesarios y no asume responsabilidad alguna por posibles fallos o pérdida de fondos.

Asegúrate de ser prudente. Comienza con fondos pequeños que estés dispuesto a perder. Mantente al tanto de las novedades a través de grupos activos en Telegram para recibir noticias y actualizaciones rápidamente. También, te recomiendo realizar estos pasos con un compañero, para que otro par de ojos revise tu configuración. Por último, ¡las llaves Yubikey y la autenticación en dos pasos (2FA) son tus amigas!

1. Requisitos

Para esta guía, necesitas:

Valor x valor⚡️

Si el contenido te ha sido útil, por favor considera apoyarme para que pueda crear más artículos como este.

  • Algunos conocimientos básicos de comandos en Linux
  • Un Servidor Privado Virtual (VPS). Puedes obtener uno en Lunanode o DigitalOcean (con $200 de crédito gratis por 60 días)
  • Un dominio (o sub-dominio)

2. Configurar el VPS

Para configurar tu servidor Ubuntu VPS, consulta esta guía:

3. Agregar Phoenixd

Phoenixd es un nodo Lightning minimalista, especializado para que desarrolladores y empresas envíen y reciban pagos Lightning fácilmente. Funciona en un servidor, utiliza una API HTTP y cuenta con gestión automática de liquidez, lo que lo hace ideal para casos como pagos de comerciantes y crowdfunding.

Phoenixd simplifica las interacciones con la red Lightning manteniendo la autocustodia, sin necesidad de gestión de canales o pares. Tras la configuración, genera una frase de recuperación de 12 palabras para asegurar los fondos.

3.1 Instalar Phoenixd:

# Create directory
$ mkdir phoenixd
$ cd phoenixd

# Install
$ wget https://github.com/ACINQ/phoenixd/releases/download/v0.3.3/phoenix-0.3.3-linux-x64.zip
$ unzip -j phoenix-0.3.3-linux-x64.zip

# Run the daemon: that's it!
$ ./phoenixd

3.2 Hacer una copia de seguridad de tu semilla

Después de la instalación y la primera ejecución, asegúrate de hacer una copia de seguridad de la semilla o podrías perder tus fondos. Almacénala de forma segura fuera de línea.

cat ~/.phoenix/seed.dat

3.3 Crear y ejecutar el servicio Phoenixd

Ejecutar Phoenixd como un servicio del sistema garantiza que se inicie automáticamente con tu servidor y sea gestionado adecuadamente por el sistema, mejorando la confiabilidad al habilitar reinicios automáticos en caso de fallos o reinicios. Esto asegura que Phoenixd esté siempre disponible para manejar transacciones Lightning sin intervención manual.

Crea un nuevo archivo para el servicio:

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

Agrega el siguiente contenido:

[Unit]
Description=phoenixd
After=network.target

[Service]
ExecStart=/home/<your-user>/phoenixd/phoenixd
WorkingDirectory=/home/<your-user>/phoenixd
User=<your-user>
Restart=always
TimeoutSec=120
RestartSec=30

[Install]
WantedBy=multi-user.target

Ejecuta el servicio:

sudo systemctl daemon-reload
sudo systemctl start phoenixd
sudo systemctl enable phoenixd

4. Agregar LNbits

LNbits es un servidor de pagos y billetera ligero y de código abierto diseñado para trabajar con la red Lightning de Bitcoin. Proporciona una plataforma flexible y extensible para desarrolladores y empresas para crear y gestionar múltiples billeteras Lightning, manejar micropagos y construir aplicaciones o servicios personalizados.

LNbits ofrece una arquitectura modular con varios complementos que añaden características como sistemas de punto de venta, servicios de propinas y paywalls. Está diseñado para facilitar las interacciones con la red Lightning manteniendo los beneficios de la autocustodia.

4.1 Instalar LNbits:

Para instalar LNbits, consulta: https://docs.lnbits.org/guide/installation.html. A continuación, describo cómo lo instalé usando Poetry y SQLite.

Es recomendable usar la última versión de Poetry. Asegúrate de tener Python 3.9 o superior instalado.

Verifica la versión de Python:

python3 --version

Instala Poetry:

curl -sSL https://install.python-poetry.org | python3 -
# Once the above poetry install is completed, use the installation path printed to terminal and replace in the following command

export PATH="/home/<your-user>/.local/bin:$PATH"
git clone https://github.com/lnbits/lnbits.git
cd lnbits
git checkout main

poetry install --only main

cp .env.example .env

Ejecuta LNbits:

poetry run lnbits
# To change port/host pass 'poetry run lnbits --port 9000 --host 0.0.0.0'
# adding --debug in the start-up command above to help your troubleshooting and generate a more verbose output
# Note that you have to add the line DEBUG=true in your .env file, too.

4.2 Crear y ejecutar el servicio LNbits

Configurar LNbits como un servicio ofrece los mismos beneficios que Phoenixd. Iniciará automáticamente con tu VPS, se recuperará de fallos y mantendrá la operatividad, permitiendo la gestión continua de la billetera y los pagos.

Crea un nuevo archivo para el servicio:

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

Agrega el siguiente contenido:

[Unit]
Description=LNbits
# you can uncomment these lines if you know what you're doing
# it will make sure that lnbits starts after phoenixd (replace with your own backend service)
Wants=phoenixd.service
After=phoenixd.service

[Service]
# replace with the absolute path of your lnbits installation
WorkingDirectory=/home/<your-user>/lnbits
# same here. run `which poetry` if you can't find the poetry binary
ExecStart=/home/<your-user>/.local/bin/poetry run lnbits
# replace with the user that you're running lnbits on
User=<your-user>
Restart=always
TimeoutSec=120
RestartSec=30
Environment=PYTHONUNBUFFERED=1

[Install]
WantedBy=multi-user.target

Ejecuta el servicio:

sudo systemctl daemon-reload
sudo systemctl start lnbits
sudo systemctl enable lnbits

4.3 Configurar Nginx

Configurar Nginx como un proxy inverso gestiona el tráfico web y lo enruta a tu servidor LNbits que se ejecuta localmente en tu VPS. Agregar cifrado SSL con un certificado de Let’s Encrypt asegura que cualquier dato transferido entre los usuarios y el servidor esté protegido, lo cual es crucial al exponer servicios a la clearnet.

ℹ️ Antes de configurar Nginx, debes apuntar tu dominio al servidor VPS.

👇 Reemplaza your-domain.com con tu dominio real.

Instala Nginx:

apt-get install nginx certbot

Crea un certificado SSL con Let’s Encrypt:

certbot certonly --nginx --agree-tos -d your-domain.com

Crea un archivo de configuración en /etc/nginx/sites-enabled/your-domain.com:

cat <<EOF > /etc/nginx/sites-enabled/your-domain.com
server {
    server_name your-domain.com;

    location / {
        proxy_pass http://127.0.0.1:5000;
    }

    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-Host $host;
    proxy_set_header X-Forwarded-Proto $scheme;

    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_pass_request_headers on;

    # WebSocket support
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "Upgrade";

    listen [::]:443 ssl;
    listen 443 ssl;
    ssl_certificate /etc/letsencrypt/live/your-domain.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/your-domain.com/privkey.pem;
    include /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
}
EOF

Reinicia nginx:

service restart nginx

4.4 Configuración inicial de LNbits

Aquí activaremos la interfaz de administración (Admin UI) dentro de LNbits para tener una interfaz gráfica cómoda de gestionar. El primer paso es activar la interfaz de administración:

$ sudo systemctl stop lnbits.service
$ cd ~/lnbits
$ sudo nano .env

Establece:

LNBITS_ADMIN_UI=true

Ahora inicia LNbits una vez desde la terminal:

$ poetry run lnbits

Después de esto, puedes obtener el ID de superusuario:

$ cat data/.super_user
123de4bfdddddbbeb48c8bc8382fe123

Puedes acceder a tu cuenta de superusuario en your-domain.com/wallet?usr=super_user_id.

Una vez que hayas accedido, encontrarás la sección Server bajo la sección Manage.

Aquí puedes diseñar la interfaz, que incluye una opción de TOPUP para rellenar las billeteras, y puedes restringir los derechos de acceso a las extensiones solo para administradores o desactivarlas para todos. También puedes hacer que los usuarios sean administradores o configurar Allowed Users si deseas restringir el acceso. Además, tienes las configuraciones clásicas del archivo .env, como cambiar la fuente de financiamiento de la billetera o establecer una tarifa de cargo.

Después de completar la configuración, no olvides iniciar el servicio nuevamente:

sudo systemctl start lnbits.service

4.5 Agregar Phoenixd como fuente de financiamiento

Ve a Server / Funding / Funding Sources y selecciona Phoenixd. Completa con los siguientes datos:

  • Endpoint: http://127.0.0.1:9740
  • Key: tu contraseña de API de Phoenixd (http-password) obtenida desde:
cat ~/.phoenix/phoenix.conf

Guarda los cambios y reinicia el servidor.

5. Abre tu primer canal en Phoenixd para comenzar a recibir pagos

Por favor lee:

Nota: en las versiones más nuevas de Phoenixd, habrá un comando para verificar las tarifas antes de abrir un canal: /getfees --2M.

En Phoenixd, los primeros pagos se utilizan para las tarifas de servicio/minado del auto-liquidez, y no se abre ningún canal hasta que estas tarifas se hayan pagado.

Sigue estos pasos para abrir un canal de 2 millones de satoshis:

  1. Entra a la cuenta de superusuario de LNbits.
  2. Crea una factura de 30.000 satoshis (ajusta el monto según lo indicado en la documentación de auto-liquidez).
  3. Paga la factura con una billetera externa.
  4. Usa la línea de comandos de Phoenixd para verificar si el canal está abierto con /listchannels o /getinfo.
# Check if channel is opened
$ ./phoenix-cli getinfo

{
    "nodeId": "...",
    "channels": [
        {
            "state": "Normal",
            "channelId": "...",
            "balanceSat": 7074,
            "inboundLiquiditySat": 2011465,
            "capacitySat": 2022294,
            "fundingTxId": "..."
        }
    ],
    "chain": "mainnet",
    "blockHeight": 858977,
    "version": "0.3.3-4e805ad"
}

La capacidad del canal es de 2.022.294 satoshis, y las tarifas de apertura fueron de 30.000 – 7.074 = 22.926 satoshis con el mempool a 6 sat/vB.

5.1 Desactivar la función de auto-liquidez en Phoenixd

Después de abrir con éxito el primer canal de 2 millones de satoshis, desactivaremos la función de auto-liquidez para evitar aperturas de nuevos canales/tarifas.

Edita el archivo phoenix.conf y agrega auto-liquidity=off:

$ nano ~/.phoenix/phoenix.conf

# Add auto-liquidity setting to off
auto-liquidity=off
http-password=...
http-password-limited-access=...
webhook-secret=...

Reinicia el servicio:

sudo systemctl restart phoenixd

6. Crea una cuenta de usuario regular y comienza a usar LNbits

En este punto, tu canal con Phoenixd está activo. Se recomienda encarecidamente que crees una cuenta de usuario regular en lugar de seguir utilizando la cuenta de superadministrador para las operaciones diarias. De este modo, podrás empezar a utilizar LNbits para recibir pagos, conectar dispositivos y explorar sus funciones sin comprometer la seguridad de tu acceso administrativo.

Para crear una cuenta de usuario regular:

  1. Cierra sesión en tu cuenta de superadministrador.
  2. Visita tu instancia de LNbits (por ejemplo, your-domain.com).
  3. Regístrate como nuevo usuario y crea tu billetera.
  4. Comienza a recibir pagos, configurar extensiones y conectar dispositivos.

7. Verifica los servicios en ejecución

Crea un script para verificar los servicios en ejecución:

nano ~/check_services.sh

Agrega el siguiente contenido:

#!/bin/bash
if systemctl is-active --quiet phoenixd; then
    echo "phoenixd is running."
else
    echo "phoenixd is not running."
fi

if systemctl is-active --quiet lnbits; then
    echo "LNbits is running."
else
    echo "LNbits is not running."
fi

if systemctl is-active --quiet nginx; then
    echo "Nginx is running."
else
    echo "Nginx is not running."
fi

Haz que el script sea ejecutable y ejecútalo:

chmod +x ~/check_services.sh
~/check_services.sh

8. Copias de seguridad

Es importante hacer copias de seguridad de tu servidor. En este caso, estamos usando LNbits con la base de datos predeterminada SQLite. Si usas PostgreSQL, también debes hacer una copia de seguridad allí.

Para hacer una copia de seguridad de LNbits, copia la carpeta ~/lnbits/data.

Para hacer una copia de seguridad de Phoenixd, copia los archivos dentro de ~/.phoenix, dejando seed.dat fuera de la copia de seguridad. Este archivo es muy sensible y debe ser asegurado de otra manera, ya que incluye el acceso a tus fondos.

9. Mantener y actualizar tu servidor

9.1 Actualizar el servidor Ubuntu

Cuando inicies sesión en tu VPS, verás en la ventana de la terminal si hay nuevas actualizaciones disponibles para Ubuntu. Para realizar las actualizaciones, ejecuta:

sudo systemctl stop lnbits.service
sudo systemctl stop phoenixd.service
sudo su -
apt update && apt upgrade -y
reboot

9.2 Actualizar Phoenixd

Simplemente reemplaza el binario y reinicia el demonio. Phoenixd hereda la misma simplicidad que la versión móvil, por lo que las actualizaciones son completamente transparentes.

9.3 Actualizar LNbits

Detén LNbits y realiza la actualización:

sudo systemctl stop lnbits.service
cd ~/lnbits
git pull
poetry self update
poetry install --only main

Reinicia LNbits y chequea los registros:

sudo systemctl start lnbits.service
sudo journalctl -u lnbits -f --since "2 hour ago"

Verifica si tu servidor LNbits se inició correctamente revisando los registros (journal) y la página web.

Posibilidades para verificar la versión

Si la actualización fue exitosa, puedes ver la versión de LNbits en el sitio web, en la parte inferior izquierda, donde aparecerá algo como:

LNbits version: 0.12.9

Puedes verificar qué “versión” está activa ejecutando el comando:

$ git show

Esto devolverá algo como Merge pull request #1234 ..., lo que indica el número del último pull request que fue fusionado. Si ahora vas a la página de GitHub de LNbits, podrás ver cuál fue el último pull request fusionado. Esto es una buena manera de saber cuán desactualizado podrías estar. Para salir de «git show», presiona la tecla q.

¿Se añadieron nuevas funciones? Revisa el archivo .env

Con una actualización solo se actualiza el código de LNbits, pero no tu base de datos ni el archivo de configuración .env. Si hubo cambios o extensiones, debes verificarlos manualmente o usar el archivo .env.example como plantilla para recrear el archivo .env. Puedes comparar el contenido abriendo el archivo .env con:

$ sudo nano ~/lnbits/.env

Y comparándolo con el estado más reciente del archivo .env.example en GitHub.

Después de realizar cualquier cambio en el archivo .env, reinicia LNbits con:

sudo systemctl restart lnbits.service

10. Advertencia de seguridad

Esta guía se enfoca en los aspectos técnicos de la configuración de LNbits y Phoenixd, pero no profundiza en las medidas de seguridad necesarias. Eres responsable de asegurar que tu configuración sea segura. Para proteger tus fondos y servidor, sigue estas pautas importantes:

  • Usa contraseñas seguras: asegúrate de que todos los usuarios del sistema y los servicios (como LNbits y Phoenixd) usen contraseñas fuertes y únicas. Considera usar un gestor de contraseñas para almacenarlas de manera segura.
  • Habilita la autenticación de dos factores (2FA): usa 2FA siempre que sea posible para asegurar el acceso a tu servidor y a servicios como LNbits. Las llaves Yubikey o aplicaciones como Google Authenticator pueden agregar una capa adicional de protección.
  • Configura un cortafuegos (UFW): instala y configura un cortafuegos, como ufw (Uncomplicated Firewall), para restringir el tráfico entrante y saliente solo a los servicios necesarios. Esto puede prevenir accesos no deseados a tu servidor.
  • Monitorea los registros regularmente: mantén un ojo en los registros de tu servidor (por ejemplo, Nginx, LNbits, Phoenixd) para detectar cualquier actividad sospechosa o errores inesperados. Esto te ayudará a detectar posibles brechas de seguridad de manera temprana.
  • Mantén tu servidor y software actualizados: actualiza regularmente tu sistema Ubuntu y el software instalado (LNbits, Phoenixd, Nginx, etc.) para asegurarte de estar protegido contra las últimas vulnerabilidades.
  • Utiliza SSL (HTTPS): asegúrate de que tu servidor solo sea accesible a través de HTTPS, con un certificado SSL válido. Esto encripta la comunicación entre los usuarios y tu servidor, evitando que datos sensibles como credenciales de billeteras sean interceptados.
  • Realiza copias de seguridad regularmente: haz copias de seguridad de la base de datos de LNbits y de la configuración de Phoenixd (excluyendo los archivos de semilla). Asegúrate de que tus ubicaciones de copia de seguridad sean seguras y que tengas copias de seguridad fuera de línea para datos críticos como la semilla de Phoenixd.
  • Monitorea los desarrollos de seguridad: mantente al tanto de los desarrollos de seguridad en los ecosistemas de Lightning y Bitcoin uniéndote a grupos de Telegram o foros. De esta manera, serás alertado sobre vulnerabilidades, buenas prácticas o nuevas herramientas.

11. Documentación adicional y fuentes

Documentación

Guías

Publicaciones Similares

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *