Migrando la Infraestructura a otro VPS

9. Migrando la Infraestructura a otro VPS

En este capítulo describimos el proceso para migrar la infraestructura completa a un nuevo VPS. El proceso es sencillo: detenemos los servicios, comprimimos el directorio de datos, lo copiamos al nuevo servidor y lo levantamos de nuevo.

Puede que en algún momento necesitemos mover la infraestructura hacia otro proveedor de servicios, o simplemente el VPS contratado está a punto de expirar y sea preferible adquirir uno nuevo.

9.1 Detener la Infraestructura

Siempre debemos avisar con tiempo cuando realicemos tareas de este tipo, para evitar que los usuarios se queden a medias en una operación.

cd cashu4cs-deploy/
docker-compose stop

Hasta aquí ya tenemos la infraestructura detenida y nadie podrá usar los servicios.

9.2 Respaldar el directorio cashu4cs-deploy

Usaremos el comando tar zcvf para crear un respaldo comprimido.

tar zcvf cashu4cs-deploy.tar.gz cashu4cs-deploy/
cashu4cs-deploy/
cashu4cs-deploy/get_public_ip.sh
cashu4cs-deploy/.git/
cashu4cs-deploy/.git/logs/
cashu4cs-deploy/.git/logs/HEAD
cashu4cs-deploy/.git/logs/refs/
cashu4cs-deploy/.git/logs/refs/remotes/
cashu4cs-deploy/.git/logs/refs/remotes/origin/
cashu4cs-deploy/.git/logs/refs/remotes/origin/HEAD
cashu4cs-deploy/.git/logs/refs/heads/
cashu4cs-deploy/.git/logs/refs/heads/main
....
....
....
cashu4cs-deploy/app-data/lnbits/db/
cashu4cs-deploy/app-data/cashu/
cashu4cs-deploy/app-data/cashu/.env
cashu4cs-deploy/app-data/cashu/certs/
cashu4cs-deploy/app-data/cashu/certs/client_cert.pem
cashu4cs-deploy/app-data/cashu/certs/ca_private.pem
cashu4cs-deploy/app-data/cashu/certs/generate_certificates.sh
cashu4cs-deploy/app-data/cashu/certs/server_private.pem
cashu4cs-deploy/app-data/cashu/certs/server_cert.pem
cashu4cs-deploy/app-data/cashu/certs/client_private.pem
cashu4cs-deploy/app-data/cashu/certs/ca_cert.pem
cashu4cs-deploy/recreate.sh

Si terminó correctamente, listamos el contenido del directorio.

ls .
cashu4cs-deploy cashu4cs-deploy.tar.gz

Ese archivo comprimido es toda nuestra infraestructura, la cual podremos copiar en el nuevo VPS.

Importante: No debemos olvidar que el VPS destino debe tener los requisitos necesarios para la infraestructura que se vio en los primeros pasos.

9.3 Copiar y descomprimir cashu4cs-deploy.tar.gz en el nuevo VPS

Ejecutamos el siguiente comando:

scp cashu4cs-deploy.tar.gz root@<IP del nuevo VPS>:/root/

Si terminó la copia correctamente, pasamos a conectarnos al servidor.

ssh root@<IP del nuevo VPS>
# Luego de conectarnos descomprimimos el archivo
tar zxvf cashu4cs-deploy.tar.gz
# Nos movemos al directorio
cd cashu4cs-deploy/

Es posible que nos preguntemos por qué no iniciamos todo desde el paso anterior, y es que aquí hay un detalle: el nuevo VPS tiene una IP distinta, por lo que hay que actualizar los registros DNS de nuestro dominio y el parámetro externalip en el archivo lnd.conf.

¿Y cómo obtenemos la IP del nuevo VPS? Podemos encontrarla en el panel del proveedor o usando el siguiente script:

./get_public_ip.sh
12.45.128.56

En el ejemplo, la IP obtenida es 12.45.128.56; esa es la que debemos actualizar en el parámetro externalip y en los registros DNS. Ahora sí podemos pasar al siguiente paso.

9.4 Iniciar la infraestructura

Ejecutamos lo siguiente:

docker-compose up -d

En este punto se descargan nuevamente las imágenes y se construyen los contenedores con la información que ya tenían, por lo que tendríamos la infraestructura operativa en minutos. Si no falla el proceso, podemos comprobarlo con el siguiente comando:

docker ps
CONTAINER ID   IMAGE                                              COMMAND                  CREATED         STATUS                  PORTS                                                                                                                                       NAMES
c0ec55b00d9c   lnbits/lnbits:v1.5.3                               "sh -c 'uv run lnbit…"   30 seconds ago   Up 30 seconds            5000/tcp                                                                                                                                    app_lnbits
86eada0916e5   jc21/nginx-proxy-manager:latest                    "/init"                  30 seconds ago    Up 30 seconds            0.0.0.0:80->80/tcp, [::]:80->80/tcp, 0.0.0.0:443->443/tcp, [::]:443->443/tcp, 81/tcp                                                        nginx_proxy_manager
fb888e103a82   ghcr.io/orangeshyguy21/orchard-mintdb-sqlite:1.5   "docker-entrypoint.s…"   30 seconds ago   Up 30 seconds             3321/tcp                                                                                                                                    app_orchard
5ff40c0146ab   lightninglabs/lightning-terminal:v0.16.1-alpha     "litd --configfile=/…"   30 seconds ago   Up 30 seconds             8443/tcp, 9735/tcp, 10009/tcp                                                                                                               lightning_terminal
aa7146e0961d   cashubtc/nutshell:0.20.0                           "poetry run mint"        30 seconds ago   Up 30seconds                                                                                                                                                        app_cashu
a538285ac7bd   lightninglabs/lnd:v0.20.1-beta                     "lnd --configfile=/r…"   30 seconds ago   Up 30 seconds             0.0.0.0:8080->8080/tcp, [::]:8080->8080/tcp, 0.0.0.0:9735->9735/tcp, [::]:9735->9735/tcp, 0.0.0.0:10009->10009/tcp, [::]:10009->10009/tcp   nodo_lnd
da4838d5f798   postgres:14.18-bookworm                            "docker-entrypoint.s…"   30 seconds ago   Up 30 seconds             5432/tcp                                                                                                                                    postgres_lnbits
e20eecdc0df8   redis:8.4.0                                        "docker-entrypoint.s…"   30 seconds ago   Up 30 seconds             6379/tcp                                                                                                                                    redis
7de5f6d082cf   dockurr/tor                                        "tor"                    30 seconds ago   Up 30 seconds (healthy)   9050-9051/tcp                                                                                                                               proxy_tor