¡Esta es una revisión vieja del documento!
Tabla de Contenidos
PostgreSQL y pgAdmin
PostgreSQL es un sistema de gestión de bases de datos relacional, robusto y de código abierto, ampliamente utilizado para almacenar y administrar datos de forma segura y eficiente. En este servidor, se utiliza como base de datos principal para servicios como Nextcloud y Grafana.
pgAdmin, por su parte, es una herramienta web que permite administrar bases de datos PostgreSQL de manera visual, simplificando tareas como la creación de usuarios, bases de datos, consultas y respaldos.
Archivo docker-compose.yml
El servicio de base de datos y su entorno de administración se definen en el siguiente archivo docker-compose.yml:
services:
pgadmin4:
image: dpage/pgadmin4:8.10
container_name: pgadmin4
restart: always
env_file:
- .env
environment:
PGADMIN_DEFAULT_EMAIL: ${PGADMIN_email} # Mail de acceso al portal de pgadmin
PGADMIN_DEFAULT_PASSWORD: ${PGADMIN_pass} # Contraseña de acceso al portal
ports:
- '9002:80'
depends_on:
db_postgres:
condition: service_healthy
volumes:
- pgadmin_data:/var/lib/pgadmin
- ./config/servers.json:/pgadmin4/servers.json
networks:
- internal_net
- external_net
db_postgres:
image: postgres:16
container_name: postgres
env_file:
- .env
restart: always
healthcheck:
test: ["CMD-SHELL", "pg_isready"]
interval: 10s
timeout: 5s
retries: 5
environment:
POSTGRES_USER: ${POSTGRES_USER} # Usuario de aplicacion que utilizara moodle para conectarse
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} # Contraseña con la que se conectará
POSTGRES_DB: ${POSTGRES_DB} # Nombre de base de datos que se creará
expose: # Se opta por expose dado que la base de datos no puede estar de cara al usuario
- 5432
volumes:
- local_pgdata:/var/lib/postgresql/data
- ./config/init-db.sh:/docker-entrypoint-initdb.d/init-db.sh
networks:
- internal_net
# Exporter de métricas
postgres_exporter:
image: prometheuscommunity/postgres-exporter:latest
container_name: postgres_exporter
environment:
DATA_SOURCE_NAME: "postgresql://metricas:exporter@db_postgres:5432/${POSTGRES_DB}?sslmode=disable"
ports:
- "9187:9187"
depends_on:
- db_postgres
networks:
- internal_net
volumes:
local_pgdata:
driver: local
pgadmin_data:
driver: local
networks:
internal_net:
name: net_backend
driver: bridge
external: true
external_net:
name: net_frontend
driver: bridge
Variables de entorno
Las variables de entorno definidas en el archivo .env permiten configurar las credenciales y parámetros de conexión de ambos servicios:
POSTGRES_USER= "USUARIO_DB" POSTGRES_PASSWORD= "PASSWORD_DB" POSTGRES_DB= "NOMBRE_DB" PGADMIN_email ="EMAIL_PGADMIN" PGADMIN_pass = "PASSWORD_PGADMIN"
Esto permite mantener las contraseñas, usuarios y configuraciones fuera del archivo docker-compose.yml, evitando exponer información sensible y facilitando cambios sin modificar el compose directamente.
Configuración init.sh
El archivo init.sh se ejecuta automáticamente la primera vez que se levanta el contenedor de PostgreSQL. Su función es crear la base de datos inicial, asignar permisos y preparar el entorno para su uso por parte de otros servicios (como Nextcloud o Grafana).
#!/bin/bash
De esta manera, las bases de datos nextcloud y grafana se crean automáticamente y quedan listas para ser utilizadas en el arranque inicial del contenedor.
Configuración de pgAdmin
Una vez desplegado el contenedor, pgAdmin queda accesible desde el navegador en la siguiente URL:
