• 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
postgreSQL en Docker
#1
Hola

Aqui vamos una base de datos postgreSQL en un contenedor. 
Este motor podremos usarlo posteriormente para tener datos de NextCloud, Moodle, OpenERP (Odoo)....

Usando la consola (Putty y otros programas similares) podemos instalarlo.

El comando de consola para crear el contenedor es:
Código:
docker run -d --name="postgresql" --restart always --network=miscontenedores -e POSTGRES_USER=usuario -e POSTGRES_PASSWORD=claveusuario -e POSTGRES_DB=basedatos_db -v /share/DockerData/postgresql:/var/lib/postgresql/data postgres

Con el parámetro -v /share/DockerData/postgresql:/var/lib/postgresql/data hacemos persistentes los datos para futuras copias o desinstalaciones.
Definimos un usuario, su clave y una base de datos de ejemplo.

Como en otros contenedores de ejemplo se usará una red llamada "miscontenedores".

Si no la tenéis podéis hacerla con la orden de consola:
Código:
docker network create miscontenedores

Mediante un docker de pgAdmin o bien con otros gestores de bases de datos podremos hacer una gestión de tablas, consultas a nivel gráfico.

Los parámetros de creación del docker, los podemos ver en la información que nos suministran en la web de docker.
Un saludo

Agur eta ondo ibili

Ganekogorta (TS-469Pro, TVS-673e, QBoat Sunny y TS-453Be) Ʀɐɯ0η
  Responder
#2
Muchas gracias paisano por la ayuda

Un par de preguntas:

- Cuando mapeas el volumen del NAS (-v /share/DockerData/postgresql, en tu ejemplo) ¿de donde deber colgar la carpeta postgresql? ¿Estará dentro de un folder DockerData previamente creado y con permisos de R/W para el usuario postgres o todo esto lo genera de forma automática el docker? 

- Me temo que con la configuración que has puesto tan solo es posible acceder a postgreSQL desde la propia red local ¿no? ¿Como se podría acceder desde fuera? Aparte del mapear / abrir en el router el puerto creo que habría que tocar algún fichero de cfg en la instalación de postgres ¿no?

Me permito añadir a mi propio comentario relativo a la conectividad.

Acabo de comprobar la necesidad de incluir de forma manual en ajustes avanzados (dentro de la pantalla del Container) la IP de salida de acuerdo a la imagen adjunta.

Confirmo de nuevo que abriendo el puerto 5432 en mi router no consigo salir al exterior por cuanto el puerto sigue cerrado (supongo que porque pg no lo abre)


Archivos adjuntos Imagen(es)
   
  Responder
#3
(17-06-2020, 01:13 PM)Pharizna escribió: Muchas gracias paisano por la ayuda

Un par de preguntas:

- Cuando mapeas el volumen del NAS (-v /share/DockerData/postgresql, en tu ejemplo) ¿de donde deber colgar la carpeta postgresql? ¿Estará dentro de un folder DockerData previamente creado y con permisos de R/W para el usuario postgres o todo esto lo genera de forma automática el docker? 
La carpeta DockerData ha de crearse como carpeta compartida.
En la generación del contenedor, se creará automáticamente la carpeta postgresql.

(17-06-2020, 01:13 PM)Pharizna escribió: - Me temo que con la configuración que has puesto tan solo es posible acceder a postgreSQL desde la propia red local ¿no? ¿Como se podría acceder desde fuera? Aparte del mapear / abrir en el router el puerto creo que habría que tocar algún fichero de cfg en la instalación de postgres ¿no?

Me permito añadir a mi propio comentario relativo a la conectividad.

Acabo de comprobar la necesidad de incluir de forma manual en ajustes avanzados (dentro de la pantalla del Container) la IP de salida de acuerdo a la imagen adjunta.

