¡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:
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:
