Primeros Pasos

1. Primeros pasos

1.1 Requerimientos

  • Servidor VPS con sistema operativo Debian/Ubuntu preferiblemente.
  • Docker 26.0+.
  • Docker Compose 2.0+.
  • Dominio DNS válido para publicar los servicios en Internet.

1.2 Esquema de la infraestructura

Imagen 1: Arquitectura de la infraestructura Docker.

Arquitectura de la infraestructura Docker

Descripción: El esquema muestra los contenedores de Docker (Tor, Lightning Network Daemon, Lightning Terminal, LNbits, Postgres, Cashu, Orchard y Nginx Proxy Manager). Las flechas indican la comunicación entre servicios.

1.3 Instalando los requisitos

1.3.1 Instalando Docker y Docker Compose

La mayoría de los VPS proveen acceso directo como usuario root por defecto. Si este es su caso, omita el uso de sudo en todos los comandos. Para confirmar su usuario actual, ejecute:

whoami

Si la salida del comando es root no se requiere sudo delante de los siguientes comandos:

sudo apt update && sudo apt upgrade
# Debian 12+
sudo apt install docker.io docker-compose
# Ubuntu 24.04+
sudo apt install docker.io docker-compose-v2

1.3.2 Agregando nuestro usuario al grupo Docker

Si la salida del comando whoami que ejecutamos anteriormente fue root obviamos este paso, en caso contrario ejecutamos el siguiente comando:

sudo usermod -aG docker $(whoami)

Esto nos permitirá ejecutar el comando docker sin privilegios.

1.3.3 Clonando el repositorio del Proyecto

git clone https://github.com/cashu4community/cashu4cs-deploy.git
cd cashu4cs-deploy
Importante: A partir de ahora todos los comandos se ejecutarán desde el directorio cashu4cs-deploy.

1.4 Configuración inicial

Para poder iniciar la infraestructura se necesita configurar varios parámetros. Se recomienda guardarlos en un documento ya que serán necesarios en las siguientes secciones del tutorial.

1.4.1 Configurando parámetros de Lightning Network Daemon

Cambiando la IP Pública del nodo Lightning

Para obtener la ip pública usaremos el script get_public_ip.sh ubicado en la raíz del directorio cashu4cs-deploy.

./get_public_ip.sh

Esto devuelve una salida como la siguiente:

72.61.27.142

Conociendo esta IP vamos a editar el archivo lnd.conf.

nano app-data/lnd/lnd.conf

Buscamos la línea externalip= y adicionamos la IP obtenida 72.61.27.142.

Imagen 2: Archivo lnd.conf parámetro externalip=.

Archivo lnd.conf parámetro externalip

Salvamos y salimos del archivo ctrl+s y ctrl+x

Cambiando el alias del nodo LND

El alias es útil para poder encontrar el nodo en exploradores de la red lightning cómo mempool.space o amber.space. Para cambiarlo editamos nuevamente el archivo lnd.conf y buscamos la línea alias=, para este tutorial usaremos Cashu4CS como alias del nodo LND.

Imagen 3: Archivo lnd.conf parámetro alias=.

Archivo lnd.conf parámetro alias
Creando la contraseña para la billetera del nodo LND

El proceso de creación de la billetera del nodo LND que veremos mas adelante nos pide una contraseña usada para cifrar la billetera y desbloquearla cada vez que se reinicia el servicio, esta debe ser de al menos 12 carácteres y debe tener combinación de mayúsculas y minúsculas, números y caracteres especiales cómo: Ej *-+. Una vez creada la contraseña la introducimos en el archivo walletunlock ubicado en app-data/lnd/.

Para este tutorial usaremos +6Mn31qVwLC- como contraseña de la billetera.

nano app-data/lnd/walletunlock

Imagen 4: Archivo walletunlock con la contraseña creada anteriormente.

Archivo walletunlock con la contraseña

Salvamos y salimos del archivo ctrl+s y ctrl+x

Nota: El archivo walletunlock nos permitirá desbloquear automáticamente la billetera del nodo tras un reinicio del contenedor Docker. Esta es la razón por la que contiene la contraseña.

1.4.2 Creando la contraseña para el acceso a Lightning Terminal

Para acceder al servicio Lightning Terminal (de ahora en lo adelante LIT) se necesita una contraseña, esta debe tener los mismos requisitos de complejidad que la usada en la billetera LND. Una vez generada la guardamos en el archivo lit.conf ubicado en app-data/lit/.

Creada la contraseña editamos el archivo lit.conf.

nano app-data/lit/lit.conf

Buscamos la línea uipassword= e introducimos la contraseña, usaremos +dFskhU8d35* como ejemplo para el tutorial quedando así:

Imagen 5: Archivo lit.conf con la contraseña creada para acceder a la web de LIT.

Archivo lit.conf con la contraseña

Salvamos y salimos del archivo ctrl+s y ctrl+x

1.4.3 Estableciendo los parámetros de configuración de LNbits

El servicio LNbits necesita la clave AUTH_SECRET_KEY definida en el archivo .env y la contraseña de la base de datos PostgreSQL para funcionar.

Generando la clave AUTH_SECRET_KEY
openssl rand -hex 32

Esto nos devuelve algo como esto:

