postgresql_pgadmin
Diferencias
Muestra las diferencias entre dos versiones de la página.
| Próxima revisión | Revisión previa | ||
| postgresql_pgadmin [2025/10/11 17:38] – creado romix | postgresql_pgadmin [2025/10/15 21:10] (actual) – romix | ||
|---|---|---|---|
| Línea 1: | Línea 1: | ||
| - | ===== PostgreSQL y pgAdmin ===== | + | ====== 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. | **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. | ||
| Línea 8: | Línea 8: | ||
| ---- | ---- | ||
| - | ==== 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**: | 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/ | ||
| + | container_name: | ||
| + | restart: always | ||
| + | env_file: | ||
| + | - .env | ||
| + | environment: | ||
| + | PGADMIN_DEFAULT_EMAIL: | ||
| + | PGADMIN_DEFAULT_PASSWORD: | ||
| + | ports: | ||
| + | - ' | ||
| + | depends_on: | ||
| + | db_postgres: | ||
| + | condition: service_healthy | ||
| + | volumes: | ||
| + | - pgadmin_data:/ | ||
| + | - ./ | ||
| + | networks: | ||
| + | - internal_net | ||
| + | - external_net | ||
| + | |||
| + | db_postgres: | ||
| + | image: postgres: | ||
| + | container_name: | ||
| + | env_file: | ||
| + | - .env | ||
| + | restart: always | ||
| + | healthcheck: | ||
| + | test: [" | ||
| + | interval: 10s | ||
| + | timeout: 5s | ||
| + | retries: 5 | ||
| + | environment: | ||
| + | POSTGRES_USER: | ||
| + | POSTGRES_PASSWORD: | ||
| + | POSTGRES_DB: | ||
| + | expose: | ||
| + | - 5432 | ||
| + | volumes: | ||
| + | - local_pgdata:/ | ||
| + | - ./ | ||
| + | networks: | ||
| + | - internal_net | ||
| + | |||
| + | # Exporter de métricas | ||
| + | |||
| + | postgres_exporter: | ||
| + | image: prometheuscommunity/ | ||
| + | container_name: | ||
| + | environment: | ||
| + | DATA_SOURCE_NAME: | ||
| + | ports: | ||
| + | - " | ||
| + | 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 | ||
| </ | </ | ||
| Línea 23: | Línea 95: | ||
| <code bash> | <code bash> | ||
| + | POSTGRES_USER= " | ||
| + | POSTGRES_PASSWORD= " | ||
| + | POSTGRES_DB= " | ||
| + | PGADMIN_email =" | ||
| + | PGADMIN_pass = " | ||
| - | </ | ||
| + | </ | ||
| + | Esto permite mantener las contraseñas, | ||
| ---- | ---- | ||
| - | ==== Configuración init.sh ==== | + | ==== Configuración init-db.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). | + | |
| + | El archivo **init-db.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). | ||
| + | El código es el siguiente: | ||
| <code bash> | <code bash> | ||
| #!/bin/bash | #!/bin/bash | ||
| + | set -e | ||
| + | |||
| + | # Espera a que PostgreSQL arranque completamente | ||
| + | until pg_isready -U " | ||
| + | >&2 echo " | ||
| + | sleep 1 | ||
| + | done | ||
| + | |||
| + | # Crear bases de datos y usuarios | ||
| + | psql -v ON_ERROR_STOP=1 --username " | ||
| + | -- Crear bases de datos | ||
| + | CREATE DATABASE nextcloud; | ||
| + | CREATE DATABASE grafana; | ||
| + | |||
| + | -- Crear usuarios con contraseñas | ||
| + | CREATE USER unextcloud WITH ENCRYPTED PASSWORD ' | ||
| + | CREATE USER ugrafana WITH ENCRYPTED PASSWORD ' | ||
| + | |||
| + | -- Otorgar todos los privilegios sobre las bases de datos a los usuarios correspondientes | ||
| + | GRANT ALL PRIVILEGES ON DATABASE nextcloud TO unextcloud; | ||
| + | GRANT ALL PRIVILEGES ON DATABASE grafana TO ugrafana; | ||
| + | |||
| + | -- Otorga privilegios adicionales en el esquema público | ||
| + | -- Les da permiso para acceder al esquema public, pero no para crear objetos todavía | ||
| + | GRANT USAGE ON SCHEMA public TO unextcloud, ugrafana; | ||
| + | |||
| + | -- Permite que esos usuarios puedan crear objetos dentro del esquema public | ||
| + | GRANT CREATE ON SCHEMA public TO unextcloud, ugrafana; | ||
| + | |||
| + | -- Le otorga a unextcloud todos los permisos sobre el esquema | ||
| + | GRANT ALL PRIVILEGES ON SCHEMA public TO unextcloud; | ||
| + | |||
| + | -- Permisos sobre todas las tablas existentes dentro del esquema public | ||
| + | GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO unextcloud; | ||
| + | |||
| + | -- Permisos sobre secuencias (autoincrementos) | ||
| + | GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO unextcloud; | ||
| + | |||
| + | -- Define los privilegios por defecto para nuevas tablas en el esquema public | ||
| + | ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON TABLES TO unextcloud; | ||
| + | EOSQL | ||
| + | |||
| </ | </ | ||
| Línea 40: | Línea 160: | ||
| 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. | 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 conexión ==== | ||
| + | Para conectar automáticamente el servicio de **PostgreSQL** con **pgAdmin4**, | ||
| + | |||
| + | <code yaml>{ | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | } | ||
| + | } | ||
| + | } | ||
| + | </ | ||
| ---- | ---- | ||
| Línea 45: | Línea 185: | ||
| Una vez desplegado el contenedor, **pgAdmin** queda accesible desde el navegador en la siguiente URL: | Una vez desplegado el contenedor, **pgAdmin** queda accesible desde el navegador en la siguiente URL: | ||
| + | < | ||
| + | Al ingresar, iniciamos sesión con nuestro usuario correspondiente (de la base de datos como nuestro usuario de pgAdmin). Desde allí, tendremos acceso completo a las bases de datos previamente creadas mediante el script **init-db.sh**. | ||
postgresql_pgadmin.1760204317.txt.gz · Última modificación: por romix
