• 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Trasladando docker de Joplin con su bbdd postgresql
#1
Hola

En este post vamos a tratar de describir como hacer una copia o mover un docker de Joplin que usa como BBDD una postgresql desde una QNAP a otra máquina.

Para ello nos apoyaremos en el gestor de BBDD PgAdmin

Los pasos a realizar serán los siguientes:
1-detenemos el docker de Joplin
2-instalacion del docker de postgresql en la máquina nueva
3_1-instalación del docker de PgAdmin en la máquina nueva (opcion 1)
3_2-agregar servidor postgresql de máquina original en PgAdmin de máquina nueva (opcion 1)
4-1-agregar servidor postgresql de máquina nueva en PgAdmin de máquina original (opcion 2)
5-copia de seguridad de la BBDD usando PgAdmin
6-restauración de la BBDD en el nuevo postgresql usando PgAdmin
7-instalación del docker de Joplin en la nueva máquina apuntando a la BBDD restaurada
8-modificaciones de redirecciones en el router o proxy  inverso 


1-detenemos el docker de Joplin

Este punto es importante ya que podemos tener algún cliente externo haciendo modificaciones a los datos de Joplin y por tanto haciéndolos en la BBDD.
La detención la podemos hacer con algun gestor de dockers tipo Portainer,  el bot de Telegram para controlarlos o hacerlo mediante la consola de comandos.

En el siguiente comando de ejemplo el docker de Joplin se llama "joplin" (muy original  Wink )
Code:
docker stop joplin

   



2-instalacion del docker de postgresql en la máquina nueva

Aquí no hay mucho misterio, sólo hemos de lanzar el siguiente comando si fuese de QNAP
Code:
docker run -d --name="postgresql" --restart always -p 5432:5432-e POSTGRES_USER=usuario_admin -e POSTGRES_PASSWORD=clave_usuario -e POSTGRES_DB=postgresql_db -v /share/DockerData/postgresql:/var/lib/postgresql/data postgres:13.8

Como voy a hacerlo en un Terramaster, el código será similar a este otro
Code:
docker run -d --name="postgresql" --restart always -p 5432:5432-e POSTGRES_USER=usuario_admin -e POSTGRES_PASSWORD=clave_usuario -e POSTGRES_DB=postgresql_db -v /Volume1/DockerData/postgresql:/var/lib/postgresql/data postgres:13.8

También nos puede ser interesante indicar la ip del docker si sabemos el rango que va a tener. Esto se haría añadiendo algo como "--ip 10.10.30.2"

En el caso del comando anterior, no hemos puesto como versión de postgresql la "latest" y es que hemos obligado la versión del postgresql a 13.8, pero podemos usar otras, pero hemos de asegurarnos que la versión del docker de Joplin es compatible con la versión de postgresql que instalemos.

También hemos de leer la documentación del docker si usamos otras versiones ya que es posible que nos pida definir otras variables a la hora de crearlo.


3_1-instalación del docker de PgAdmin en la máquina nueva (opcion 1)

Este paso es opcional ya que NO tenemos porque instalar otro PgAdmin en la máquina nueva puesto que ya tenemos uno en la vieja. 
Podemos usar el PgAdmin de la Qnap para gestionar postgresql de otras máquinas de nuestra red.

He puesto este paso ya que creo interesante que si estamos moviendo dockers y BBDD de postgresql a una nueva máquina, es que la vieja va a ser retirada en algún modo y con este paso ya tenemos un nuevo PgAdmin operativo para futuros usos.

Para el despliegue del nuevo docker de PgAdmin usaremos este comando en una Qnap o en una Terramaster (es el mismo  Big Grin )
Code:
docker run -d  -p 9158:80 -p 9157:443 --restart always --name="pgadmin4" -e PGADMIN_DEFAULT_EMAIL=mi_correo_electronico -e PGADMIN_DEFAULT_PASSWORD=clave  dpage/pgadmin4:9.14.0

Los puertos 9158 y 9157 pueden ser otros de nuestra elección.


3_2-agregar servidor postgresql de máquina original en PgAdmin de máquina nueva (opcion 1)

Aquí tras identificarnos en el PgAdmin, hemos de agregar un nuevo servidor de postgresql en su lista.
Para hacerlo podemos hacerlo pulsando sobre cualquiera de las dos opciones de la siguiente imagen
   

Se nos presenta un asistente que completaremos como en las siguiente imágenes
   

ahora rellenamos con los datos de identificación (nombre de la base de datos, usuario y clave que usamos en su día cuando creamos el docker de postgresql)

   