f92a03c2e12362f092b6589bde08b0433cd08f4ffe9ef894fe8e01660d18054f

Copiamos la clave y editamos el archivo .env ubicado en app-data/lnbits/.

nano app-data/lnbits/.env

Buscamos la linea AUTH_SECRET_KEY y pegamos la clave generada en el paso anterior.

Imagen 6: Archivo .env con la clave AUTH_SECRET_KEY creada anteriormente.

Archivo .env con la clave AUTH_SECRET_KEY

Salvamos y salimos del archivo ctrl+s y ctrl+x

Creando la contraseña de la base de datos PostgreSQL

Ahora necesitamos crear la contraseña que usará LNbits para crear la base de datos PostgreSQL, la introduciremos en el archivo .env que editamos anteriormente y en el archivo docker-compose.yml ubicado en la raíz del directorio cashu4cs-deploy.

Editamos el archivo .env.

nano app-data/lnbits/.env

Buscamos la linea LNBITS_DATABASE_URL="postgres://lnbits_user:dbpassword_@db:5432/lnbits_db" y sustituimos dbpassword_ por nuestra contraseña. Usaremos 3Edf56gh.*FU como ejemplo.

Imagen 7: Variable LNBITS_DATABASE_URL de conexión a la base de datos usando la contraseña generada anteriormente

Variable LNBITS_DATABASE_URL

Salvamos y salimos del archivo ctrl+s y ctrl+x

Ahora editamos el archivo docker-compose.yml.

nano docker-compose.yml

Buscamos el servicio docker db: y editamos en la sección enviroment: la variable POSTGRES_PASSWORD, quedando así:

Imagen 8: Variable POSTGRES_PASSWORD actualizada con la contraseña generada.

Variable POSTGRES_PASSWORD

Salvamos y salimos del archivo ctrl+s y ctrl+x

1.4.4 Estableciendo los parámetros de configuración del Mint de Cashu

Para el buen funcionamiento del Mint de Cashu debemos generar la variable MINT_PRIVATE_KEY= y los certificados ssl usados para cifrar la conexión RPC desde el servicio Orchard hacia el Mint.

Creando la variable MINT_PRIVATE_KEY
openssl rand -hex 32

Esto nos devuelve algo como esto:

cf33ffb9af447b1210e052548f911ba62639a6a653f7066809bacecb7436ea4b

Igual que hicimos con AUTH_SECRET_KEY de LNbits copiamos la clave anterior y editamos el archivo .env ubicado en app-data/cashu/.

nano app-data/cashu/.env

Buscamos la línea MINT_PRIVATE_KEY= y pegamos la clave generada en el paso anterior:

Imagen 9: Variable MINT_PRIVATE_KEY actualizada en el archivo .env.

Variable MINT_PRIVATE_KEY

Salvamos y salimos del archivo ctrl+s y ctrl+x

Generando los certificados ssl para la conexión RPC

Vamos al directorio certs ubicado en app-data/cashu/

cd app-data/cashu/certs

Ejecutamos el script generate_certificates.sh

./generate_certificates.sh

Este script genera todos los certificados necesarios para la conexión RPC, si no ocurrió algún error los certificados se encuentran en este directorio.

ls .
ca_cert.pem  ca_private.pem  client_cert.pem  client_private.pem  generate_certificates.sh  server_cert.pem  server_private.pem

1.4.5 Estableciendo los parámetros de configuración de Orchard

Necesitamos generar la clave SETUP_KEY usada en la inicialización de Orchard.

openssl rand -hex 16

El resultado sería

d5c454540c045373b5bac4a58b0b52e8

Copiamos la clave anterior y editamos el archivo .env ubicado en app-data/orchard/.

nano app-data/orchard/.env

Buscamos la línea SETUP_KEY= y pegamos

Imagen 10: Variable SETUP_KEY actualizada en el archivo .env.

Variable SETUP_KEY

Salvamos y salimos del archivo ctrl+s y ctrl+x

1.5 Gestión de los Servicios

Comando Acción
docker-compose up -d Inicia la infraestructura completa; descarga las imágenes en la primera ejecución.
docker-compose down Detiene todos los servicios de forma controlada y elimina los contenedores
docker-compose up --force-recreate [servicio] -d Reconstruye un contenedor específico tras realizar cambios en su configuración.
docker-compose start [servicio] Inicia el contenedor
docker-compose stop [servicio] Detiene un contenedor

1.5.1 Nombre de los servicios

A continuación se listan los nombres de los servicios de la infraestructura, útil si se quieren ejecutar los comandos de iniciar, parar o reconstruir de la tabla anterior.

  • Financieros: lnd, cashu (Mint), lnbits.
  • Gestión y Red: lit (Lightning Terminal), npm (Proxy Manager), tor, orchard.
  • Persistencia: db (PostgreSQL), redis.

1.6 Iniciando la Infraestructura

Para iniciar la infraestructura ejecutamos:

docker-compose up -d

La primera vez que se ejecuta este comando se descargan las imágenes de docker de los servicios.

Imagen 11: Descarga de las imágenes en el proceso de inicio

Descarga de imágenes

Si el paso anterior ocurrió sin contratiempos ejecutando:

docker ps

Nos muestra los contenedores iniciados

Imagen 12: Listado de contenedores en ejecución

Listado de contenedores