Migrando la Infraestructura a otro VPS

Puede que en algún momento necesitemos mover a infraestructura hacia otro proveedor de servicios o simplemente el VPS contratado está a punto de expirar y sea preferible adquirir uno nuevo. Llegado el momento el proceso de migrar es muy fácil.

1. Detener la Infraestructura

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

cd cashu4cs-deploy/
docker-compose stop

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

2. Salvar directorio cashu4cs-deploy

Usaremos el comando tar zcvf para realizar un backup 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 la operación anterior 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 puede olvidar que el VPS destino debe tener los requisitos necesarios para la infraestructura que se vio en lo primeros pasos.

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

Ejecutamos el siguiente comando:

scp cashu4cs-deploy.tar.gz root@<ip nuevo vps>:/root/

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

ssh root@<ip nuevo vps>
# Luego de conectarnos descomprimimos el archivo
tar zxvf cashu4cs-deploy.tar.gz
# No movemos al directorio
cd cashu4cs-deploy/

Te preguntarás porque 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 archivo lnd.conf específicamente externalip.

Y como obtenemos la IP del nuevo VPS, muy fácil, podemos encontrarla en el panel del proveedor de servicio VPS 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 si podemos pasar al siguiente paso.

4. Iniciar la infraestructura

Ejecutamos lo siguiente:

docker-compose up -d

Ya en este punto se descargan nuevamente las imágenes y se construyen los contenedores con la información que ya tenian por lo que tendriamos en minutos la infraestructura operativa nuevamente. Si no falla el proceso, podemos comprobar 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