Y tras aceptar, ya tendremos nuestro servidor postgresql de la máquina vieja registrado en el PgAdmin de la máquina nueva.
   


4-1-agregar servidor postgresql de máquina nueva en PgAdmin de máquina original (opcion 2)

De la misma forma, si no quisiéramos instalar el docker de PgAdmin en la nueva máquina, podemos usar el PgAdmin de la vieja para agregar el servidor postgresql de la máquina nueva y de esa forma el PgAdmin de la vieja puede gestionar las BBDD de postgreSQL de la nas vieja y las de la nueva máquina.

El proceso de adicción del nuevo servidor de postgreSQL es casi calcado del del punto anterior.
Nos identificamos en el PgAdmin de la Nas vieja e iniciamos el asistente de añadir un servidor:
   

Suministramos los datos del nuevo servidor de PostgreSQL para registrarlo
   

rellenamos con los datos de ip, usuario, clave y nombre de la base de datos
   

Y con eso, ya tendremos nuestro servidor PostgreSQL de la máquina nueva, registrado en el PgAdmin de la Nas vieja
   

5-copia de seguridad de la BBDD usando PgAdmin

Es muy importante que los docker de Postgresql y PgAdmin estén en la misma red de dockers o en la misma red local. Si no lo hacemos, el docker de PgAdmin no podrá alcanzar al docker de PostgreSQL.

Una vez identificados en PgAdmd y ya teniendo la conexión al servidor PostgreSQL podemos hacer la exportación.

En la siguiente imagen vemos que PgAdmin tiene definidas dos conexiones a dos servidores de PostgreSQL distintos.
   

El ejemplo, el que nos interesa es el llamado "postgressql" y su bbdd "joplin".

Para exportar la BBDD, seleccionamos la bbdd "joplin" y pulsamos botón secundario.
Al hacerlo se nos presenta un menú emergente del que seleccionaremos la opción de "respaldar"
   

Al continuar, empezará el proceso. Si pulsamos a la información durante la acción, podemos en una ventana el comando que se lanza y como va desarrollándose la copia de seguridad. 
   

En esa ventana podemos ver el comando que se lanza en el sistema (pg_dump).
Es conveniente recordar que si lo hacemos las restauraciones a versiones de postgresql distin podemos tener problemas de versión.
Como regla general, la base de datos exportada no dará problemas si lo importamos desde una versión igual o superior.
En el caso de la imagen se ve en la captura el comando "/usr/local/pgsql-16/pg_dump" . Es decir es una versión 16.

   


Nota:
En el caso de que usemos un PgAdmin para exportar y otro PgAdmin para importarlo, tenemos un pequeño inconveniente, y es que la copia ha queda dentro del docker de PgAdmin.
Para poder moverlo al sistema de archivo de la nas, hemos de lanzar un comando que lo copia por ejemplo a la carpeta /Public.
La ruta del archivo dentro del docker es "/var/lib/pgadmin/storage/usuario_pgadmin/" y el archivo será "joplin" (o el nombre que escribimos en las pantallas anteriores).
   

El comando a ejecutar es similar al siguiente.
Code:
docker cp nombre_docker_pgadmin:/var/lib/pgadmin/storage/usuario_pgadmin/joplin /share/Public/joplin

He usado como destino la carpeta Public porque existe en todas las nas de QNAP y así no tenemos pérdida a la hora de recuperarla  Big Grin

Una forma para evitar tener que usar el anterio comando sería si definimos en la cadena de creación del docker PgAdmin una ruta persistente del tipo
"-v /share/DockerData/pgadmin:/var/lib/pgadmib/storage".
Así al hacer la exportación, los archivos quedarían en esa carpeta accesible desde el sistema de archivos de la nas y nos evitaríamos lo del comando "docker cp"  Wink  y podemos copiar a una carpeta de la nas destino para hacer la importación.


6-restauración de la BBDD en el nuevo postgresql usando PgAdmin

Teniendo ya accesible la copia desde el PgAdmin, ahora toca restaurarla.
En función de como y desde donde hicimos la exportación procederemos de forma similar en todos los casos

Vamos al caso fácil, tenemos un PgAdmin con los dos servidores PostgreSQL (nuevo y viejo) conectados y administrados.

Seleccionamos el viejo servidor y hacemos botón secundario para elegir del menú emergente la opción de crear un usuario primero.
   

Lo llamaré igual que en la máquina original "joplin"
   

definimos la contraseña que luego la usaremos en la definición de creación del docker de Joplin.
   

le damos privilegios a ese usuario para que pueda operar con la bbdd
   


