PostgreSQL
Fuente: PostgreSQL y pgAdmin
Al igual que en MariaDB, uno de los elementos importantes de un entorno son las bases de datos (BBDD). Es donde se almacenan los datos necesarios para que las aplicaciones puedan guardar y gestionar persistentemente en el disco.
Habitualmente, cuando creo un Docker de motor de BBDD, añado también un gestor gráfico o tipo web para agilizar la gestión de la misma. Así que en este caso he añadido pgAdmin.
También prefiero centralizarlo todo en un contenedor y que el resto se conecte a este, para así no duplicar las instalaciones de motores de BBDD y ser más conservador en los recursos de memoria, centralizar copias de seguridad...
---
services:
postgres:
container_name: postgresql
image: postgres:15
restart: always
environment:
POSTGRES_PASSWORD: ${POSTGRESQL_PWD}
volumes:
- ./home/lynze/DockerVolumes/postgresql:/var/lib/postgresql/data
networks:
- postgresqlnet
pgadmin:
container_name: pgadmin
image: dpage/pgadmin4
restart: always
environment:
PGADMIN_DEFAULT_EMAIL: ${PGADMIN_USR}
PGADMIN_DEFAULT_PASSWORD: ${PGADMIN_PWD}
ports:
- 8181:80
volumes:
- ./home/lynze/DockerVolumes/pgadmin:/var/lib/pgadmin
networks:
- postgresqlnet
depends_on:
- postgres
networks:
postgresqlnet:
external: true
Variables
POSTGRESQL_PWD
: Contraseña del usuario administrador de PostgreSQL.PGADMIN_USR
: Usuario de pgAdmin.PGADMIN_PWD
: Contraseña del usuario pgAdmin.
Notas
image
: Escogeremos una versión concreta como la15
,16
,17
... ya que si le ponemoslatest
(o nada), la imagen se actualizará en algún momento a la última versión y tendremos problemas para levantar las BBDD. Actualmente no hay retro/post/compatibilidad entre versiones. Si quieres pasar de una versión a otra la única opción es hacer una copia de seguridad en una versión y restaurarla en la otra.- En mi caso particular, tengo varias versiones en marcha, según las necesidades de cada aplicación. Pero procuro tener las menos posibles.
- Otra opción es tener sólo una versión y centralizar todas las aplicaciones ahí y en algún momento, migrar todas las BBDD a otra versión de PostgreSQL, apuntar las aplicaciones al nuevo y eliminar el más antiguo.
networks
: Todos los contenedores que creemos a partir de ahora que necesiten conectarse a MariaDB, se han de añadir a la redpostgresqlnet
.
Copias de seguridad
Hacer copias de seguridad es una obligación si no quieres perder tus datos. En este caso se hace una copia de seguridad de todas las BBDD y objetos. Tengo en mente hacer como en la copia de seguridad de MariaDB que se haga por separado, pero de momento es esto lo que tengo.
#!/bin/bash
# Eliminamos los archivos más antiguos de 20 días
find -L ./postgresql_bck -mtime +20 -type f -delete
# Hacemos copia de todas las BBDD y objetos
docker exec postgresql /usr/bin/pg_dumpall -U postgres > ./postgresql_bck/postgresql_bck_$(date +%Y%m%d%H%M%S).sql
##
# Para restaurar todas las BBDD: cat ./postgresql_bck/postgresql_bck_XXXXXXXXX.sql | docker exec -i postgresql psql -U postgres
# Ojo con restaurarlo todo, ya que también afetaría a los esquemas de sistema y no es válido si es de una versión a otra.
# La restauración habría que hacerla BD por BD si queremos pasar de una a otra versión.
##
Para ejecutarlo hay que recordar hacerlo ejecutable (chmod u+x backup.sh
) y muy recomendable añadirlo a cron
para que se haga periódicamente.