8 Actualización de los servicios de la Infraestructura
En este apartado recogeremos la actualización de los servicios que componen la infraestructura cashu4community.
8.1 Lightning Network Daemon (LND)
Para realizar cualquier actualización sobre el servicio LND, debe saber que de no tener la frase semilla y el último backup del estado de los canales corre el riesgo de que si falla la actualización por algún error no tendrá forma de restaurar el nodo.
¿Dónde encontramos la frase semilla? La frase semilla la obtuvimos en el tutorial Primeros pasos, y la semilla solo se puede obtener una vez, así que no hay manera de obtenerla nuevamente.
¿Dónde encontramos el respaldo de los canales? Este se guarda por defecto dentro del directorio data del nodo, en nuestra infraestructura se localiza en app-data/lnd/data/chain/bitcoin/mainnet/chan-backup-archives/
listamos el directorio chan-backup-archives/:
ls app-data/lnd/data/chain/bitcoin/mainnet/chan-backup-archives/
Imagen 1: Directorio de respaldo de canales en un LND.
Es importante añadir que deben revisar las notas de lanzamiento de la nueva versión del nodo antes de actualizar, ya que en ocasiones hay que realizar cambios en las configuraciones del nodo para evitar fallas. Ahora sí vamos a ver cómo actualizar.
Nuestro nodo tiene la versión v0.19.3-beta y la vamos actualizar con la última versión v0.20.1-beta, tras revisar las notas de lanzamiento no hay nada que destacar por lo que solo necesitamos modificar el archivo docker-compose.yml
Para actualizar la versión editamos el archivo docker-compose.yml y nos desplazamos hasta el servicio lnd:
nano docker-compose.yml
El servicio lnd estaría compuesto por lo siguiente:
lnd:
image: lightninglabs/lnd:v0.19.3-beta
container_name: lightning-node-1
restart: unless-stopped
ports:
- "9735:9735"
- "10009:10009"
- "8080:8080"
volumes:
- ./app-data/lnd:/root/.lnd
- tor-data:/var/lib/tor:ro
command:
- --configfile=/root/.lnd/lnd.conf
depends_on:
- tor
En la línea image: es donde se declara la versión de la imagen que usará nuestro contenedor, como queremos subir la versión donde dice v0.19.3 ponemos v0.20.1 quedando de la siguiente manera:
lnd:
image: lightninglabs/lnd:v0.20.1-beta
container_name: lightning-node-1
restart: unless-stopped
ports:
- "9735:9735"
- "10009:10009"
- "8080:8080"
volumes:
- ./app-data/lnd:/root/.lnd
- tor-data:/var/lib/tor:ro
command:
- --configfile=/root/.lnd/lnd.conf
depends_on:
- tor
Salvamos y salimos del archivo ctrl+s y ctrl+x
Recreamos el contenedor con el siguiente comando:
docker-compose up --force-recreate lnd -d
Este comando descargará la nueva versión de la imagen, eliminará el contenedor con la versión anterior y lo creará a partir de la nueva imagen descargada.
8.2 Actualizando LNbits
Antes de realizar cambios en la versión de LNbits se recomienda realizar un backup de la base de datos, esto se puede hacer desde la cuenta super usuario de LNbits si no sabes cuál es puedes volver al tutorial de LNbits para saber cuál es.
Tras iniciar sesión en LNbits vamos a los Settings y damos clic en el botón DOWNLOAD DATABASE BACKUP que nos aparece al lado del botón RESTART SERVER
Imagen 2: Respaldo de la Base de Datos.
El archivo zip descargado contiene un volcado de la base de datos, además una copia del directorio data de LNbits que incluye las extensiones y los log de la aplicación.
8.2.1 Respaldando la base de datos desde la cli
Podemos realizar una salva de la base de datos de manera fácil basta con ejecutar el comando:
docker exec -t postgres_lnbits pg_dump -U lnbits_user lnbits_db | gzip > lnbits_backup_$(date +%Y%m%d_%H%M%S).sql.gz
Esto creará el archivo en el directorio actual desde donde se ejecutó el comando.
Ya tenemos la salva, vamos nuevamente al archivo docker-compose.yml y buscamos el servicio lnbits.
nano docker-compose.yml
lnbits:
image: lnbits/lnbits:v1.4.0
container_name: app_lnbits
restart: unless-stopped
volumes:
- ./app-data/lnd/:/app/.lnd/:ro
- ./app-data/lnbits/data/:/app/data
- ./app-data/lnbits/.env:/app/.env
Vemos que la versión de la imagen que estamos usando es la v1.4.0 y hay una nueva versión v1.5.3 en el repositorio github del proyecto, siempre es recomendable ver las notas de lanzamiento de la nueva versión para saber si hay que realizar algún paso extra antes de actualizar.
Cambiamos la versión v1.4.0 por la v1.5.3 en la línea image:
lnbits:
image: lnbits/lnbits:v1.5.3
container_name: app_lnbits
restart: unless-stopped
volumes:
- ./app-data/lnd/:/app/.lnd/:ro
- ./app-data/lnbits/data/:/app/data
- ./app-data/lnbits/.env:/app/.env
Salvamos y salimos del archivo ctrl+s y ctrl+x
Recreamos el contenedor con el siguiente comando:
docker-compose up --force-recreate lnbits -d
Este comando descargará la nueva versión de la imagen, eliminará el contenedor con la versión anterior y lo creará a partir de la nueva imagen descargada.
8.3 Actualizando el Mint de Cashu
Antes de actualizar de versión el mint de cashu debemos realizar una salva de la base de datos de cashu, como es una base de datos sqlite el proceso es más simple solo debemos hacer una copia del archivo mint.sqlite3.
Nos movemos hacia el directorio de cashu localizado en app-data/cashu/
cd app-data/cashu
Creamos un directorio backup en caso de no existir.
mkdir -p backup
Copiamos la base de datos del mint.
cp data/mint/mint.sqlite3 backup/
Luego de salvar la base de datos vamos al archivo docker-compose.yml:
nano docker-compose.yml
cashu:
image: cashubtc/nutshell:0.19.2
container_name: app_cashu
restart: unless-stopped
volumes:
- ./app-data/cashu/.env:/app/.env
- ./app-data/cashu/data:/app/data
- ./app-data/cashu/certs:/app/certs
- ./app-data/cashu/certs/server_private.pem:/app/server_private.pem
- ./app-data/cashu/certs/server_cert.pem:/app/server_cert.pem
- ./app-data/cashu/certs/ca_cert.pem:/app/ca_cert.pem
- ./app-data/cashu/certs/client_cert.pem:/app/client_cert.pem
- ./app-data/cashu/certs/client_private.pem:/app/client_private.pem
- ./app-data/cashu/backup:/app/backup
command: ["poetry", "run", "mint"]
depends_on:
- lnbits
Vamos a migrar de la versión 0.19.2 a la 0.20.0, como hicimos en los anteriores servicios cambiamos la versión en la línea image: quedando de la siguiente manera:
cashu:
image: cashubtc/nutshell:0.20.0
container_name: app_cashu
restart: unless-stopped
volumes:
- ./app-data/cashu/.env:/app/.env
- ./app-data/cashu/data:/app/data
- ./app-data/cashu/certs:/app/certs
- ./app-data/cashu/certs/server_private.pem:/app/server_private.pem
- ./app-data/cashu/certs/server_cert.pem:/app/server_cert.pem
- ./app-data/cashu/certs/ca_cert.pem:/app/ca_cert.pem
- ./app-data/cashu/certs/client_cert.pem:/app/client_cert.pem
- ./app-data/cashu/certs/client_private.pem:/app/client_private.pem
- ./app-data/cashu/backup:/app/backup
command: ["poetry", "run", "mint"]
depends_on:
- lnbits
Salvamos y salimos del archivo ctrl+s y ctrl+x
No olviden realizar un backup de la base de datos consulten las notas de la versión la imagen siguiente muestra un mensaje de aviso informando que hay cambios en la estructura de la base de datos tras la actualización y es necesario realizar una salva para evitar corrupción de datos tras una actualización fallida.
Imagen 3: Mensaje de aviso sobre cambios en la estructura de la base de datos.
Solo nos queda ejecutar el comando:
docker-compose up --force-recreate cashu -d
Que ya sabemos que hace descargar la nueva imagen eliminar el contenedor viejo y crearlo nuevamente con la nueva imagen.
8.4 Resto de los servicios de la infraestructura
Quizás te preguntes por qué no cubrimos el resto de los servicios. La razón es que todos ellos (Tor, Lightning Terminal, Nginx Proxy Manager, Redis, Postgres y Orchard) son soporte de la infraestructura: añaden funcionalidades o permiten gestionar los demás servicios. El procedimiento es siempre el mismo: editar docker-compose.yml y cambiar la versión.
8.5 Solución de problemas
Se irán añadiendo en la medida que la comunidad los vaya reportando.