Ahora vamos con la creación de la base de datos vacía a la que asignaremos el usuario "joplin".
Seleccionamos de nuevo bases de datos y hacemos botón secundario, del menu emergente seleccionamos "crear", "base de datos" 
   

Y seguimos un asistente para crearla
   

Seleccionamos el usuario "joplin" como dueño
   

En la lengüeta de seguridad le demos los permisos adecuados
   

y ya tendremos creada la base de datos "joplin_db" vacía con un usuario llamado "joplin"

Ahora toca la restauración propiamente dicha haciendo botón secundario sobre la base de datos joplin y elegimos la opción de restaurar

   

Se inicia un asistente donde indicaremos el archivo origen y el tipo de copia
   

especificamos el nombre del archivo de la copia
   

Y tras unos segundos, la copia estará restaurada



7-instalación del docker de Joplin en la nueva máquina apuntando a la BBDD restaurada
Ahora hemos de desplegar el docker de Joplin haciendo que apunte a la nueva BBDD.
En el caso de ejemplo hay definido un archivo con unos parámetros de inicio que se encuentra ubicado en la carpeta persistente de Joplin.
Este archivo ha de ser creado antes de lanzar la cadena de creación del docker.
En nuestro caso está en "/share/DockerData/joplin" para una Qnap, y el una Terramaster estaría en "/Volume1/DockerData/joplin".
Ni que decir tiene que esa carpeta hemos de crearla con los permisos adecuados y dejar en su interior ese archivo ".env"
La forma mas fácil es usar un Winscp y hacer la copia entre ambas máquinas  Big Grin

Con el archivo ".env" ,desde una consola nos situamos en esa carpeta "/Volume1/DockerData/joplin" y lanzamos la cadena de creación del docker

Para una Qnap sería del tipo:
Code:
docker run -d  -p ip_nueva_nas:22300:22300 --restart always --name="joplin" --env-file .env -v /share/DockerData/joplin:/var/lib/postgresql/data -e DB_CLIENT=pg -e POSTGRES_HOST=ip_nueva_nas -e POSTGRES_PORT=5432 -e POSTGRES_DB=joplin -e POSTGRES_USER=usuario_joplin -e POSTGRES_PASSWORD=clave_usuario_joplin  joplin/server:latest

Y para una Terramaster sería del tipo
Code:
docker run -d  -p ip_nueva_nas:22300:22300 --restart always --name="joplin" --env-file .env -v /Volume1/DockerData/joplin:/var/lib/postgresql/data -e DB_CLIENT=pg -e POSTGRES_HOST=ip_nueva_nas -e POSTGRES_PORT=5432 -e POSTGRES_DB=joplin -e POSTGRES_USER=usuario_joplin -e POSTGRES_PASSWORD=clave_usuario_joplin  joplin/server:latest

Con esto ya tendríamos levantado en nuestra red un docker de Joplin que estaría accesible sólo desde equipos locales.


8-modificaciones de redirecciones en el router o proxy  inverso

Si queremos que esté accesible desde el exterior de nuestra red deberemos modificar las reglas de redireccionamiento que hicimos en su día en el router.
Este cambio es sencillo ya que sólo debemos editar la regla y cambiar la ip de la máquina vieja y poner la ip de la nueva. Los puertos se mantienen

Si en nuestra red el acceso a Joplin se hiciese por un proxy inverso tipo Nginx Proxy manager, debemos editar el "proxy host" adecuado y de nuevo con sólo actualizar la ip cambiando la vieja por la nueva tendremos nuestro Joplin accesible desde el exterior para nuestros equipos clientes.


Nota:
Este post se ha hecho en realidad para ver como hemos de proceder para mover un docker y los datos asociados  de su bbdd en postgresql.
Lo podemos aplicar para otros dockers que no sean Joplin  Smile

Para Joplin hay una forma muuucho mas fácil de moverlo ya que el mismo cliente de Joplin pemite hacer una copia de respaldo.
Es decir, que podíamos haber generado un nuevo postgresql y joplin vacíos, luego exportaríamos los datos Joplin con un cliente y desde un cliente  reconfiguramos la conexión al nuevo Joplin y restauraríamos los datos  Tongue

como siempre si veis algún error o errata me lo hacéis llegar por privado para corregirlo
Un saludo

Agur eta ondo ibili

Ganekogorta (TS-469Pro, TVS-673e, QBoat Sunny, TS-453Be, TR-002 y QHora-301w) Ʀɐɯ0η
  Reply




Users browsing this thread: 1 Guest(s)