Confirmo de nuevo que abriendo el puerto 5432 en mi router no consigo salir al exterior por cuanto el puerto sigue cerrado (supongo que porque pg no lo abre)
El container está en otra red distinta del rango de la ip de la nas (p.e. 192.168.10.10 para la nas y el 172.16.3.4 para el contenedor).
Cuando en la orden de creación del contenedor ponemos algo como “-p 5000:8000” estamos indicando que el puerto 8000 del contenedor es accesible por el puerto 5000 desde el segmento de red de la nas.
Es decir si quieres hacer que el puerto 8000 del contenedor sea visible desde internet por el puerto 6000, has de hacer una regla en tu enrutador que abra el puerto 6000 (hacemos natp) y apunte a la ip privada de tu nas (192.168.10.10) hacia su puerto 5000, así llegarías a ip de tu contenedor (172.16.3.4) por su puerto 8000. Estamos haciendo una doble traslación de puertos

Sería algo como lo de la imagen siguiente
[Imagen: b63fe9455ab39fe46c1e8b3cd8fc782c.jpg]
Un saludo

Agur eta ondo ibili

Ganekogorta (TS-469Pro, TVS-673e, QBoat Sunny y TS-453Be) Ʀɐɯ0η
  Responder
#4
(17-06-2020, 03:18 PM)Ganekogorta escribió: Cuando en la orden de creación del contenedor ponemos algo como “-p 5000:8000” estamos indicando que el puerto 8000 del contenedor es accesible por el puerto 5000 desde el segmento de red de la nas.
Es decir si quieres hacer que el puerto 8000 del contenedor sea visible desde internet por el puerto 6000, has de hacer una regla en tu enrutador que abra el puerto 6000 (hacemos natp) y apunte a la ip privada de tu nas (192.168.10.10) hacia su puerto 5000, así llegarías a ip de tu contenedor (172.16.3.4) por su puerto 8000. Estamos haciendo una doble traslación de puertos

Sería algo como lo de la imagen siguiente
[Imagen: b63fe9455ab39fe46c1e8b3cd8fc782c.jpg]

No estoy totalmente de acuerdo con tu primera parte de la respuesta ya que si eliges desde la opciones avanzadas del contenedor la opción NAT mantiene la misma IP el contenedor y el NAS y tan solo es necesario mapear los puertos.

De hecho así puedo acceder al postgres con pgadmin desde otro PC de mi red atacando a la misma IP del QNAP y el puerto 5432, claro.

Sin embargo y a pesar de que he "mapeado" los puertos en mi router sigo sin poder acceder desde fuera. Lo que más me extraña es que probando desde fuera me dice que tengo todos los puertos cerrados ¿? Desgraciadamente mi HASSIO está fuera de servicio aunque hay otros equipos encendidos y con salida al exterior

¿Tendrá algo que ver que al no tener IP fija utilizo direccionamiento a través de xxxxxx.ddns.net? No lo creo


Archivos adjuntos Imagen(es)
       
  Responder
#5
Hola

La carpeta postgresql se creará si definimos el parámetro “-v /share/DockerData/postgresql:/var/lib/postgresql/data “ siendo DockerData la carpeta creada desde carpetas compartidas.

Aunque la idea de la carpeta persistente es para mantener los datos tras eliminar el contenedor o facilitar las copias de seguridad, en el caso de postgresql podríamos evitarlo.

Eso si, luego tendríamos que hacer las copias de seguridad de las bases de datos con programas tipo pgadmin o por comandos.
Un saludo

Agur eta ondo ibili

Ganekogorta (TS-469Pro, TVS-673e, QBoat Sunny y TS-453Be) Ʀɐɯ0η
  Responder
#6
Hola
En cuanto al acceso de postgresql desde el exterior. Desconozco si en la creación del usuario has de indicarle que puede acceder desde cualquier ip. Tal vez pueda venirte por ahí el problema.

Independiente de lo anterior ¿es seguro abrir el acceso al servidor postgresql desde internet?
Un saludo

Agur eta ondo ibili

Ganekogorta (TS-469Pro, TVS-673e, QBoat Sunny y TS-453Be) Ʀɐɯ0η
  Responder
#7
[attachment=1215 escribió:Ganekogorta pid='16016' dateline='1592458541']Hola
En cuanto al acceso de postgresql desde el exterior. Desconozco si en la creación del usuario has de indicarle que puede acceder desde cualquier ip. Tal vez pueda venirte por ahí el problema.

Independiente de lo anterior ¿es seguro abrir el acceso al servidor postgresql desde internet?

He conseguido que mi router deje pasar todo ... pero no lo del postgresql de lo que deduzco que es un problema de "configuración". Sigo buscando.

En cuanto a seguridad, el "problema" es que mi aplicación se ejecuta en la nube mientras que la BBDD tiene que estar en mi NAS y de ahí la necesidad de dicho acceso desde Internet. ¿Alguna otra alternativa excepto la de sacar postgresql a un servidor externo?  Huh

Lo que me imaginaba, era un problema de "configuración" del NAS!
Rebuscando he encontrado en myQNAPcloud que se puede (se debe) añadir el puerto de postgres para que se abra desde el NAS por cuanto del router a Internet ya se abre en el mismo!
En resumen... FUNCIONA!  Tongue


Archivos adjuntos Imagen(es)
   
  Responder
#8
Hola
Dos postgresql
Uno en la nube al que ataca tu aplicación nube y otro local. Y entre ambos debe de haber una sincronización.

Así, tus clientes locales atacan a la nas y los de la nube a la de la nube.

Es importante de cara a seguridad, que su canal de conexión sea seguro (una vpn).

No lo he probado en postgresql, pero si en mysql y doy por supuesto que postgresql también lo soporta.
Básicamente hay que configurar una base para que sea esclavo de la otra, y configurar la otra para que sea esclava de la una. Así cruzan datos en ambos sentidos.

Echa una ojeada en la web a cosas como esta https://hevodata.com/learn/postgresql-sync-replication/
Un saludo

Agur eta ondo ibili

Ganekogorta (TS-469Pro, TVS-673e, QBoat Sunny y TS-453Be) Ʀɐɯ0η
  Responder
#9
(18-06-2020, 09:25 AM)Ganekogorta escribió: Hola
Dos postgresql
Uno en la nube al que ataca tu aplicación nube y otro local. Y entre ambos debe de haber una sincronización.

Así, tus clientes locales atacan a la nas y los de  la nube a la de la nube.

Es importante de cara a seguridad, que su canal de conexión sea seguro (una vpn).

No lo he probado en postgresql, pero si en mysql y doy por supuesto que postgresql también lo soporta.
Básicamente hay que configurar una base para que sea esclavo de la otra, y configurar la otra para que sea esclava de la una. Así cruzan datos en ambos sentidos.

Echa una ojeada en la web a cosas como esta https://hevodata.com/learn/postgresql-sync-replication/

Gracias pero no necesito tanta complicación   Confused

El usuario local seré simplemente yo y el servicio que usará dichos datos está en la nube, en un servicio gratuito (heroku, para más señas).
El problema es que la BBDD gratuita en Heroku tan solo permite 10.000 registros y en mi aplicación (en streaming con datos cada minuto o menos) la lleno nada más empezar. Por eso hasta tenga mi producto acabado e instalable en clientes querría hacer mis pruebas (y posterior DEMO) con mi postgres local. De ahí mi "extraña" idea de uso del NAS como servidor de datos
  Responder
#10
Aunque he conseguido que funcione la conexión de mi app en la nube a la BBDD de postqreSQL que tengo en mi NAS "casero" ahora tengo un problema Sad

Ayer tras un problema masivo de Internet en Madrid reseteé, entre otro muchos dispositivos de casa, el NAS. La sorpresa ha sido que cuando ha vuelto a arrancar se ha perdido todo el contenido de la BBDD que tenía... a pesar de haber utilizado la opción “-v /share/DockerData/postgresql:/var/lib/postgresql/data “ para crear una carpeta compartida externa al docker.

En mi instalación local de postgreSQL en un PC con Windows también basada en dockers consigo la persistencia de la BBDD y (creando una entrada en la propia BBDD, más exactamente en tablespaces) y con ello  y sin hacer nada de forma manual siempre mantengo los datos de la BB aunque apague y encienda diariamente el PC y con ello el correspondiente docker. ¿Se puede hacer algo similar en el QNAP?


Archivos adjuntos Imagen(es)
   
  Responder




Usuarios navegando en este tema: 1 invitado(s)